一、核心对象
1.1 SqlSessionFactory
SqlSessionFactory是单个数据库映射关系经过编译后的内存镜像,其主要作用是创建SqlSession.
通过XML配置文件构建出SqlSessionFactory实例:
// 1、读取配置文件
String resource = "mybatis-config.xml";
InputStream inputStream =
Resources.getResourceAsStream(resource);
// 2、根据配置文件构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
SqlSessionFactory对象是线程安全的,一旦被创建在整个应用执行期间都会存在。
通常每个数据库都会只对应一个SqlSessionFactory,所有在构建SqlSessionFactory实例时,建议使用单例模式。
1.2 SqlSession
SqlSession是应用程序与持久层之间执行交互操作的一个单线程对象,其主要作用是执行持久化操作。
每一个线程都有自己的SqlSession实例,并且该实例时不能被共享的。
同时SqlSession实例也是线程不安全的,因此其使用范围最好在一次请求或一个方法中,绝不能将其放入一个类的静态字段、实例字段或任何类型的管理范围中使用。使用完SqlSession对象后要及时关闭。
SqlSession中的方法
使用工具类来创建SqlSession
二、mybatis-config.xml配置文件
2.1 properties
一个配置属性的元素,该元素通常用来将内部的配置外在化。
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
<configuration>
<properties resource="db.properties" />
<!--1.配置环境 ,默认的环境id为mysql -->
<environments default="mysql">
<!--1.2.配置id为mysql的数据库环境 -->
<environment id="mysql">
<!-- 使用JDBC的事务管理 -->
<transactionManager type="JDBC" />
<!--数据库连接池 -->
<dataSource type="POOLED">
<!-- 数据库驱动 -->
<property name="driver" value="${jdbc.driver}" />
<!-- 连接数据库的url -->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC" />
<!-- 连接数据库的用户名 -->
<property name="username" value="${jdbc.username}" />
<!-- 连接数据库的密码 -->
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!--2.配置Mapper的位置 -->
<mappers>
<mapper resource="com/itheima/mapper/CustomerMapper.xml" />
</mappers>
</configuration>
2.2 typeAliases元素
用于为配置文件中Java类型设置一个简短的名字,别名的设置与mapper.XML配置相关,其目的是为了减少全限定类名的冗余。
常见Java类型对应的类型别名
2.3 typeHandler元素
typeHandler的作用是将预处理语句中传入的参数从javaType(java类型)转换为jdbcType(JDBC类型),或者从数据库取出结果时将jdbcType转换为javaType.
2.4 objectFactory 元素
2.5 plugins 元素
MyBatis容许在已映射语句执行过程中的某一点进行拦截调用,这种拦截调用是通过插件来实现的。元素的作用就是配置用户所开发的插件。
2.6 environments 元素
可以通过元素配置多种数据源,即配置多种数据库。
<environments default="mysql">
<!--1.2.配置id为mysql的数据库环境 -->
<environment id="mysql">
<!-- 使用JDBC的事务管理 -->
<transactionManager type="JDBC" />
<!--数据库连接池 -->
<dataSource type="POOLED">
<!-- 数据库驱动 -->
<property name="driver" value="${jdbc.driver}" />
<!-- 连接数据库的url -->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC" />
<!-- 连接数据库的用户名 -->
<property name="username" value="${jdbc.username}" />
<!-- 连接数据库的密码 -->
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
2.6.1 事物管理器的配置
2.6.2数据源的配置
2.7 mappers 元素
用于指定MyBatis映射文件的位置,一般有四种方法引入映射器文件。
三、映射文件
在映射文件中,《mapper》元素是映射文件的根元素,其他元素都是它的子元素。
3.1 select 元素的常用属性
select实例
<!--1.根据客户编号获取客户信息 -->
<select id="findCustomerById" parameterType="Integer"
resultType="com.it.po.Customer">
select * from t_customer where id = #{id}
</select>
<!--根据客户名模糊查询客户信息列表-->
<select id="findCustomerByName" parameterType="String"
resultType="com.it.po.Customer">
<!-- select * from t_customer where username like '%${value}%' -->
select * from t_customer where username like concat('%',#{value},'%')
</select>在这里插入代码片
3.2 insert实例
<!-- 添加客户信息 -->
<insert id="addCustomer" parameterType="com.it.po.Customer">
insert into t_customer(username,jobs,phone)
values(#{username},#{jobs},#{phone})
</insert>
insert元素和select元素的属性大部分相同,但有三个特有属性。
执行插入操作后,很多时候需要返回插入成功的数据生成的主键值,这时就用到了那三个特殊的属性来实现。
3.3 update和delete元素的使用实例
<!-- 更新客户信息 -->
<update id="updateCustomer" parameterType="com.it.po.Customer">
update t_customer set
username=#{username},jobs=#{jobs},phone=#{phone}
where id=#{id}
</update>
<!-- 删除客户信息 -->
<delete id="deleteCustomer" parameterType="Integer">
delete from t_customer where id=#{id}
</delete>
3.4 sql元素
定义可重用的SQL代码片段,然后在其他语句中引用这一片段。
3.5 resultMap元素
它的主要作用是定义映射规则、级联的更新以及定义类型转换器等。
在默认情况下,MyBatis程序在运行时会自动地将查询到的数据与需要返回的对象的属性进行匹配赋值(需要表中的列名与对象的属性名称完全一致),然而在实际开发中表中的列名和对象的属性可能不完全一致。