Mybatis构成组件
2019-01-10 本文已影响0人
lv_shun
基本构成
- SqlSessionFactoryBuider(构造器):根据配置信息或者代码生成SqlSeesionFactory
- SqlSeesionFactory(工厂接口):根据工厂来生成SqlSession
- SqlSession(会话):是一个既可以发送sql语句,然后得到Mapper的接口
- SqlMapper:由java接口和xml文件(或注解)构成的,需要给出对应的sql和映射规则.它负责发送sql去执行,并返回结果.
构建SqlSessionFactory
mybatis的应用都是以SqlSesionFactory实例为中心.SqlSessionFactory是一个工厂接口,通过SqlSessionFactoryBuider创建.任务是创建SqlSession.SqlSession相当于JDBC的Connection对象.Mybatis提供两种SqlSessionFactory实现类:DefaultSqlSessionFactory和SqlSessionManager,不过SqlSessionManager目前没有使用.
SqlSessionFactory关系图.png
其中的Configuration全限定名为org.apache.ibatis.session.Configuration.以单例形式存在于内存中,作用保存mybatis的配置信息,存在于mybatis整个生命周期中,可重复读取.
构建SqlSessionFactory有两种方式:xml方式和代码方式.
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>
<!--定义别名-->
<typeAliases>
<typeAlias type="test" alias="test"/>
</typeAliases>
<!--多环境配置 默认development环境-->
<environments default="development">
<environment id="development">
<!--事务管理类型-->
<transactionManager type="JDBC"/>
<!--数据源配置-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--映射器-->
<mappers>
<mapper resource="test"/>
</mappers>
</configuration>
使用配置:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsSteam(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
代码方式构建
public SqlSessionFactory sqlSessionFactory() throws Exception {
//数据源对象
PooledDataSource dataSource = new PooledDataSource();
dataSource.setDriver("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//构建数据库食物方式
JdbcTransactionFactory transactionFactory = new JdbcTransactionFactory();
//创建数据库运行环境
Environment environment = new Environment("development",transactionFactory,dataSource);
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(environment);
//注册mybatis上下文别名 就是以后在上下文中使用test代替User类
configuration.getTypeAliasRegistry().registerAlias("test", User.class);
//设置映射器
configuration.addMapper(UserMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
return sqlSessionFactory;
}
创建SqlSession
SqlSession是一个接口,对应两种实现类:DefaultSqlSession和SqlSessionManager.SqlSession用途有两种:
1.获取映射器(Mapper),让映射器通过命名空间和方法找到对应的SQL,发送给数据库执行后返回结果.
2.直接通过命名信息去执行SQL返回结果.这是ibatis留下的方式,在SqlSession层我们可以通过update insert select delete等方法,带上SQL的id来操作xml中配置好的SQL.同时它也支持事务,通过commit rollback方法提交或回滚事务.
映射器
映射器比较复杂,也是mybatis的核心以后单独说明.