一、框架作用二、properties使用文件三、全局配置文件三、映射文件(魔法源泉!)
1、参数处理规则
(1)单个参数(2)多个参数 (3)使用POJO传递多个参数(4)使用Map来传递(4 )使用TO(5)#和¥区别2、select语句
(1)、返回List(2)、返回多条记录Map集合(3)、resultMap自定义映射规则(4)、联表查询
1、最基础联表查询2、使用association分布式查询3、使用collection进行分布式查询 四、动态SQL五、缓存六、整合Spring等框架
一、框架作用作为数据库整体解决方案,解决了高耦合的问题,ORM(object relation mapping)把javabean与数据库一一映射,把JDBC的操作封装
但是编写sql需要手动进行,所以mybatis把sql与java编码分离,是半自动框架
将数据库配置信息放到properties文件中,在mybatis.xml文件中引用为reousrces
properties文件
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql:///mybatis?serverTimezone=Asia/Shanghai jdbc.username=root jdbc.password=123456
xml文件
三、全局配置文件`` ```java
在mubatis_config.xml文件名中
可以设置自动驼峰命名,还有其他参数之后再学
貌似不是很建议用这个参数
之后做了多库再来看这个文件
三、映射文件(魔法源泉!) 1、参数处理规则 (1)单个参数
mb不做任何处理
#{参数名}:取出参数值
mb做特殊处理
多个参数会被封装成一个map
key:param1…paramN,或者参数的索引
value:传入的参数值
#{}就是从map获取指定的key值
推荐使用命名参数:明确指定封装的map和key
public Employee getEmp(@Param("id")Integer id, @Param("lastName")String last_name);
接口定义参数
在xml文件中来对应参数值传入位置
(3)使用POJO传递多个参数 (4)使用Map来传递用的不多
(4 )使用TO多个参数不是业务模型中的数据,但是经常使用,推荐写一个TO(Transfer Object)数据传输对象
Page{ int index; int size}
#{}以预编译的形式,将参数设置到SQL,PreparedStatement
¥{}将区处得知直接拼装到sql中,有注入安全问题
但是原生jdbc不支持占位符的地方使用¥{}进行取值
Mapper.xml文件
Mapper接口文件
public ListgetEmpsByLastNameLike(String lastName);
Test文件就可以使用通配符查询方式查询多个对象返回集合
List(2)、返回多条记录Map集合like = mapper.getEmpsByLastNameLike("%a%");
Mapper.xml文件
Mapper接口文件
@MapKey("id") //注解指明封装map的key的属性
public Map getEmpsByLastNameLikeReturnMap(String lastName);
Test文件就可以使用通配符查询方式查询多个对象返回集合
Map(3)、resultMap自定义映射规则mappp = mapper.getEmpsByLastNameLikeReturnMap("%o%"); System.out.println(mappp); ```java 在这里插入代码片
可以自定义javabean与数据库中列名的映射规则
比如上面我们把邮箱和名字的映射换了一下,于是测试类输出
Employee{id=1, last_name='ustc.com', email='tom', gender='0'}
真的是非常的灵活哈
(4)、联表查询 1、最基础联表查询表结构
Mapper.xml文件
Employee的类属性,可以直接通过点的方式来读取,也可以通过association来封装
2、使用association分布式查询首先需要建立公司表的Mapper接口和xml文件,定义方法和查询返回对象类型,不要忘记在mybatis配置文件中注册
分布式查询
可以看到公司xml返回的对象被封装后赋予给了员工的公司属性,进一步降低了耦合,对已有方法进行组合
可以使用延迟加载,在查询员工对象时,部门信息使用时再去查询
在mybatis配置文件中进行设置
3、使用collection进行分布式查询
需求:查询部门信息,同时返回部门中的员工集合
下面才是分布查询,同时需要在员工接口中定义返回集合的方法
public ListgetEmpsByDeptId(Integer id);
同步在mapper文件中定义查询语句
select * from tbl_employee where d_id=#{dept_id}
在部门mapper中定义分布式查询语句
SELECT id,dept_name FROM tbl_dept WHERe id=#{id}
由于emps集合属性是存在于公司javabean中,不存在于公司数据库的列属性中,所以select中不含emps属性,而是通过resultMap中的collection来返回属性进行封装
四、动态SQL 五、缓存



