public class Test {
private SqlSessionFactory sqlSessionFactory;
@Override
public User findUserById(int id) throws Exception {
SqlSession session = sqlSessionFactory.openSession();
User user = null;
try {
//通过sqlsession调用selectOne方法获取一条结果集
//参数1:指定定义的 statement的id
//参数2:指定向statement中传递的参数
user = session.selectOne("test.findUserById", id);
System.out.println(user);
} finally{
session.close();
}
return user;
}
}
Object selectOne(String statementId, Object param);
List<Object> selectList(String statementId, Object param);
SqlSession
DefaultSqlSession
SqlSessionFactory
DefaultSqlSessionFactory
DefaultSqlSessionFactoryBuilder
Executor
SimpleExecutor
package com.eleven.session;
import java.util.List;
/**
* sql执行会话
* @author eleven
* @see
* @since
*/
public interface SqlSession {
**
* 查询单条记录
* @param statementId
* @param param
* @return
*/
<T> T selectOne(String statementId, Object param);
**
* 查询集合记录
* @param statementId
* @param param
* @return
*/
<T> List<T> selectList(String statementId, Object param);
}
package com.eleven.session;
import com.eleven.config.Configuration;
import com.eleven.config.MappedStatement;
import java.util.List;
/**
* sql执行会话默认实现类
* @author eleven
* @see
* @since
*/
public class DefaultSqlSession implements SqlSession {
private Configuration configuration;
public DefaultSqlSession(Configuration configuration) {
this.configuration = configuration;
}
@Override
public <T> T selectOne(String statementId, Object param) {
List<T> resultList = this.selectList(statementId, param);
if (resultList != null && resultList.size() == 1) {
return resultList.get(0);
}
return null;
}
@Override
public <T> List<T> selectList(String statementId, Object param) {
MappedStatement mappedStatement = configuration.getMappedStatements().get(statementId);
Executor executor = new SimpleExecutor();
return executor.query(configuration, mappedStatement, param);
}
}
package com.eleven.session;
import com.eleven.config.Configuration;
import com.eleven.config.MappedStatement;
import java.util.List;
/**
* Sql执行器接口
* @author eleven
* @see
* @since
*/
public interface Executor {
**
* 执行sql
* @param configuration
* @param mappedStatement
* @param param
* @return
*/
<T> List<T> query(Configuration configuration, MappedStatement mappedStatement, Object param);
}
package com.eleven.session;
import com.eleven.config.Configuration;
import com.eleven.config.MappedStatement;
import java.util.List;
/**
* sql执行器默认实现类
* @author eleven
* @see
* @since
*/
public class SimpleExecutor implements Executor {
@Override
public List<Object> query(Configuration configuration, MappedStatement mappedStatement, Object param) {
此处执行jdbc相关操作
return null;
}
}
package com.eleven.session;
/**
* sql执行会话工厂类
* @author eleven
* @see
* @since
*/
public interface SqlSessionFactory {
**
* 创建sql执行会话
* @return
*/
SqlSession openSqlSession();
}
package com.eleven.session;
import com.eleven.config.Configuration;
/**
* sql执行会话工厂默认实现类
* @author eleven
* @see
* @since
*/
public class DefaultSqlSessionFactory implements SqlSessionFactory {
private Configuration configuration;
public DefaultSqlSessionFactory(Configuration configuration) {
this.configuration = configuration;
}
@Override
public SqlSession openSqlSession() {
return new DefaultSqlSession(configuration);
}
}
public class UserDaoImpl implements UserDao {
private SqlSessionFactory sqlSessionFactory;
public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
super();
this.sqlSessionFactory = sqlSessionFactory;
}
public UserDaoImpl() {
}
@Override
public User queryUserById(User param) {
// 先创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSqlSession();
// 调用SqlSession的selectOne方法
String statementId = "test.findUserById";
User user = sqlSession.selectOne(statementId, param);
return user;
}
}
package com.eleven.session;
import com.eleven.config.Configuration;
import com.eleven.config.XmlConfigParser;
import com.eleven.util.DocumentUtil;
import org.dom4j.Document;
import java.io.InputStream;
/**
* sql执行会话工厂构建器
* @author eleven
* @see
* @since
*/
public class SqlSessionFactoryBuilder {
public SqlSessionFactory build(InputStream inputStream) {
Document document = DocumentUtil.createDocument(inputStream);
XmlConfigParser parser = new XmlConfigParser()
Configuration configuration =
parser.parse(document.getRootElement());
return new DefaultSqlSessionFactory(configuration);
}
}




