本文共 3950 字,大约阅读时间需要 13 分钟。
- ORM框架
SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏味道(bad smell)”。因此 SqlSessionFactory 的最佳范围是应用范围。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。【】
package org.apache.ibatis.session;import java.sql.Connection;/** * Creates an {@link SqlSession} out of a connection or a DataSource * @author Clinton Begin */public interface SqlSessionFactory { // 自动提交属性默认为false SqlSession openSession(); // 自定义自动提交属性 SqlSession openSession(boolean autoCommit); SqlSession openSession(Connection connection); SqlSession openSession(TransactionIsolationLevel level); SqlSession openSession(ExecutorType execType); SqlSession openSession(ExecutorType execType, boolean autoCommit); SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level); SqlSession openSession(ExecutorType execType, Connection connection); Configuration getConfiguration();}
package com.sankuai.inf.leaf.segment.dao.impl;import com.sankuai.inf.leaf.segment.dao.IDAllocDao;import com.sankuai.inf.leaf.segment.dao.IDAllocMapper;import com.sankuai.inf.leaf.segment.model.LeafAlloc;import org.apache.ibatis.mapping.Environment;import org.apache.ibatis.session.Configuration;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.apache.ibatis.transaction.TransactionFactory;import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;import javax.sql.DataSource;import java.util.List;public class IDAllocDaoImpl implements IDAllocDao { SqlSessionFactory sqlSessionFactory; public IDAllocDaoImpl(DataSource dataSource) { TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); Configuration configuration = new Configuration(environment); configuration.addMapper(IDAllocMapper.class); sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); } @Override public ListgetAllLeafAllocs() { // 设置自动提交属性为false SqlSession sqlSession = sqlSessionFactory.openSession(false); try { // 查询不需要提交事务 return sqlSession.selectList("com.sankuai.inf.leaf.segment.dao.IDAllocMapper.getAllLeafAllocs"); } finally { // 关闭sqlSession sqlSession.close(); } } @Override public LeafAlloc updateMaxIdAndGetLeafAlloc(String tag) { // 自动提交属性默认为false SqlSession sqlSession = sqlSessionFactory.openSession(); try { sqlSession.update("com.sankuai.inf.leaf.segment.dao.IDAllocMapper.updateMaxId", tag); LeafAlloc result = sqlSession.selectOne("com.sankuai.inf.leaf.segment.dao.IDAllocMapper.getLeafAlloc", tag); // 手动提交事务 sqlSession.commit(); return result; } finally { // 关闭sqlSession sqlSession.close(); } } @Override public LeafAlloc updateMaxIdByCustomStepAndGetLeafAlloc(LeafAlloc leafAlloc) { SqlSession sqlSession = sqlSessionFactory.openSession(); try { sqlSession.update("com.sankuai.inf.leaf.segment.dao.IDAllocMapper.updateMaxIdByCustomStep", leafAlloc); LeafAlloc result = sqlSession.selectOne("com.sankuai.inf.leaf.segment.dao.IDAllocMapper.getLeafAlloc", leafAlloc.getKey()); sqlSession.commit(); return result; } finally { sqlSession.close(); } } @Override public List getAllTags() { SqlSession sqlSession = sqlSessionFactory.openSession(false); try { return sqlSession.selectList("com.sankuai.inf.leaf.segment.dao.IDAllocMapper.getAllTags"); } finally { sqlSession.close(); } }}
转载地址:http://dnvli.baihongyu.com/