1.MyBatis的逆向工程
MyBatis逆向工程可以根据表创建对应的POJO类、Mapper接口、SQL映射文件。MyBatis是通过MyBatis Generator【MyBatis生成器:简称MBG】来实现逆向工程的。
MyBatis逆向工程缺点:只能处理单表!
2.MyBatis基于注解的增删改查
MyBatis支持基于xml的SQL语句,也支持基于注解的SQL语句。
基于xml标签
- Insert:往数据表中插入数据
- Select:从数据表中查询数据
- Delete:删除数据表的数据
- Update:更新数据表中的数据
关联查询
- resultMap标签
- result标签:普通字段映射
- association标签:处理对一的关联关系
- collection标签:处理对多的关联关系
常用注解:
- @insert: 代替insert标签
- @Select:代替原来select标签
- @delete:代替原来的delete标签
- @update:代替原来的update标签
关联查询
- @results:代替原来的resultMap标签
- @Result:代替result标签
- @one:代替原来的association标签
- @Many:代替原来的collection标签
关联查询:
X对一的关联关系【2种解决方案】
需求:在查询员工信息的时候,顺带着将员工所属的部门信息也查询出来。
第一种方式:
@Select("SELECT e.`eid`,e.`ename`,d.`did`,d.`dname` FROM employee e LEFT JOIN dept d ON e.dd =d.`did` WHERE e.eid= #{eid}")
@Results({
@Result(column="eid",property="eid"),
@Result(column="ename",property="ename"),
@Result(column="did",property="dept.did"),
@Result(column="dname",property="dept.deptName")
})
public Employee getEmployeeWithDeptByEid(Integer eid);
第二种方式:分步查询
@Select("SELECT eid,ename,dd FROM employee WHERE eid= #{eid}")
@Results({
@Result(column="eid",property="eid"),
@Result(column="ename",property="ename"),
@Result(column="dd",one=@One(select="getDeptByDid"),property="dept")
})
public Employee getEmployeeWithDeptByEid(Integer eid);
@Select("SELECT did,dname deptName FROM dept WHERE did = #{did}")
public Dept getDeptByDid(Integer did);
x 对多的关联映射【1种解决方案】
需求:在查询部门信息的时候,同时将该部门下所有的员工信息查询出来
第一种:分步查询
DeptMapper接口:
@Select("SELECT did,dname FROM dept WHERE did = #{did}")
@Results({
@Result(column="did",property="did"),
@Result(column="dname",property="deptName"),
@Result(column="did",property="emps",many=@Many(select="com.offcn.dao.EmployeeMapper.getEmployeeByDid"))
})
public Dept getDeptWithEmpsByDid(Integer did);
EmployeeMapper接口
@Select("SELECT eid,ename FROM employee WHERE dd =#{did}")
Employee getEmployeeByDid(Integer did);
3.MyBatis的缓存
缓存是为了加快查询效率的,MyBatis自带了缓存机制。MyBatis里面有一级缓存和二级缓存。
一级缓存:SqlSession缓存:,默认是开启
二级缓存:Mapper【namespace】级别,默认是关闭的,需要手动开启。
3.1一级缓存
- MyBatis一级缓存失效的四种情况:
- 1.SqlSession对象不同
- 2.SqlSession对象相同,查询条件不同
- 3.SqlSession对象相同,查询条件也相同,在两次查询之间进行了增删改操作
- 4.SqlSession对象相同,查询条件也相同,在两次查询之间手动清理了缓存
3.2二级缓存
MyBatis的二级缓存使用有四个条件:
1.在mybatis的全局配置文件中开启全局二级缓存
<!-- 开启全局二级缓存 -->
<setting name="cacheEnabled " value="true"/>
2.在mapper接口对应的sql映射文件中加一个cache标签
3.放入到二级缓存中的pojo对象必须实现序列化接口
4.必须是在一级缓存关闭的情况下,一级缓存中的数据才会跑到二级缓存中。
来源:CSDN
作者:素情
链接:https://blog.csdn.net/weixin_44140097/article/details/104885449