题记
摘抄自传智播客燕青老师,下面的SqlSession使用范围
4.1 SqlSession使用范围
4.1.1 SqlSessionFactoryBuilder
通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory
将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSessionFactoryBuilder。
在需要创建SqlSessionFactory时候,只需要new一次SqlSessionFactoryBuilder即可。
4.1.2 SqlSessionFactory
通过SqlSessionFactory创建SqlSession,使用单例模式管理sqlSessionFactory(工厂一旦创建,使用一个实例)。
将来mybatis和spring整合后,使用单例模式管理sqlSessionFactory。
4.1.3 SqlSession
SqlSession是一个面向用户(程序员)的接口。
SqlSession中提供了很多操作数据库的方法:如:selectOne(返回单个对象)、selectList(返回单个或多个对象)。
SqlSession是线程不安全的,在SqlSesion实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。
SqlSession最佳应用场合在方法体内,定义成局部变量使用。
原始Dao开发Mybatis
ResourceDao接口
public interface ResourceDao {
int deleteByPrimaryKey(String resourceId);
int insert(Resource record);
Resource selectByPrimaryKey(String resourceId);
int updateByPrimaryKey(Resource record);
}
ResourceDao接口实现类
public class ResourceDaoImpl implements ResourceDao {
private SqlSessionFactory sqlSessionFactory;
public ResourceDaoImpl(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
@Override
public int deleteByPrimaryKey(String resourceId) {
SqlSession sqlSession = null;
int rs = 0;
try {
sqlSession = sqlSessionFactory.openSession();
rs = sqlSession.delete("com.pingan.hdht.dao.ResourceMapper.deleteByPrimaryKey", resourceId);//第一个参数为命名空间加上statement的id
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
return rs;
}
@Override
public int insert(Resource record) {
SqlSession sqlSession = null;
int rs = 0;
try {
sqlSession = sqlSessionFactory.openSession();
rs = sqlSession.insert("com.pingan.hdht.dao.ResourceMapper.insert", record);//第一个参数为命名空间加上statement的id
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
return rs;
}
@Override
public Resource selectByPrimaryKey(String resourceId) {
SqlSession sqlSession = null;
Resource rs = null;
try {
sqlSession = sqlSessionFactory.openSession();
rs = sqlSession.selectOne("com.pingan.hdht.dao.ResourceMapper.selectByPrimaryKey", resourceId);//第一个参数为命名空间加上statement的id
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
return rs;
}
@Override
public int updateByPrimaryKey(Resource record) {
SqlSession sqlSession = null;
int rs = 0;
try {
sqlSession = sqlSessionFactory.openSession();
rs = sqlSession.update("com.pingan.hdht.dao.ResourceMapper.insert", record);//第一个参数为命名空间加上statement的id
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
return rs;
}
测试实例就以根据主键查询为实例来介绍,其他增删改类似
public class ResourceDaoImplTest {
private static SqlSessionFactory sqlSessionFactory = null;
/**
* <p>
* 行为描述:
* 状态转变:
* 定义的算法:
* 操作系统/硬件依赖:
* 允许的实现变化:
* 安全约束:
* </p>
* @param
* @return
* @throws
* @see
* @since %I%
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception {
//mybatis配置文件
String resource = "SqlMapConfig.xml";
//得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂,传递mybatis的配置文件信息
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testSelectByPrimaryKey() {
ResourceDao resourceDao = new ResourceDaoImpl(sqlSessionFactory);
Resource resource = resourceDao.selectByPrimaryKey("1");
System.out.println(resource.getResourceDesc());
}
}
运行结果如下
以上就是Mybatis开发dao的方法–原始dao开发的方式