Java面试题系列——JavaSE面试题(Mybatis二)

1、Mybatis级联的配置

级联(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)

    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
  
         
        
        
        
        
        
        
    
      
    
  
    
        
        
        
        
        
    
  

  
    
        
        
        
        
        
        
        
        
        
           
    
  
    





  
    
     
  




    
    
        
    

2、Mybatis的一二级缓存是什么样的?

缓存定义:缓存其实就是存储在内存中的临时数据,这里的数据量会比较小,一般来说,服务器的内存也是有限的,不可能将所有的数据都放到服务器的内存里面,所以, 只会把关键数据放到缓存中,缓存因为速度快,使用方便而出名!

mybatis一级缓存:

mybatis一级缓存是默认开启的,它在一个sqlSession会话里面的所有查询操作都会保存到缓存中,一般来说一个请求中的所有增删改查操作都是在同一个sqlSession里面的,所以我们可以认为每个请求都有自己的一级缓存,如果同一个sqlSession会话中2 个查询中间有一个 insert 、update或delete 语句,那么之前查询的所有缓存都会清空。

mybatis二级缓存:

二级缓存是mapper级别的,Mybatis默认是没有开启二级缓存的。 第一次调用mapper下的SQL去查询用户的信息,查询到的信息会存放代该mapper对应的二级缓存区域。 第二次调用namespace下的mapper映射文件中,相同的sql去查询用户信息,会去对应的二级缓存内取结果。

Java面试题系列——JavaSE面试题(Mybatis二)_第1张图片

 

3、Mybits的缺点有哪些?

(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语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

4、Mybatis如何防止SQL注入?

MyBatis提供了两种支持动态 sql 的语法 #{} 和 ${},其中${} 是简单的字符串替换,而 #{} 在预处理时,会把参数部分用一个占位符 ? 代替,可以有效的防止sql的注入。

持续更新中,敬请期待!

参考文章:

https://www.iteye.com/blog/zhaoshijie-2102660

mybatis的级联和延迟加载配置_Leven.的博客-CSDN博客

mybatis学习之级联 - 简书

mybatis一级缓存和二级缓存的区别是什么-java教程-PHP中文网

mybatis 优缺点(优点和缺点) - 走看看 

你可能感兴趣的:(java)