1.资料
2.MyBatis的基本构成
1>.SqlSessionFactoryBuilder
①.用于根据配置信息或者代码生成工厂接口(SqlSessionFactory);
2>.SqlSessionFactory
①.依靠工厂生成会话(SqlSession);
②.这是一个接口,而不是实现类;
③.两种方式创建:
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="com.anlw.model.Role" alias="role" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="autoCommit" value="true"/>
</transactionManager>
<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="roleMapper.xml" />
</mappers>
</configuration>
- (1).其中别名typeAliases只针对实体类设置别名,比如在mapper.xml中的parameterType和resultType属性使用,经测试,对于namespace属性不适用;
- (2).environments下可以有多个environment节点,用于配置多个数据库连接信息,可以通过default属性选择使用哪个;
- (3).这个配置事务自动提交不起作用,需要在代码级别设置,sqlSessionFactory.openSession(true),这个方法是重载,默认不加参数为不自动提交;
- (4).mapper的路径注意:。
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
代码(不推荐):
public static SqlSessionFactory getSqlSessionFactory(){
PooledDataSource dataSouce = new PooledDataSource();
dataSouce.setDriver("com.mysql.jdbc.Driver");
dataSouce.setUrl("jdbc:mysql://localhost:3306/mybatis");
dataSouce.setUsername("root");
dataSouce.setPassword("123456");
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSouce);
Configuration configuration = new Configuration(environment);
configuration.getTypeAliasRegistry().registerAlias("firstRole", Role.class);
configuration.addMapper(RoleMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
return sqlSessionFactory;
}
3>.SqlSession
①.直接通过命名信息去发送sql去执行并返回结果,SqlSession层可以通过insert,update,select和delete等方法带上sql的id来操作XML中配置好的sql;
session.insert("com.anlw.mapper.RoleMapper.insertRole", role);
②.可以获取Mapper的接口(映射器),让映射器通过命名空间和方法名称找到对应的sql,发送给数据库执行后返回结果;
4>.SQL Mapper(映射器)
①.由Java接口和XML文件或注解构成,需要给出对应的sql和映射规则,负责发送sql去执行并返回结果;
②.两种方式创建:
XML(推荐)
代码(不推荐)
public interface RoleMapper {
@Select("select id,role_name as roleName,note from t_role where id = #{id}")
Role getRole(Long id);
}
③.如果mapper使用注解,那么获取SqlSessionFactory的方式必须采用代码的方式,而不能采用xml配置的方式;
3.MyBatis核心组件生命周期
1>.SqlSessionFactoryBuilder
①.它的生命周期只存在于方法局部,生成SqlSessionFactory后就可以回收丢弃;
2>.SqlSessionFactory
①.存在于MyBatis应用的整个生命周期中;
②.应该为单例模式,一个数据库只对应一个SqlSessionFactory;
3>.SqlSession
①.生命周期为请求数据库处理事务的过程;
②.线程不安全对象;
③.保证事务的一致性;
④.用完在finally中及时关闭;
4>.Mapper
①.生命周期在一个SqlSession事务方法之内,属于方法级别的;