← 返回首页
Mybatis基础教程(七)
发表时间:2022-03-02 10:19:59
单表的CRUD

接上小节案例,我们完成使用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();
            }
        }
    }
}