MyBatis是一款优秀的持久层框架,用于简化JDBC开发。
持久层:负责将数据保存到数据库的那一层代码;javaEE三层架构:表现层、业务层、持久层。
框架:
框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。
在框架的基础之上构建软件编写更加高效、规范、通用、可扩展。
JDBC缺点
1.硬编码:注册驱动、获取连接;SQL语句。
2.操作繁琐:手动设置参数;手动封装结果集。
查询user表中所有数据
1.创建user表,添加数据
2.创建模块,导入坐标
3.编写Mybatis核心配置文件—>替换链接信息 解决硬编码问题。
4.编写SQL映射文件—>统一管理sql语句,解决硬编码问题
5.编码:
1.定义POJO类;
2.加载核心文件,获取 SqlSessionFactory 对象;
3.获取SqlSession对象,执行SQL语句;
4.释放资源。
使用Mapper代理方式完成入门案例
1.定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下。
2.设置SQL映射文件的namespace属性为Mapper接口全限定名。
3.在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致。
4.编码:①通过SqlSession的getMapper方法获取Mapper接口的代理对象。
②调用对应方法完成sql的执行。
细节:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。
类型别名(typeAliases)
MyBatisX 插件
MyBatisX是一款基于IDEA的快速开发插件,为效率而生。
主要功能:XML和接口方法互相跳转;根据接口方法生成statement
实体类属性名 和 数据库表列名 不一致,不能自动封装数据
1)起别名:在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样
*可以定义
2)resultMap:定义
select *
from tb_brand;
条件查询:
1.编写接口方法:Mapper接口。
参数:所有查询条件。
结果:LIst
2.编写SQL语句:SQL映射文件。
3.执行方法,测试。
//三种查询的接口。
List selectByCondition(@Param("status") int status, @Param("companyName") String companyName, @Param("brandName") String brandName);
List selectByCondition(Brand brand);
List selectByCondition(Map map);
多条件-动态条件查询
SQL语句会随着用户的输入或外部条件变化而变化,我们称为动态SQL
单条件动态条件查询
从多个条件中选择一个
choose(when,otherwise):选择,类似于 java 中的 switch 语句
添加
1.编写接口方法:Mapper接口 void add(Brand brand);
参数:出了ID之外的所有数据
结果:void
2.编写SQL语句:SQL映射文件。
3.执行方法,测试。
insert into tb_brand (brand_name,company_name,ordered,description,status)
value(#{brandName},#{companyName},#{ordered},#{description},#{status})
MyBatis事务:
openSession():默认开启事务,进行增删改查后需要使用sqlSession.commit();手动提交事务。
openSession(true):可以设置为自动提交事务(关闭事务)。
在数据添加成功后,需要获取插入数据库数据的主键的值
比如:添加订单和订单项
1.添加订单。
2.添加订单项,订单项中需要设置所属订单的id。
修改.........(数据库语句略)
1.编写接口方法:Mapper接口 void update(Brand brand);
参数:所有数据
结果:void
2.编写SQL语句:SQL映射文件。
3.执行方法,测试。
update tb_brand
set
brand_name = #{brandName},
company_name = #{companyName},
ordered = #{ordered},
description = #{description},
status = #{status}
where id = #{id};
删除
删除一个
1.编写接口方法:Mapper接口 void deleteById(int id);
参数:id
结果:void
2.编写SQL语句:SQL映射文件。
3.执行方法,测试。
delete from tb_brand where id = #{id};
批量删除
1.编写接口方法:Mapper接口 void deleteByIds(@Param("ids" ) int[] ids);
参数:id数组
结果:void
2.编写SQL语句:SQL映射文件。
3.执行方法,测试。
void deleteByIds(@Param("ids") int[] ids);
//不加@Param("ids") 那么collection="array"
delete from tb_brand where id
in
#{id}
;
MyBatis参数传递
MyBatis接口方法中可以接受各种各样的参数,MyBatis底层对于这些参数进行不同的封装处理方式
单个参数:
1.POJO类型:直接使用,属性名 和 参数占位符名称 一致
2.Map集合:直接使用,键名 和 参数占位符名称 一致
3.Collection:封装成Map集合,可以使用@Param注解,替换集合中默认的键名 arg。
map.put(“arg0”,collection 集合);
map.put(“collection”,collection 集合);
4.List:封装成Map集合,可以使用@Param注解,替换集合中默认的键名 arg。
map.put(“arg0”,List 集合);
map.put(“collection”,List 集合);
map.put(“List”,List 集合);
5.Array:封装成Map集合,可以使用@Param注解,替换集合中默认的键名 arg。
map.put(“arg0”,数组);
map.put(“array”,数组);
6.其他类型:直接使用
多个参数:封装为Map集合,可以使用@Param注解,替换集合中默认的键名 arg。
map.put("arg0",参数1)
map.put("param1",参数1)
map.put("arg1",参数2)
map.put("param2",参数1)
----------------------@Param("username")
map.put("username",参数1)
map.put("param1",参数1)
map.put("arg1",参数2)
map.put("param2",参数1)
MyBatis提供了ParamNameResolver类来进行参数封装。
建议:将来都是用@Param注解来修改Map集合中默认的键名,并使用修改后的名称来获取值,这样可读性更高。
使用注解开发会比配置文件开发更加方便
@Select("select * from tb_user where id = #{id}")
public User selectById(int id);
查询:@Select; 添加:@Insert; 修改:@Update; 删除:@Delete
提示:主街完成简单功能;配置文件完成复杂功能。



