第一章 MyBatis 入门
开发环境搭建
(1)新建gradle工程
(2)配置gradle里的mybatis
compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.18'
compile group: 'org.mybatis', name: 'mybatis', version: '3.4.6'
MyBatis的基本构成
MyBatis的基本组件
(1)SqlSessionFactoryBuilder构造器: 根据配置文件或者代码生成SqlSessionFactory(工厂接口)
(2)SqlSessionFactory:依赖工厂生成SqlSession
提供两种模式去创建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 alias="user" type="bases.User" />
</typeAliases>
<!--定义数据库信息-->
<environments default="dev">
<environment id="dev">
<!--使用JDBC的事务管理-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据库连接信息-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/demo"/>
<property name="username" value="root"/>
<property name="password" value="manager1"/>
</dataSource>
</environment>
</environments>
<!--定义映射器-->
<mappers>
<mapper resource="./UserMapper.xml"></mapper>
</mappers>
</configuration>
获取sqlSessionFactory
public static SqlSessionFactory getSqlSessionFactoryForXML(){
InputStream stream = SqlSessionFactoryTest.class.getClassLoader().getResourceAsStream("./mybatis-config1.xml");
/**
* 通过SqlSessionFactoryBuilder读取xml文件信息,来创建SqlSessionFactory的对象
*
* Mybatis会将mybatis-config1.xml文件配置信息解析到Configuration类对象里面
* 然后利用SqlSessionFactoryBuilder对象读取为我们创建的SqlSessionFactory
*/
return new SqlSessionFactoryBuilder().build(stream);
}
②代码方式
public static SqlSessionFactory getSqlSessionFactoryForJava(){
PooledDataSource pooledDataSource = new PooledDataSource();
pooledDataSource.setDriver("com.mysql.jdbc.Driver");
pooledDataSource.setUrl("jdbc:mysql://localhost:3306/demo");
pooledDataSource.setUsername("root");
pooledDataSource.setPassword("manager1");
//数据库的事务方式
JdbcTransactionFactory jdbcTransactionFactory = new JdbcTransactionFactory();
//创建数据库运行时环境
Environment dev = new Environment("dev", jdbcTransactionFactory,pooledDataSource);
//构建Configuration对象
Configuration configuration = new Configuration(dev);
//注册一个MyBatis上下问别名
configuration.getTypeAliasRegistry().registerAlias("user", User.class);
//加入一个映射器
configuration.addMapper(UserMapper.class);
//构建SqlSessionFactory
return new SqlSessionFactoryBuilder().build(configuration);
}
(3)SqlSession:发送sql去执行,并返回结果,也可以获取Mapper的接口
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryTest.getSqlSessionFactoryForXML();
SqlSession sqlSession = null;
try {
sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User dd = mapper.getUserByName("dd");
System.out.println(dd.toString());
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if(sqlSession!= null){
sqlSession.close();
}
}
(4)Sql Mapper(映射器):有一个Java接口和一个Xml文件构成,需要给出对应的Sql和映射规则。负责发送Sql去执行,并返回结果
MyBatis各个组件的生命周期
(1)SqlSessionFactoryBuilder利用XML或者Java编码获得资源来构建SqlSessionFactory,作用就是一个构建器,所以一旦创建完sqlSessionFactory作用就完结,我们就可以回收
(2)SqlSeesionFactory用来创建SqlSession,而sqlSession是一个会话,所以SqlSessionFactory的生命周期是MyBatis的整个生命周期,如果我们多次创建同一个数据库的sqlSessionFactory,会打开多个数据库连接,会照成资源耗尽,所以,我们应该使每一个数据库对应一个sqlSessionFactory。管理好数据库资源分配。
(3)SqlSession:是一个会话,相当于JDBC的Contection对象,生命周期应该是请求数据库处理事务的过程中,是一个线程不安全的对象,创建的sqlSession必须及时关闭
(4)Mapper是一个接口,作用是发送SQL,然后返回我们需要的结果,或者执行Sql从而修改数据库的数据,因此,他应该是一个SqlSession事务方法内的一个方法级别的东西,如同JDBC中的一个sql语句执行,,