MyBatis基础
MyBatis基础
工作原理
- 读取MyBatis配置文件:mybatis-config.xml为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息,例如数据库连接信息。
- 加载映射文件:映射文件即SQL映射文件,该文件中配置了操作系统数据库的SQL语句,需要在MyBatis配置文件mybatis-config.xml中加载。mybatis-config.xml文件可以加载做个映射文件,每个文件对应数据库的一张表。
- 构建会话工厂:通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory。
- 创建会话对象:由会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。
- Executor执行器:MyBatis底层定义了一个Executor接口来操作数据库,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。
- MappedStatement对象:在Executor接口的执行方法中有一个MapperdStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。
- 输入参数映射:输入参数类型可以是Map、List等集合类型,也可以是基本数据类型的POJO类型。输入参数映射过程类似于JDBC对preparedStatment对象设置参数的过程。
- 输出结果映射:输出结果类型可以是Map、List等集合类型,也可以是基本类型和POJO类型。输出结果映射过程类似于JDBC对结果集的解析过程。
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">
<!-- 使用JDBC的事务管理 -->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<!-- MySQL数据库驱动 -->
<property name="driver" value="com.mysql.jdbc.Driver" />
<!-- 连接数据库的URL -->
<property name="url"
value="jdbc:mysql://localhost:3306/learn?characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 映射文件的位置 -->
<mapper resource="mapper/ListMapper.xml" />
</mappers>
</configuration>
映射配置文件代码演示如下:
<?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="mapper.UserMapper">
<insert id="insertUser" parameterType="po.MyUser">
insert into user (uid,uname,usex) values(#{uid},#{uname},#{usex})
</insert>
<delete id="deleteUserById" parameterType="int">
delete from user where uid = #{uid}
</delete>
<update id="updateUserById" parameterType="po.MyUser">
update user set uname = #{uname},usex = #{usex} where uid = #{uid}
</update>
<select id="selectAllUser" resultType="po.MyUser">
select * from user
</select>
</mapper>
MyBatis与Spring的整合
在Spring中配置MyBatis工厂
通过Spring的整合,SessionFactory将交由Spring来创建,在构建时需要将Spring配置文件中添加如下代码:
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3307/learn?characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="root" />
<!-- 最大连接数 -->
<property name="maxTotal" value="30"/>
<!-- 最大空闲连接数 -->
<property name="maxIdle" value="10"/>
<!-- 初始化连接数 -->
<property name="initialSize" value="5"/>
</bean>
<!-- 添加事务支持 -->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 开启事务注解-->
<tx:annotation-driven transaction-manager="txManager" />
<!-- 配置MyBatis工厂,同时指定数据源,并与MyBatis完美整合 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- configLocation的属性值为MyBatis的核心配置文件 -->
<property name="configLocation" value="classpath:mybatis/mybatis_config.xml"/>
</bean>
<!--Mapper代理开发,使用Spring自动扫描MyBatis的接口并装配
(Spring将指定包中所有被@Mapper注解标注的接口自动装配为MyBatis的映射接口) -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- mybatis-spring组件的扫描器 -->
<property name="basePackage" value="dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
参考教材《JavaEE框架整合开发入门到实战》侵删。
本人现役大三小白一枚,如有不足之处还望指正。

浙公网安备 33010602011771号