mybatis---学习

一,介绍

mybatis就是一个封装jdbc的持久层框架。

二,原理

全局配置文件(配置数据源、事务等运行时信息)
,映射文件(执行statement的相关信息,包括sql语句、输入参数、输出结果)
SqlSessionFactory(会话工厂)
作用:生产会话
SqlSession(会话)
作用:它是一个面向程序员的接口,程序员通过该接口可以对数据库进行增删改查方法,
该接口有一个默认的实现:DefaultSqlSession。
executor(执行器)
作用:SqlSession本身不能直接操作数据库,需要通过executor接口来真正的操作数据库,
MappedStatement
作用:它封装了执行statement时的信息,包括sql语句、输入参数、输出结果。
数据库

三,实例

<select id="findUserById" parameterType="java.lang.Integer" resultType="com.test.User">
	select * from user where id=#{id}
</select>
select 表示一个MappedStatement对象
id是statement的唯一标识
#{}表示一个占位符?,如果参数是简单类型,#{}里面的参数名可以任意。
parameterType输入参数的Java类型
resultType输出结果所映射的Java类型(单条结果所对应的Java类型)

select * from user where username like '%${value}%'
${}表示一个连接符,${value}里面的value表示输入参数的参数名称,如果该类型是简单类型,
里面的参数名称必须是value
${}存在sql注入风险,

四,selectKey

<selectKey keyProperty="id" resultType="int" order="AFTER" >
	select LAST_INSERT_ID()
</selectKey>
selectKey查询主键,标签内输入查询主键的sql,
order指定查询主键的sql和insert的顺序
LAST_INSERT_ID是mysql函数

五,SqlSessionFactory,它的生命周期,应该是应用范围,全局范围只有一个工厂,使用单例模式来实现这个功能。与spring集成之后,由spring来对其进行单例管理。

六,resultType

使用resultType进行结果映射时,需要查询出的列名和映射的对象的属性名一致,才能映射成功。

如果查询的列名和对象的属性名全部不一致,那么映射的对象为空。
如果查询的列名和对象的属性名有一个一致,那么映射的对象不为空,但是只有映射正确那一个属性才有值。

如果查询的sql的列名有别名,那么这个别名就是和属性映射的列名。

七,动态sql

select * from user
<where>
	<if test="user != null">
			<if test="user.username !=null and user.username!=''">
				and username like '%${user.username}%'
			</if>
	</if>
</where>
where标签默认去掉后面第一个AND,如果没有参数则把自己干掉

八,缓存
一级缓存指的就是sqlsession,在sqlsession中有一个数据区域,是map结构,这个区域就是一级缓存区域。一级缓存中的key是由sql语句、条件、statement等信息组成一个唯一值。一级缓存中的value,就是查询出的结果对象。
二级缓存指的就是同一个namespace下的mapper,二级缓存中,也有一个map结构,这个区域就是一级缓存区域。

九,场景
1.直接执行前端传来的任何sql语句,parameterType=“string”,
2.对于任意sql语句,其返回值类型无法用resultMap在xml文件里配置或者返回具体的bean类型时,
因此设置resultType=“java.util.Map”,但是Map并不保证存入取出顺序一致,
为保证查询的字段值有序(存入与取出顺序一致)所以采用LinkedHashMap。
3.当返回值为LinkedHashMap时,表中存储的null值并不会存入Map中,因此还要在mybatis配置文件中增加如下配置:

<settings>
<setting name="callSettersOnNulls" value="true"/>
</settings>

十,@TransactionalEventListener

猜你喜欢

转载自blog.csdn.net/yzx15855401351/article/details/96811798