MyBatis工作原理图
原理图
测试代码:
public class UserTest {
@Test
public void findById() throws Exception{
//获取核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//创建sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//System.out.println(sqlSession);
//执行sql语句,sql语句的位于标识:namespace.statementId
User user=sqlSession.selectOne("com.xy.pojo.User.findById",1);
System.out.println(user);
//释放资源
sqlSession.close();
}
获取核心配置文件建立MyBatis和数据库的连接,通过加载映射文件(在核心配置文件中)可以获取sql语句
<mappers>
<!--配置xxxMapper.xml文件的位置-->
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
可以有多个mapper.xml
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:名称空间,由于映射文件可能有多个,为了防止crud语句的唯一标识重复,需要设置空间名称。
-->
<mapper namespace="com.xy.pojo.User">
<!--
select:查询的statement(声明),用来编写查询语句
id:语句的唯一标识
resulType:配置返回的结果集类型
parameterType:传递的参数类型,可以省略
-->
<select id="findById"
parameterType="int"
resultType="com.xy.pojo.User">
select * from users where uid = #{id}
</select>
流程:
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
加载核心配置文件,加载映射文件
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//创建sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
构建会话工厂用来创建sqlsession即会话对象,sqlSession用来操作数据库API的核心类,但不是自己操作数据库,而是封装生成由执行器execute,execute才真正负责jdbc操作,连接的获取,statement的创建,sql语句的执行等
User user=sqlSession.selectOne("com.xy.pojo.User.findById",1);
调用sqlSession中的selectone方法,通过唯一标识(命名空间+id即标识)来寻找映射文件mapper.xml中的sql语句,并返回指定的对象
结合图片例子中输入映射参数数据结果映射可以是Map List,String,Integer等类型,例子中是POJO类型(普通实体类型)