一、改造UserMapperTest类的代码
(将公共代码创建factory和sqlSession,关闭sqlSession写在MyBatisUtil里面)
在src下面新建一个包cn.smbms.utils,在新建的包cn.smbms.utils里面新建类MyBatisUtil,将UserMapperTest类里面的创建factory,sqlSession和关闭sqlSession写在MyBatisUtil里面
改造后MyBatisUtil里面代码如下:
package cn.smbms.utils;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
private static SqlSessionFactory factory;
static{
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession createSqlSession(){
return factory.openSession(false);
}
public static void closeSqlSession(SqlSession sqlSession){
if(null!=sqlSession){
sqlSession.close();
}
}
}
改造后UserMapperTest代码如下:
package cn.smbms.dao.user;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.Test;
import cn.smbms.utils.MyBatisUtil;
public class UserMapperTest {
private Logger logger = Logger.getLogger(UserMapperTest.class);
@Test
public void test() {
int count = 0;
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtil.createSqlSession();
count = sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");
logger.debug("UserMapperTest count---> " + count);
} catch (Exception e) {
e.printStackTrace();
}finally{
MyBatisUtil.closeSqlSession(sqlSession);
}
}
}
二、如何查看源码:比如查看SqlSession源码
按住ctrl健鼠标移动到SqlSession上点击Open declared Type可打开SqlSession类,执行window—show view—outline可以查看 SqlSession的相关方法
三、改造UserMapperTest类的代码实现用户列表的查询
(使用sqlSession.selectList()方法)
在UserMapper.xml文件中增加查询用户列表配置:增加后的完整代码为:
"1.0" encoding="UTF-8" ?>
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select count(1) as count from smbms_user
select * from smbms_user
在UserMapperTest类中增加testGetUserList()方法增加后代码:
package cn.smbms.dao.user;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.Test;
import cn.smbms.pojo.User;
import cn.smbms.utils.MyBatisUtil;
public class UserMapperTest {
private Logger logger = Logger.getLogger(UserMapperTest.class);
@Test
public void test() {
int count = 0;
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtil.createSqlSession();
count = sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");
logger.debug("UserMapperTest count---> " + count);
} catch (Exception e) {
e.printStackTrace();
}finally{
MyBatisUtil.closeSqlSession(sqlSession);
}
}
@Test
public void testGetUserList() {
List
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtil.createSqlSession();
userList = sqlSession.selectList("cn.smbms.dao.user.UserMapper.getUserList");
} catch (Exception e) {
e.printStackTrace();
}finally{
MyBatisUtil.closeSqlSession(sqlSession);
}
for(User user:userList){
logger.debug("UserMapperTest userCode---> " + user.getUserCode()
+"and userName:"+user.getUserName());
}
}
}
四、使用sqlSession.getMapper(Mapper.class)方法改造UserMapperTest
由于userList = sqlSession.selectList("cn.smbms.dao.user.UserMapper.getUserList");中cn.smbms.dao.user.UserMapper.getUserList字符串书写容易出错
在cn.smbms.dao.user下创建UserMapper接口
接口中代码如下:
package cn.smbms.dao.user;
import java.util.List;
import cn.smbms.pojo.User;
public interface UserMapper {
public List
}
UserMapperTest修改后的代码如下:
package cn.smbms.dao.user;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.Test;
import cn.smbms.pojo.User;
import cn.smbms.utils.MyBatisUtil;
public class UserMapperTest {
private Logger logger = Logger.getLogger(UserMapperTest.class);
@Test
public void test() {
int count = 0;
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtil.createSqlSession();
count = sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");
logger.debug("UserMapperTest count---> " + count);
} catch (Exception e) {
e.printStackTrace();
}finally{
MyBatisUtil.closeSqlSession(sqlSession);
}
}
@Test
public void testGetUserList() {
List
SqlSession sqlSession = null;
try {
sqlSession = MyBatisUtil.createSqlSession();
userList = sqlSession.getMapper(UserMapper.class).getUserList();
} catch (Exception e) {
e.printStackTrace();
}finally{
MyBatisUtil.closeSqlSession(sqlSession);
}
for(User user:userList){
logger.debug("UserMapperTest userCode---> " + user.getUserCode()
+"and userName:"+user.getUserName());
}
}
}