zoukankan      html  css  js  c++  java
  • mybatis知识汇集

    一.核心组件

    1.SqlSessionFactoryBuilder:根据配置或者注解模式生成SqlSessionFactory.

    2.SqlSessionFactory:根据工厂来生成SqlSession。一般是一个全局单例,对一个数据库连接池,用它来创建SqlSession。

    3.SqlSession:一次会话,即发送sql,并返回结果,也可以获取Mapper接口。相当于一个JDBC的connection对象,在一次失误会话结束后,会被关闭,他可以为我们获得Mapper.

    4.Sql Mapper:由一个Java接口和XML文件组成,给出相对应的sql和映射规则,它负责发送sql,并把返回结果映射为实体对象。SqlSession销毁的时候它也会被销毁。

    二.配置详解

    1.枚举处理器:EnumOrdinalTypeHander或者EnumTypeHander,用来将sql返回的字段,根据枚举设置转换为相应的枚举名称。

    2.mybatis默认开启一级缓存,不开启二级缓存。开启二级缓存时候,要求返回的对象必须是可序列化的,而且是在sqlsession调用了commit方法后才能生效。缓存回收策略有:最少使用LRU,先进先出FIFO,软引用SOFT(移除基于垃圾回收期状态和软引用规则的对象),弱引用,更积极地移除基于垃圾回收期状态和弱引用规则的对象,这里采用的是LRU,移除最长时间不用对象。另外,还有3个设置属性分别是:flushInterval:刷新间隔时间,单位毫秒;size:引用数目,代表缓存最多存储多少个对象,不宜过大,否则会导致内存溢出,1024及其以下比较合适;readOnly,设置只读后不能修改,可以快速读取,但无法修改缓存。

    3.动态sql:就是在select 区域内使用if、choose、when、ohterwise元素。如果判断查询条件,则使用where【元素】,在里面加入if判断比较合适。如果参数是个数组或者list、set等集合,则可以使用foreach元素,形成in()语句。如果模糊查询,则可以使用bind元素,讲传入的参数包装成新参数,在sql语句中引用新参数即可,避免了不同数据库对like语句后的参数连接语法不同问题。

    三.各种版本mybatis差异

    1.tk.mybatis,查询采用Example.Criteria方式,参数用的是实体的字段作为查询条件,然后转为数据库表字段,如果想过滤某个字段,则在实体字段上添加标记:@Transient【import javax.persistence.*;】

    其查询实例:

     Example example = new Example(User.class);
     Example.Criteria criteria = example.createCriteria();
     criteria.andEqualTo("userId", sysUser.getId());#注意,这里用的是User表中的UserId字段,然后翻译成数据库字段。
     List<User> moldUserList = userMapper.selectByExample(example);

    2.mybatis-plus,采用直sql方式,参数直接采用的是数据库字段形式,如果想忽略某个字段则添加标记:@TableField(exist = false)

    其查询实例:

     QueryWrapper<User> example1 = Wrappers.query();
     example1.eq("user_id", userId);#这里用的是数据库表字段
     List<User> gramWeightRecords = UserMapper.selectList(example1);

    文章出处:www.cnblogs.com/jizhong

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。否则保留追究法律责任的权利。

  • 相关阅读:
    从解放劳动力来看未来的科技进程
    流程变换与抽象
    EntityFramework Any 生成的sql语句超长。
    值类型引用类型List Remove 方法Remove不掉哪一个项。
    CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14
    SVN的安装配置(linux)
    【题解】洛谷 P1979 [NOIP2013 提高组] 华容道 | 20211119 模拟赛 Y【BFS 最短路】
    【题解】[Codechef CALLSCHE] Call Center Schedule | 20211127 模拟赛 或负(fortune)【网络流】
    【题解】[Codeforces 1086F] Forest Fires | 20211119 模拟赛 o【插值 扫描线】
    NOIP2021 SC 迷惑行为小赏
  • 原文地址:https://www.cnblogs.com/jizhong/p/13991541.html
Copyright © 2011-2022 走看看