级联(cascade)在计算机科学里指多个对象之间的映射关系,建立数据之间的级联关系提高管理效率。
第一种配置方式:(resultmap进行配置)
1.定义四个实体。User Role Privilege Resource:
public class User implements Serializable {
private String id;
private String username;
private String password;
private Set role = new HashSet();
public class Role implements Serializable {
private String id;
private String name;
private String des;
private Set privilege = new HashSet();
public class Privilege implements Serializable { private String id; private String name; private String des;
private Set resource = new HashSet(); private Privilege parent; private Set child = new HashSet();
public class Resource implements Serializable {
private String id;
private String uri;
private String des;
}
2.需求:我通过用户名username查找出该用户对应的角色以及角色对应的权限和资源
3.UserMapper.xml的查询方法为
5.UserMapper.java定义方法
public interface UserMapper {
User findUserByUserName(@Param(value="username")String username);
}
第二种配置方式:(利用association,collection)
缓存定义:缓存其实就是存储在内存中的临时数据,这里的数据量会比较小,一般来说,服务器的内存也是有限的,不可能将所有的数据都放到服务器的内存里面,所以, 只会把关键数据放到缓存中,缓存因为速度快,使用方便而出名!
mybatis一级缓存是默认开启的,它在一个sqlSession会话里面的所有查询操作都会保存到缓存中,一般来说一个请求中的所有增删改查操作都是在同一个sqlSession里面的,所以我们可以认为每个请求都有自己的一级缓存,如果同一个sqlSession会话中2 个查询中间有一个 insert 、update或delete 语句,那么之前查询的所有缓存都会清空。
二级缓存是mapper级别的,Mybatis默认是没有开启二级缓存的。 第一次调用mapper下的SQL去查询用户的信息,查询到的信息会存放代该mapper对应的二级缓存区域。 第二次调用namespace下的mapper映射文件中,相同的sql去查询用户信息,会去对应的二级缓存内取结果。
(1)、MyBatis框架的优点:
1. 与JDBC相比,减少了50%以上的代码量。
2. MyBatis是最简单的持久化框架,小巧并且简单易学。
3. MyBatis灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,可重用。
4. 提供XML标签,支持编写动态SQL语句(XML中使用if, else)。
5. 提供映射标签,支持对象与数据库的ORM字段关系映射(在XML中配置映射关系,也可以使用注解)。
(2)、MyBatis框架的缺点:
1. SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。
2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
MyBatis提供了两种支持动态 sql 的语法 #{} 和 ${},其中${} 是简单的字符串替换,而 #{} 在预处理时,会把参数部分用一个占位符 ? 代替,可以有效的防止sql的注入。
参考文章:
https://www.iteye.com/blog/zhaoshijie-2102660
mybatis的级联和延迟加载配置_Leven.的博客-CSDN博客
mybatis学习之级联 - 简书
mybatis一级缓存和二级缓存的区别是什么-java教程-PHP中文网
mybatis 优缺点(优点和缺点) - 走看看