MyBatis
1. MyBatis
1.通过SqlSession实例直接运行映射的SQL语句
2.基于Mapper接口方式操作数据
3.mybatis-config.xml 核心配置文件
4.mapper.xml SQL映射文件
2. mybatis-config.xml核心配置文件中的标签和属性
注意:元素节点的顺序
configuration配置
properties 可以配置在java属性配置文件中
settings 修改MyBatis在运行时的行为方式
typeAliases为java类型命名一个别名(简称)
typeHandlers 类型处理器(类型转换器)
objectFactory 对象工厂
plugins 插件
environments 环境
environment 环境变量
transactionManager 事务管理器
dataSource 数据源
mappers 映射器
1.配置properties元素的两种方式
1.通过外部指定的方式(database.properties),实现动态配置
配置properties标签的resource属性指定(引入)
2.直接配置为XML,实现动态配置
直接配置prperty 如
注意:第一种方式优先于第二种
2.typeAliases只用于关联XML配置,简写冗长的java类名
1.为pojo配置别名
2.扫描某包下的所有类,其类名既别名
例3: <package name="cn.java.pojo"> 类扫描器
3.environments元素
表示配置Mybatis的多套运行环境,将SQL映射到多个不同的数据库上
子元素节点:environment.但是必须指定其中一个默认运行环境(通过default指定)
4.transactionManager-事务管理器
type属性有两种
1.JDBC
2.MANAGED(托管)
5.dataSource元素
使用基本的DBC数据源接口来配置JDBC连接对象的资源
有三种内建的数据源类型
例:<dataSource type="[UNPOOLED|POOLED|JNDI]">
POOLED是基本的连接池的概念
6.mapper元素
映射器,定义SQL映射语句
必须在主配置中引用mapper映射文件
导入的方式有两种
1.使用类资源路径获取资源
例4:<mapper resource="cn/java/dao/user/UserMapper.xml"/>
2.使用URL获取资源
例5:<mapper url="file:///E:/sqlmappers/UserMapper.xml"/>
3.使用类选择器 - 用类扫描器加载 此种方法必须文件名与接口名必须一致
例6:<package name="cn.java.dao">
3. SQL映射的XML文件(局部配置文件)
一.SQL映射的XML文件
Mybatis真正的强大在于映射语句,专注于SQL,功能强大
SQL映射的配置却相当简单
SQL映射文件的几个顶级元素(按照定义的顺序)
mapper-namespace -命名空间绑定Dao接口
cache -配置给定命名空间的缓存
cache-ref -从其他命名空间的缓存
resultMap -用来描述数据库结果集和对象的对应关系
sql -可以重用的SQL块,也可以被其他语句音乐
insert -映射插入语句
update -映射更新语句
delete -映射删除语句
select -映射查询语句
1.mapper
namespace:命名空间
namespace和子元素的id联合保证唯一,区别不同的mapper
绑定DAO接口
namespace的命名必须跟某个(相对应的)接口同名
接口中的方法与映射文件中的SQL语句id一一对应
2.select
select是Mybatis中最常用的元素之一
select语句有很多属性可以详细配置每一条语句
1.id属性:
命名空间中唯一的标识符
接口中的方法与映射文件中的SQL语句id一一对应
2.parameterType属性:
传入SQL语句的参数类型的完全限定名或别名(jdk基本类型可以不用全名)
3.resultType属性:
SQL语句返回值类型的完整类名或别名
3.参数传递#{参数名}
数据库字段名与JavaBean的属性名一致(或setting映射 sql下划线类型映射驼峰命名)
parameterType
基础数据类型
int.String.Date等
只能传入一个,通过#{参数名}即可获取传入的值
复杂数据类型
java实体类,Map等
通过#{属性名}或者#{Map的Key}即可获取传入值
七、使用Mybatis实现基本的增删改操作
insert标签| delate标签| update
id属性
parameterType属性
参数可以是pojo对象
也可以是Map
也可以用@Param注解
1.将映射方法的多个参数前加上@Param("注解名")
2.在映射的SQL语句中用#{注解名}入参
例8:modify(@Param("id")Integer id,@Param("userName")String uName);
SQL: update user_info set userName=#{userName} where id = #{id}
注:超过4个以上的参数最好封装成对象入参
参数固定的业务方法,最好直接使用多参数入参
resultType返回值都默认是int类型所有没有此属性
四、动态SQL标签
1、概念,
基于OGNL表达式
使用动态SQL完成多条件查询等逻辑实现
用于实现动态SQL的元素主要有
if
trim 灵活的祛除无用关键字
where
set
choose(when,otherwise)
foreach
2、if标签
简单的条件选择
3、where
简化where的条件判断
4、trim
属性
prefix 在前面加 比如where
suffix 在后面加 比如where id=#{id}
prefixOverrides 忽略前面 比如and
suffixOverrides 忽略后面 比如逗号
更灵活的祛除多余关键字
替代where
拼接SQL的前缀或者后缀
例:<trim prefix="where" proefixOverrides="and | or">
可以灵活的判断是否加入一个where语句 忽略拼接条件开头的and或者or关键字
5、使用动态SQL实现更新操作
set标签 + if标签
update set 列名=值,列名=值 where条件
set标签配合if标签可以判断值是否需要更改 而且可以忽略句尾的逗号
备注:实际开发当中,用户只要执行了更新操作,就要按照客户的要求进行更新,哪怕是传入空参也要尊重用户的意愿,所以实际工作当中几乎不会使用set + if进行操作
6、使用forEach完成复杂查询
迭代一个集合,通常适用于in条件
属性:
item - 每个元素迭代时的别名
index - 迭代过程中每次迭代到的位置 可以省略
collection:必须指定 - 指定相应入参属性的值 有以下情况
list
array
map-key
open - 表示以什么未开始 一般是” ( ”
separator - 每次迭代用什么符号进行间隔 一般是 “,”
close - 语句以什么结束 一般是” ) ”
七、MyBatis缓存
MyBatis缓存
一级缓存 会话作用域
二级缓存 全局作用域
二级缓存的配置
1.MyBatis的全局cache配置
<settings>
<settiing name="cacheEnabled value="true"/>
</settiongs>
2.在MaaperXML文件中设置缓存,默认情况下未开启 -- 只在一个mappers中有效
<cache eviction="FIFO" flushlnterval="60000" size="512" readOnly="true"/>
3.在MaaperXML文件配置支持cache后,若需要对个别查询进行调整,可以单独设置cache
<select id="selectAll" resultTye="User" useCache="true">