MyBatis
初始MyBatisMyBatis简介MyBatis 本是 apache 的一个开源项目 iBatis, 2010 年改名为MyBatis,是一个基于 Java 的持久层框架,它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储和高级映射。ORMORM 即对象/关系映射,是一种数据持久化技术。配置MyBatis安装要使用 MyBatis, 只需导入 mybatis-x...
初始MyBatis
MyBatis简介
MyBatis 本是 apache 的一个开源项目 iBatis, 2010 年改名为MyBatis,是一个基于 Java 的持久层框架,它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储和高级映射。
ORM
ORM 即对象/关系映射,是一种数据持久化技术。
配置MyBatis
安装
要使用 MyBatis, 只需导入 mybatis-x.x.x.jar 架包即可。
如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version> <--MyBatis版本-->
</dependency>
创建MyBatis核心配置文件
示例:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
.xml文件的几个常用的作用如下:
属性名称 | 作用 |
---|---|
configuration | 配置文件的根元素节点。 |
properties | 文件描述数据库连接的相关配置 |
settings | 设置MyBatis运行中的一些行为 |
typeAliases | 配置类型别名 |
environments | 表示配置MyBatis的多套运行环境 |
environment | 配置MyBatis的一套运行环境 |
mappers | 寻找SQL映射文件 |
mapper | 具体指定SQL映射文件的路径 |
创建持久化类(POJO)
持久化类是指其实例状态需要被MyBatis持久化到数据库中的类(实体类)。
创建SQL映射文件(Mapper.xml)
SQL映射文件一般都对应相应的POJO,该mapper文件属于DAO层的操作
示例:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
其中各元素的含义如下:
- mapper:映射文件的根元素节点
- namespace:只有一个属性namespace,用于区别不同的mapper
- select:表示查询语句 ,MyBatis最常用的元素之一
- id:唯一标识符
- resultType:执行sql后的返回值类型
创建测试类
具体的实现步骤:
- 读取全局配置文件
- 创建SqlSessionFactory对象
- 创建SqlSession对象
- 关闭SqlSession
MyBatis实现条件增删改查
使用SQL映射文件配置可减50%以上的代码量。Mybatis专注于SQL,可极大限度的进行SQL调优,以保证性能。
SQL映射文件
属性名称 | 作用 |
---|---|
mapper | 映射文件的根元素节点,只有一个属性namespace(命名空间) |
cahe | 配置给定命名空间的缓存 |
cahe-ref | 从其他的命名空间引用缓存配置 |
resultMap | 用来描述数据库结构集引用的配置 |
sql | 可以描述数据库结果集和对象的对应关系 |
insert | 映射新增语句 |
update | 映射修改语句 |
delete | 映射删除语句 |
select | 映射查询语句 |
select映射语句
属性含义:
属性名称 | 含义 |
---|---|
id | 唯一标识符,可以被用来引用这条语句 |
parameterType | 传入参数的类型的完全限定名或别名 |
resultType | 查询语句返回的结果类型的完全限定名或别名 |
resultMap高级结果映射
- resultMap
resultMap则是对外部resultMap定义的引用,对应resultMap的id,表示返回结果映射到哪个resultMap上。
resultMap元素的属性值和子节点:
- id:唯一标识符
- type:表示该resultMap的元素结果类型
- result:标识一些简单属性
- column:表示从数据库查询的字段名
- property:表示查询出来的字段对应的值赋给实体对象(POJO) 的哪个属性
- association
映射到实体类内部嵌套的复杂数据类型属性中 - collection
与association相似,只不过这个属性是一个集合列表
insert、update、delete映射语句
元素的属性:
- id:唯一标识符,与select元素的id一样
- parameterType:传入参数的类型的完全限定名或别名
insert、update、delete元素中均没有resultType属性,默认返回值类型是整数
使用@Param注解实现多参数入参
接口定义语法:
返回值类型 方法名(@Param(“入参名称”)变量数据类型 变量名称);
使用@Param注解后就不需要parameteType属性
MyBatis缓存
一级缓存
一级缓存是基于PerpetualCache(MyBatis自带)的HashMap本地缓存,作用范围为session域内,当session flush或者close之后,该session中所有的cach就会被清空
二级缓存
它超出session范围之外,可以被所有SqlSession共享
动态SQL
动态SQL基于OGNL的表达式,可使我们方便地在SQL语句中实现某些逻辑。
动态SQL的元素如下:
- if:条件判断
- test:条件
- choose:相当于java中的switch判断语句
- when:相当于java中的case
- otherwise:相当于java中的default
- where:简化SQL语句中的where的条件判断
- set:解决动态更新语句
- trim:可以灵活去除多余的关键字
- prefix:自动识别加前缀
- suffix:自动识别加后缀
- prefixOverrides:自动识别去前缀
- suffixOverrides:自动识别去后缀
- foreach:迭代一个集合
- itme: 迭代名称
- index:指定一个名称每次迭代到的位置
- open:以什么开始
- separator:以什么作为分隔符
- close:以什么结束
- collection:迭代类型
分页
- maven引用jar:
<!-- pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
<!-- jsqlparser -->
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>3.0</version>
</dependency>
- 配置拦截:
<!--
plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
properties?, settings?,
typeAliases?, typeHandlers?,
objectFactory?,objectWrapperFactory?,
plugins?,
environments?, databaseIdProvider?, mappers?
-->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="reasonable" value="true"/>
</plugin>
</plugins>
写入MyBatis核心配置文件中
- 定义sql映射不能以 “;” 结尾
- 测试
//引用pagehelper设置分页信息,这行代码必须在执行mapper层的sql前一行
PageHelper.startPage(1, 3, true);
更多推荐
所有评论(0)