接上小节案例,我们完成使用mybatis的SqlSession实现单表的CRUD。
项目结构图如下:

1.在com.util包下创建SqlSessionFactoryUtil工具类。
package com.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class SqlSessionFactoryUtil {
private static SqlSessionFactory sqlSessionFactory;
private static final Class CLASS_LOCK = SqlSessionFactoryUtil.class;
/**
* 私有化构造
*/
private SqlSessionFactoryUtil() {
}
/*
* 单实例对象
*/
public static SqlSessionFactory initSqlSessionFactory() {
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
synchronized (CLASS_LOCK) {
if (sqlSessionFactory == null) {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
}
return sqlSessionFactory;
}
public static SqlSession openSqlSession() {
if (sqlSessionFactory == null) {
initSqlSessionFactory();
}
return sqlSessionFactory.openSession();
}
}
2.改写usersMapper.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.mapper.usersMapper">
<!--查询所有用户-->
<select id="getAllUsers" resultType="Users">
select * from users
</select>
<!--根据用户编号查询某个用户资料-->
<select id="getUser" parameterType="int" resultType="Users">
select * from users where uid=#{uid}
</select>
<!--新增用户-->
<insert id="addUser" parameterType="Users" useGeneratedKeys="true" keyProperty="uid">
insert into users (username,password) values (#{username},#{password})
</insert>
<!--更新用户-->
<update id="updateUser" parameterType="Users">
update users set username = #{username},password=#{password} where uid = #{uid}
</update>
<!--删除用户-->
<delete id="deleteUser" parameterType="int">
delete from users where uid = #{uid}
</delete>
</mapper>
3.编写测试类测试。
package com.mapper;
import com.entity.Users;
import com.util.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UsersMapperTest {
//测试新用户
@Test
public void testInsertUser() {
SqlSession session = null;
Users u = new Users();
u.setUsername("admin");
u.setPassword("123456");
try {
session = SqlSessionFactoryUtil.openSqlSession();
int result = session.insert("addUser", u);
System.out.println("受影响记录条数:" + result);
System.out.println("新增用户主键:" + u.getUid());
session.commit();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
}
//测试根据用户编号查询用户资料
@Test
public void testQueryUserByUid() {
SqlSession session = null;
Users u = null;
try {
session = SqlSessionFactoryUtil.openSqlSession();
u = session.selectOne("getUser", 3);
System.out.println(u);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
}
//测试查询所有用户
@Test
public void testQueryAllUsers() {
SqlSession session = null;
Users u = null;
try {
session = SqlSessionFactoryUtil.openSqlSession();
List<Users> list = session.selectList("getAllUsers");
System.out.println(list);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
}
//测试更新用户
@Test
public void testUpdateUser() {
SqlSession session = null;
Users u = new Users();
u.setUid(8);
u.setUsername("admin");
u.setPassword("666666");
try {
session = SqlSessionFactoryUtil.openSqlSession();
int result = session.update("updateUser", u);
System.out.println("受影响记录条数:" + result);
session.commit();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
}
//测试删除用户
@Test
public void testDeleteUser() {
SqlSession session = null;
try {
session = SqlSessionFactoryUtil.openSqlSession();
int result = session.delete("deleteUser", 9);
System.out.println("受影响记录条数:" + result);
session.commit();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
}
//测试查询所有用户返回Map
@Test
public void testQueryAllUsersWithMap() {
SqlSession session = null;
try {
session = SqlSessionFactoryUtil.openSqlSession();
Map<Integer, Users> map = session.selectMap("getAllUsers", "uid");
Set<Integer> keySet = map.keySet();
Iterator<Integer> iterator = keySet.iterator();
while (iterator.hasNext()) {
Integer key = iterator.next();
Users u = map.get(key);
System.out.println(key + "=" + u);
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (session != null) {
session.close();
session = null;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}