MyBatis的核心组件
SqlSessionFactory工厂接口
使用MyBatis首先是实用配置或者代码去生产SqlSessionFacatory,而MyBatis提供了构造器SqlSessionFactoryBuilder.在MyBatis中,既可以通过读取配置的XML文件的形式生成SqlSessionFactory,也可以通过Java代码去生成(不推荐,需要修改的时候麻烦).MyBatis读取配置文件,通过Configuration类对象构建整个MyBatis的上下文.SqlSessionFactory的两个实现类SqlSessionManager和DefaultSqlSessionFactory(一般都用这个),在多线程中,SqlSessionManager的实现要依靠DefaultSqlSessionFactory.
<?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>
<!--别名-->
<typeAliases>
<typeAlias type="com.zr.pojo.Role" alias="role"></typeAlias>
</typeAliases>
<!-- 对事务的管理和连接池的配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
<property name="username" value="ibatis" />
<property name="password" value="ibatis" />
</dataSource>
</environment>
</environments>
<!-- mapping 文件路径配置 -->
<mappers>
<mapper resource="com/zr/mapper/UserMapper.xml" />
</mappers>
</configuration>
SqlSession
类似于一个JDBC中的Connection对象,代表着一个连接资源的
映射器
由一个接口和对应的XML文件(注解)组成,主要作用就是将SQL查询到的结果映射为一个POJO,或者将POJO的数据插入到数据库中,并定义一些关于缓存等的重要内容.
用XML实现映射器
用XML实现映射器分为两部分:接口和XML.首先定义一个映射器的接口
public interface RoleMapper {
public Role getRole(int id);
}
在用XML方式创建SqlSession中有这样一段代码:
<mapper resource="com/zr/mapper/UserMapper.xml" />
它的作用就是引用一个XML文件.用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="com.zr.mapper.RoleMapper">
<select id="getRole" parameterType="int" resultType="role">
select id ,roleName ,note from mybatis_role where id = #{id}
</select>
</mapper>
这样就完成了映射器的定义
<mapper>
元素中的属性namespace
所对应的就是一个接口的全限定名,于是MyBatis上下文就可以通过它找到对应的接口.
<select>元素表明这是一条查询语句,而属性id标识了这条SQL,属性parameterType="int"
说明传递给SQL的是一个int类型的参数.而role是之前配置文件mybatis-config.xml
配置的别名,指代的是com.zr.pojo.Role
.
#{id}
表示的是要传递的参数.
MyBatis在默认情况下提供自动映射,只要SQL返回的列名和POJO对应起来即可
用Mapper接口发送SQL
RoleMapper roleMapper = (RoleMapper) sqlSession.getMapper(RoleMapper.class);
Role role = roleMapper.findRoles("1").get(0);
实例
完整的代码已经上传到github上了
github地址