四:映射器详解

映射器是MyBatis最强大的工具,也是我们使用MyBatis时用的最多的工具.MyBatis 是针对映射器构造的Sql构建的轻量级框架.并且通过配置生成对应的JavaBean返回给调用者.而这些配置主要便是映射器,在MyBatis中你可以根据情况定义动态SQL来满足不同场景的需要,因此比其他框架灵活的多.MyBatis 还支持自动绑定JavaBean,我们只要让SQL返回的字段名和JavaBean的属性名保持一致,便可以省掉这些繁琐的映射配置

映射器的主要元素.

 

一:select 元素.

     select 元素帮助我们从数据库中读取数据,组装数据给业务人员.执行 select 语句前,我们需要定义参数,它可以是一个简单的参数类型,例如 int ,float,String,也可以是一个复杂的参数类型.例如JavaBean,Map等,这些都是MyBatis接受的参数类型。执行SQL后,MyBatis也提供了强大的映射规则,甚至是自动映射来帮助我们把返回的结果集绑定到JavaBean中.

 

 常用的是ParameterType,resultMap,fetchSize 等参数.

二:insert 元素。比select 元素简单很多.

    如果有用到,可以查询查阅具体的信息

insert 操作还有一个 主键回填特性. 即 插入一条数据后,返回对应的主键id.

首先我们可以使用keyProperty 属性知道那个是主键字段。同时使用useGenerateKeys属性告诉MyBatis这个主键是否使用数据库内置策略生成.

 三:update元素和delete元素.                                                                                                                    和insert 元素一样,MyBatis执行完update元素和delete元素后会返回一个整数.标出执行后影响的记录条数.

四:参数                                                                                                                                                    typeHandler。处理参数。                                                                                                                  我们可以指定特定的类型,来确定哪个typeHandler来处理他们                                                    

也可以指定哪个typeHandler去处理

 此外还可以对一些参数 设置精度

另外对#和$符号的支持. #会进行预编译处理,这样sql 结构固定。防止sql注入,$是直接进行替换,有时候比较灵活,容易造成sql 注入错误. 

五:sql 元素    可以进行sql 语句的复用.比如有多个 sql 语句有重复的sql 语句,可以抽出公共部分进行引用.

六:resultMap 结果映射集

   resultMap是MyBatis里面最复杂的元素.它的作用是定义映射规则,级联的更新,定制类型转换器等.

 1.constructor .如果 pojo 没有无参构造方法。就可以通过constructor 来构造pojo对象.里面有colum属性                                                                                                                                                 

2.使用map存储结果集,这样可读性比较差

3.使用pojo存储结果集 这个可读性较好

4.支持级联

   比如角色和用户关联查询.我们希望是在角色的信息中多一个属性,即List<UserBean>userlist。这样取出Role的同时也可以访问到它下面的用户了。我们把这样的情况叫做级联.

    MyBatis中级联分为三种.

       association:代表一对一关系,比如中国公民和身份证是一对一关系

       collection:代表一对多关系.比如班级和学生是一对多的关系

       discriminator:鉴别器.可以根据实际选择采用哪个类作为实例,允许你根据特定的条件去关联不同的结果集.

      在此说明,级联 可以用关联查询替代. 级联会有性能问题,有时还有n+1问题,即把不需要的数据也加载了。可以采用延迟加载进行优化.

七:缓存

   缓存是互联网系统常常用到的,其特点是将数据保存在内存中. 目前流行的缓存服务有MongoDb,Redis,Ehcache等.缓存是计算机内存保存数据,在读取的时候不用再从磁盘读取,大大提升性能。如果缓存命中率很高,就很划算.

MyBatis对缓存的支持,默认只开启一级缓存(一级缓存只是针对同一个SqlSession);所以在同一个SqlSession中,如果sql 和参数相同,多次重复的查询只查询数据库一次.后面的是查询缓存.

因为一级缓存的特殊要求 必须是同一个事务中。所以命中率较低 . 于是我们可以手动开启二级缓存:即 不同的事物,只要select 相同,参数相同。即可命中缓存.

二级缓存的说明:

1.要求返回的pojo 对象必须是序列化的。否则抛异常

2.映射语句中所以的select语句都会被缓存

3.映射语句中的所有insert,update,delete 语句都会刷新缓存

4.默认使用LRU(last recently use)最近最少使用 算法来回收

5.缓存列表 存储的是集合或对象

6.缓存里面的内容是可以被修改的

缓存回收的策略:

1.LRU

2.先进先出

3.软引用和弱引用

MyBatis 还支持自定义缓存.即 可以采用将缓存存入redis中

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值