初始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后的返回值类型

创建测试类

具体的实现步骤:

  1. 读取全局配置文件
  2. 创建SqlSessionFactory对象
  3. 创建SqlSession对象
  4. 关闭SqlSession

MyBatis实现条件增删改查

使用SQL映射文件配置可减50%以上的代码量。Mybatis专注于SQL,可极大限度的进行SQL调优,以保证性能。

SQL映射文件

属性名称作用
mapper映射文件的根元素节点,只有一个属性namespace(命名空间)
cahe配置给定命名空间的缓存
cahe-ref从其他的命名空间引用缓存配置
resultMap用来描述数据库结构集引用的配置
sql可以描述数据库结果集和对象的对应关系
insert映射新增语句
update映射修改语句
delete映射删除语句
select映射查询语句

select映射语句

属性含义:

属性名称含义
id唯一标识符,可以被用来引用这条语句
parameterType传入参数的类型的完全限定名或别名
resultType查询语句返回的结果类型的完全限定名或别名

resultMap高级结果映射

  1. resultMap
    resultMap则是对外部resultMap定义的引用,对应resultMap的id,表示返回结果映射到哪个resultMap上。

resultMap元素的属性值和子节点:

  • id:唯一标识符
  • type:表示该resultMap的元素结果类型
  • result:标识一些简单属性
    • column:表示从数据库查询的字段名
    • property:表示查询出来的字段对应的值赋给实体对象(POJO) 的哪个属性
  1. association
    映射到实体类内部嵌套的复杂数据类型属性中
  2. 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);
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐