本书的3~8章都是MyBatis的讲解内容,今天学习
第3章:认识MyBatis核心组件
使用MyBatis首先就是去配置或者代码去生成SqlSessionFactory。
创建SqlSessionFactory,需要用到SqlSessionFactoryBuilder和一个类org.apache.itatis.session.Configuraton,采用Builder模式,具体分步在Configuration中完成。关系如下:
每一个MayBatis应用都是以一个SqlSessionFactory为中心的,它的唯一作用就是:生产MaBatis的 核心接口对象SqlSession。所以他是唯一的,我们一般采用单例模式处理它。
构建SqlSessionFactory有两种方式,一种是使用XML文件构建,一种是代码构建,推荐前者。
使用XML构建SqlSessionFactory:
首先,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>
<!--环境配置,连接的数据库,这里使用的是MySQL-->
<environments default="mysql">
<environment id="mysql">
<!--指定事务管理的类型,这里简单使用Java的JDBC的提交和回滚设置-->
<transactionManager type="JDBC"></transactionManager>
<!--dataSource 指连接源配置,POOLED是JDBC连接对象的数据源连接池的实现-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test"> </property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</dataSource>
</environment>
</environments>
<mappers>
<!--这是告诉Mybatis区哪找持久化类的映射文件,对于在src下的文件直接写文件名,
如果在某包下,则要写明路径,如:com/mybatistest/config/UserMapper.xml-->
<mapper resource="UserMapper.xml"></mapper>
</mappers>
</configuration>
有了基础配置文件,我们就可以通过读取XML来构建SqlSessionFactory了:
SqlSessionFactory sqlSessionFactory = null;
String resource = "mybatis-config.xml";
InptStream inputStream;
try{
inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch(IOException e){
e.printStackTrace();
}
使用代码创建SqlSessiionFactory
不推荐这种方式,略
是MyBatis的核心接口,类似于JDBC中的Connection对象,代表着一个链接资源的启用。具体作用有三个:
创建一个SqlSession:
SqlSession sqlSession = SqlSessionFactory.openSession();
注意:SqlSession是个门面接口,但实际上底层工作的是Executor
SqlSession事务:
sqlSession.commit();//提交事务
sqlSession.rollback();//回滚事务
sqlSession.close();
映射器是MyBatis中最重要、最复杂的组件,由一个接口和对应的XML文件(或注解组成),他可以配置:
用XML实现映射器与注解实现映射器
xml与pojo是自动映射的(如:role_name <==> roleName),只要列名一一对应即可。
与注解映射比较:
SqlSession发送SQL与用Mapper接口发送SQL
SqlSession直接发送:
User user = (User)sqlSession.selectOne("com.example.mybatis.mapper.UserMapper.getUserById","123");
用Mapper接口发送SQL:
UserMapper usrMapper = sqlSession.getMapper(RoleMapper.class);
User user = roleMapper.getUserById("123");
对比:
《JavaEE 互联网轻量级框架整合开发》-第 3 章 读书笔记
原文:https://www.cnblogs.com/nm666/p/11173489.html