Mybatis架构
1、 mybatis配置
SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。
此文件需要在SqlMapConfig.xml中加载.
2、 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
3、 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
4、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,
一个是基本执行器、一个是缓存执行器。
5、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。
mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
6、 Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor
通过 Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc
编程中对preparedStatement设置参数。
7、 Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过
Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程
中对结果的解析处理过程。
mybatis核心包、依赖包、数据驱动包
ant-1.9.6.jar
ant-launcher-1.9.6.jar
asm-5.2.jar
cglib-3.2.5.jar
commons-logging-1.2.jar
javassist-3.21.0-GA.jar
junit-4.9.jar
log4j-1.2.17.jar
log4j-api-2.3.jar
log4j-core-2.3.jar
mybatis-3.4.4.jar
mysql-connector-java-5.1.7-bin.jar
ognl-3.1.14.jar
slf4j-api-1.7.25.jar
slf4j-log4j12-1.7.25.jar
<!-- id:sql语句唯一标识 parameterType:指定传入参数类型
resultType:返回结果集类型
#{}:启动占位作用,如果传入的是基本类型,那么名称随意 -->
${}拼接符:字符串原样拼接如果传入的是基本类型,那么${}中的变量名必须是value
注意:使用拼接符有可能造成sql注入,在页面输入的时候可以加入校验,不可输入sql关键字,不可输入空格
会话工厂
private SqlSessionFactory sqlSessionFactory = null;
@Before
public void create SqlSessionFactory() throws Exception {
// 配置文件
String resource = "SqlMapConfig.xml";
// 通过流将核心配置文件读取进来
InputStream inputStream = Resources.getResourceAsStream(resource);
// 通过核心配置文件输入流来创建会话工厂
sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
// 通过工厂创建会话
sqlSession = sqlSessionFactory.openSession();
// 第一个参数:调用的sql语句= namespace.Id
User user = sqlSession.selectOne("test.findUserById", 10);
}
Mapper动态代理方式
映射文件
<!--
mapper接口代理实现编写规则:
1. 映射文件中的namespace要等于接口的全路径名称
2. 映射文件中sql语句的id要等于接口的方法名称
3. 映射文件中传入参数类型要等于接口方法的传入参数类型
4. 映射文件中返回结果集类型等于接口方法的返回值类型
-->
<mapper namespace="com.bf.mapper.UserMapper">
通过getMapper方法实例化接口
session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
加载映射文件
<!--
使用class属性引入接口的全路径名称
使用规则:1. 接口名称和映射文件名称除扩展名外要完全相同
2. 接口和映射文件要放在同一个目录下
-->
<mapper class="com.bf.mapper.UserMapper"/>
// 动态代理形式中,如果返回结果集为List,那么mybatis会在生成的实现类中自动使用selectList方法
List<User> findUsersByName(String name);
SqlMapConfig.xml配置文件
configuration 配置
properties 属性
settings 设置
typeAliases 类型命名
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境
environment 环境变量
transactionManager 事务管理器
dataSource 数据源
databaseIdProvider 数据库厂商标识
mappers 映射器
<typeAliases>
<!-- 使用包扫描的方式批量定义别名(按java命名规则来) -->
<package name="com.bf.pojo"/>
</typeAliases>
<mappers>
<!-- 使用包扫描的方式批量引入mapper接口 -->
<package name="com.bf.mapper"/>
</mappers>