DAY15 分页、注解开发、lombok、动态sql、缓存

一、分页,一种是在sql中实现(推荐使用),一种是在java中实现

@Test
    public void test2(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper userDao = sqlSession.getMapper(UserMapper.class);
    HashMap stringIntegerHashMap = new HashMap<>();
    stringIntegerHashMap.put("startIndex",0);
    stringIntegerHashMap.put("pageSize",2);
    List userByLimit = userDao.getUserByLimit(stringIntegerHashMap);
    for (User user : userByLimit) {
        System.out.println(user);
    }
    sqlSession.close();
}

二、注解开发

@Select("select * from user where id = #{id}")
User getUserById(@Param("id")  int id);

@Param("id") 引用类型的参数或String类型,需要加上,引用类型不需要加,两个以上的基本类型必须加,

即使用这种注解,在config中也要绑定mapper,class等于接口


    

不绑定不行。congfig 中绑定了谁,才会扫描谁

三、lombok

@Data,放在类上,作用在所有属性上,放在属性上,作用在该属性上

不支持构造器重载,需要手动添加。

缺点:改变了java语言的书写,减少了本该存在的东西,不便于阅读,如果到处充斥着这种插件,会极大降低java语言的严谨性,迟早被其他语言取代。

四、studentMapper接口和studentMapper.xml存放问题

接口放在java文件夹下的dao文件夹,xml放在resource文件夹下的dao文件夹,在config配置mapper中,填写dao/studentMapper.xml,注意:resource文件夹下也应该能展开,如果展不开,一级一级的建,不要加.一次建完,生成的target文件,会自动把接口和xml文件放在同一个包里。

五、多对一  association 社团 property 财物

方法1、子查询



    
    
    

    

方法2、连表查询  推荐使用



    
    
    
        
    

六、一对多

方法一、



    

方法二、



    
    
    
        
        
        
    

七、动态sql,本质动态sql还是sql语句,只是增加一个逻辑代码,根据不同的条件生成不同的sql语句

1、if(where标签,可以自动去除第一个可以插入的and)

2、choose(when,otherwise)和java的 swich case类似


    

3、trim(where,set)set会拼接set 语句,并且删除掉无关的逗号

 

4、foreach

5、SQL片段   sql标签

把相同的sql提取出来,用的地方再includ引用


    
        
            title = #{title}
        
        
            author = #{author}
        
        
            and views = #{views}
        
    

 

七、缓存,一级缓存默认开启(sqlsession级别,一个用户一个缓存),二级缓存需要设置(一级缓存丢出来的东西给二级缓存,二级缓存不同的sqlSession都可以使用,前提是要在同一个namespace,也就是Mapper.xm中才有效)

注意事项:在mybatis的paramaType类型,是与java不同的,比如_int表示int。在接口中要把形参前面加上@param(这是规范)

1、一级缓存:测试步骤:1、开启日志   2、查询两次相同的数据   3、

缓存失效的前提:1、查询不同的东西,2、增删改操作,3、手动清理

一级缓存相当于一个map,用的时候取

2、二级缓存:开启步骤1、在config.xml中开启二级缓存


2、在当前Mapper.xml中增加,就开启了。

容易出现问题:报错,NotSerializableException,没有序列化接口。需要先将实体类 implements Serializable(也是规范要求)

结论:所有的数据都会先放到一级缓存中,只有session提交或者失效后,才会转到二级缓存中

用户新建查询任务,先查二级,再查一级,再查数据库

3、自定义缓存 Ehcache(现在用redis做缓存,了解即可,实际不会用)

1、导包  2、引用  3、配置缓存的xml文件,设置策略  4、实现cache接口

redis缓存就是K V键值对保存

你可能感兴趣的:(DAY15 分页、注解开发、lombok、动态sql、缓存)