Mybatis的三个基本要素
1.核心对象
SqlSessonFactoryBuilder.build() 获得SqlSessionFactory 对象
SqlSessonFactoryBuilder的最大特点是其生命周期用过即丢。一旦创建SqlSesionFactory对象,
这个类不需要存在了,SqlSessionFactoryBuilder的最佳使用范围就是存在于放体内,也就是局部变量
SqlSessionFactory.openSession() 获得SqlSession对象
SqlSessionFactory一旦创建,就会在整个应用运行过程中存在。没有理由销毁或者再次创建,并且在应用程序中不建议多次创建该对象。
所以SqlSessionFactory的最佳作用域为Application,也就是随着生命周期一同存在。
SqlSession 给对象可以使用xml映射文件 或者 映射接口来接受执行SQL语句的结果
SqlSession对应着一次数据库会话,用于数据库会话不是永久的,所以SqlSession对象生命周器不是永久的。
因此每次访问数据库都需要创建它(需要注意的是这并不意味着SqlSession在生命周期内只能执行一次SQL,它可以执行多次)
注意每条线程都有自己Sqlsession实例,SqlSession不能被共享,也不是线程安全的,由此作用域最好是request或者方法体内
2.Mybatis的基本配置文件
//配置文件的元素标签有顺序的
configuration
properties 可以配置在java属性配置文件中
settings 修改MyBatis在运行时的行为方式
typeAliases 为Java类型命明一个别名
typeHandelers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境
environment 环境变量
transactionManager 事务管理器
dataSource 数据源
mappers 映射器
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationg PUBLIC "-//mybatis.org//DTD Config 3.0 //EN "http://mybatis.org/dtd/mybatis-3-confdig.dtd">
<configuration>
<properties resource="database.properties"/>
<settings>
<setting name="logImpl" value="LOG4J"></setting>
</settings>
<environments default="development">
<environment id="development">
<transactionManager default="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}" />
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
</configuraton>
3.执行SQL语句映射文件
创建xxxMpper.xml文件 我这里是userMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.nubi.dao.user.UserMapper">
<select id="count" resultType="int">
select count(username) as count from user
</select>
<select id="getUserList" resultType="com.nubi.bean.User">
select * from user
</select>
</mapper>
SqlSessionFactoryBuilder 实例.build() --> SqlSessionFactory -->openSession() -->SqlSession;
//采用单列模式创建 SqlSessionFactory factory
public class MybatisUtil {
private static SqlSessionFactory factory;
static{
try{
String resource = "mybatis-config.xml ";
InputStream is = Resources.getResourceAsStream(resource);
factory = new SqlSessionFactoryBuilder().build(is);
}catch(Exception e){
e.printStackTrace();
}
}
public static SqlSession getSqlsession(){
return factory.openSession(false);//关闭自动提交事务
}
//关闭SqlSession 非常重要的,必须确保SqlSession在finally语句中正常关闭
public static void closeSqlsession(SqlSession sqlSession){
if(sqlSession != null){
sqlSession.close();
}
}
}