Mybatis读书笔记(二)

MyBatis配置
property子元素
property是一个配置属性的元素,让我们能在配置文件的上下文使用它。
在这里插入图片描述
我们可以在properties文件里面配置密文,解密后在重新构建SqlSessionFactory。

设置
cacheEnabled:影响所有映射器中配置的缓存全局开关。
lazyLoadingEnable:延迟加载的全局开关,当它开启时,所有关联对象都会延迟加载。
aggressiveLazyLoading:当启用时,对任意延迟属性的调用会使带有延迟加载的属性对象完整加载。反之,每种属性会按需加载。
multipleResultSetsEnable:是否允许一语句返回多结果集。
useGeneratedKeys:允许JDBC支持自动生成主键。

别名
是一个指代的名称,因为可能类的全限定名过长,这时可以使用别名在MyBatis上下文中使用。
在这里插入图片描述

typeHandler
MyBatis在预处理语句(PreparedStatement)中设置一个参数时,或者从结果集(ResultSet)中取出一个值时,都会用注册了的typeHandler进行处理。

typeHandler常用配置为 Java类型(javaType),JDBC类型(jdbcType)。typeHandler的作用就是将参数从javaType转化为jdbcType,或者从数据库取出结果时把jdbcType转化为javaType。
就是将java数据库类型转化为数据库的类型。
也可以自定义typeHandler取处理,但是需要给予对应的标识,比如配置jdbcType和javaType,或者直接使用typeHandler属性指定。

MyBatis内部提供了两个转化枚举类型的typeHandler给我们使用:
Enum.TypeHandler
EnumOrdinalTypeHandler
第一个是使用枚举字符串的名称作为参数传递的,第二个是使用整数下表作为参数传递的。

ObjectFactory
当MyBatis在构建一个结果返回的时候,都会使用ObjectFactory对象工厂去构建POJO。

环境配置
配置环境可以注册多个数据源,每一个数据源可以分为两大部分:一个是数据库源 的配置,另一个是数据库事务的配置。
下面是一个连接池的配置:
在这里插入图片描述
enironment的属性default,表明在默认缺省的情况下,我们将启用哪个数据源配置。
transactionManage配置的是数据库事务,其中type属性有3中配置方式。
1)JDBC,采用JDBC方式管理事务,在独立编码中常常使用。
2)MANAGED,采用容器方式管理事务,在JNDI数据源中常用。
3)自定义
peoperty元素可以配置数据源的各类属性,这里配置了autoCommit = false,则是要求数据源不自动提交。
dataSource标签,是配置数据源连接的信息,type属性提供我们对数据库连接方式的配置,支持一下几种:
1)UNPOOLED,非数据库连接池。
2)POOLED,数据库连接池。
3)JNDI,JNDI数据源。
4)自定义
很多时候我们都会使用自定义数据库连接池。

数据库事务
数据库事务MyBatis是由SqlSession去控制的,我们可以通过SqlSession提交或者回滚事务。
在这里插入图片描述
上面就是一个例子,插入失败就会滚。

databaseIdProvider数据库厂商标识
在这里插入图片描述
这个标识同样可以自定义。

映射器
主要元素
select 查询,可以自定义参数,返回结果等。
insert 插入语句,执行后返回一个整数,代表插入的条数。
update 更新语句,执行后返回一个整数,代表更新的条数。
delete 删除,返回整数,删除的条数。
sql允许定义一部分SQL,然后在各个地方引用它。
resultMap 用来描述数据库结果集中来加载对象,提供映射规则。
cache 给定命名空间的缓存配置。
cache-ref 其他命名空间缓存配置的引用。

自动映射
大部分数据库规范都是要求每个单词用下划线分隔,而Java则是用驼峰命名法来命名。于是使用列的别名就可以使MyBatis自动映射,或者在配置文件中开启驼峰命名方式。

自动映射:autoMappingBehavior属性,NONE:取消自动映射,PARTIAL:只会自动映射,FULL,会自动映射任意复杂结果集,默认值为PARTIAL。

驼峰式:mapUnderscoreToCamelCase 为true。

传递多个参数:
可以把多个参数封装到map或者JavaBean中。
也可以使用注解方式传递参数:
public List<@Param(“roleName”) String rolename,@Param(“note”)String note>

有时候自动映射并不能满足我们的需求,可以使用自定义resultMap来做转换。
在这里插入图片描述
insert的主键回填和自定义
有时,我们的主键需要根据一些特殊的规则去生成,在插入后往往需要获得这个主键。可以使用keyProperty属性指定哪个是主键,同时使用useGenerateKeys属性告诉MyBatis主键是否使用数据库内置策略生成。
生成的主键的值会被MyBatis回填到JavaBean中。
使用自增主键时也可以定义他的自增策略:
在这里插入图片描述
当我们仅仅传入的是参数时,要是用#,但是如果需要传入sql语句,可以使用$,但是你需要自己去保证安全性。

MyBatis存在着三种级联关系,对应连表查询。
association:一对一,collection:一对多,discriminator:鉴别器,可以根据实际情况选择采用哪个类作为实例。

缓存
缓存的特点就是将数据保存在内存中。使用缓存的关键点在于存储内容的访问命中率。

系统缓存
MyBatis对缓存提供支持,但是在没有配置默认的情况下,它只开启一级缓存(一级缓存只是相对于同一个SqlSession而言的)。

所以在参数和SQL完全一样的情况下,我们使用统一额SqlSession对象调用同一个Mapper方法,往往只执行一次SQL,因为会被缓存。但是如果使用的是不同的SqlSession对象,因为SqlSession是相互隔离的,所以还会去查询数据库。

有时为了客服这个SqlSession相互隔离的问题,往往需要配置二级缓存,使得缓存在SqlsessionFactory层面上提供给各个SqlSession对象共享。二级缓存开启需要配置。这里要求对应的POJO必须是可序列化的,实现Serializable。
在这里插入图片描述
在这里插入图片描述
二级缓存相关属性:
eviction:代表缓存回收策略,MyBatis提供一下策略:
1)LRU:最少最近使用。2)FIFO:先进先出 3)SOFT:软引用 4)Weak:若引用
flushInteval:刷新间隔时间,如果不配置,那么只有当SQL被执行时才会去刷新缓存。
size:引用数目,代表缓存最多可以存储多少个对象。

自定义缓存
系统缓存是MyBatis应用机器上的本地缓存,但是在大型服务器山给,回使用不同的缓存服务器,比如Redis。
在这里插入图片描述在这里插入图片描述
useflush表示是否需要缓存,flushCache表示插入后是否需要刷新缓存。

动态SQL
用于动态的拼装SQL语句。常用的有if,choose,trim,foreach等等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值