Mybatis笔记

MyBatis环境搭建

  1. 创建SqlMapConfig.xml的MyBatis配置文件

  2. 导入Mybatis的Jar包及其lib下所有包

  3. 导入log4j.properties文件

  4. 创建配置文件夹

  5. 导入数据库驱动Jar包

配置文件信息

SqlMapConfig.xml:

<?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="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf8&amp;useSSL=true"/>
<property name="username" value="root"/>
<property name="password" value="root123"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="sqlMap/User.xml"></mapper>
</mappers>
</configuration>

Mapper.xml

<?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="test">
<select id="findUserById" parameterType="int" resultType="com.noesblog.pojo.User">
SELECT * FROM `user` WHERE id=#{id}
</select>
</mapper>

Mapper.xml配置解析

parameterType:指定输入参数的类型

resultType:指定返回结果的类型

#{****}:SQL中的占位符,不引起SQL注入安全问题

'${***}':SQL中的拼接符,可能引起SQL注入安全问题,且当输入参数类型为简单类型时只能使用'${value}'来表示

SqlSession的selectOne及selectList针对的是查询单个结果或多个结果集。

增加

两种方式增加,第一种方式是在执行后获取自增主键,第二种方式是执行前获取UUID并将该UUID写入到SQL中后执行

删除

修改

查询

Tips:代码部分中除查询外增加修改删除均需要进行事务设置,即提交commit方法

Mapper代理方式开发

使用该方式开发需遵循以下规范:

  1. XXmapper.xml中namespace的值应与XXmapper.java的全路径一致

  2. XXmapper.java接口中方法名与参数类型应与XXmapper.xml中的语句xml键一致

  3. XXmapper.java接口中方法的返回值与XXmapper.xml中的语句xml键一致

原始dao方式开发

  1. 编写pojo

  2. 编写该pojo的的mybatis.xml配置文件

  3. 编写dao接口及该接口实现类

  4. 该实现类编写执行语句

typeAliases

在mybatis配置文件中配置别名,方便进行开发。

然后在xxmapper.xml中使用该别名即可。

批量定义别名

ResultType和ResultMap方式开发

ResultType方式开发

  1. 在源pojo类中增加一个属性类

  2. 定义类似如下代码在xxmapper.xml中

  1. 完成开发

Mybatis使用collection标签对关联查询的多条记录映射到list集合属性中

Pojo包装类型(输入输出映射)

与正常开发mapper类似,在mapper.xml定义中略有不同。

延迟加载

以上为延迟加载的环境配置。

查询缓存

Mybatis提供一级缓存及二级缓存,缓存均为查询缓存,用于减轻数据库压力。

一级缓存

一级缓存位于每一个单个的SqlSession对象,该对象有一个hashMap用于存储最近的查询语句以便缓存数据,当匹配到同一查询key时直接返回对象,无法匹配时则发出请求到数据库,当执行commit提交操作时清空该缓存。

二级缓存

二级缓存作用于一个mapper的namespace,简单的来说就是该mapper的任何对象的缓存。每一个namespace的mapper都有一个二级缓存区域。两个mapper的namespace如果相同,这两个mapper执行sql查询到的数据将存在相同的二级缓存区域中。

配置二级缓存

Mybatis的二级缓存是mapper范围级别的,除了在mybatis配置文件中配置二级缓存开启,还要在具体的mapper.xml中开启二级缓存。

动态sql

If判断

Sql片段

Foreach方式

然后在parameterType对象中定义ids,再set该ids即可。

其他配置

Usecache配置

在statement中设置useCache=”false”,可以禁用当前select语句的二级缓存,即每次查询均会访问数据库,默认下为true。

FlushCache配置

设置statement中的flushCache=”true”属性,默认情况下为true即为刷新缓存,如果修改为false则不会刷新缓存,使用缓存时如果手动修改数据库表中的查询数据时会出现脏读。

Cache标签参数解析

Type:制定cache接口的实现类的类型

整合ehcache

Mybatis整合spring

  1. 导入mybatis基本包

  2. 导入mybatis-spring.jar包

  3. 导入spring相关包,及mvc包

  4. 导入相关的配置文件

整合后原始dao开发方式

  1. 连接池配置

  2. Spring配置中sqlSessionFactory注入及配置

  3. 开启spring扫描等

  4. 注入dao并注入sqlSessionFactory属性

  5. 创建xxmapper.xml及xxmapper.java及dao接口及dao实现类(继承SqlSessionDaoSupport)。

  6. 编写dao接口实现类,并使用this.getSqlSession()方法获取sqlsession并执行相关操作。

  7. 配置xxmapper.xml到mybatis配置文件中

  8. 进行测试

整合后mapper接口开发方式

Mapper集合spring的ioc容器扫描使用

按照该方法配置最上一行sqlsessionfactory及最下一行mapper生成器即可。规范与mybatis一致。