Java -- MyBatis学习笔记4、简单CURD

1、使用MyBatis实现基本CURD

采用传统的Dao层开发方式、通过mybatis实现对数据库表基本功能、查询所有、查询单个、新增、删除、修改

  • 在Dao层创建接口、有如下几个方法:
public interface UserInfoDao
{
    public List<UserInfo> selectAll();

    public UserInfo selectUser(int id);

    public int insert(UserInfo userInfo);

    public int update(UserInfo userInfo);

    public int delete(int id);
}
  • 实现接口、代码如下:
public class UserInfoDaoImpl implements UserInfoDao
{
    private SqlSession sqlSession;

    /**
     * 通过构造函数、注入sqlSession对象
     * @param sqlSession 调用者传入的sqlSession对象
     */
    public UserInfoDaoImpl(SqlSession sqlSession)
    {
        this.sqlSession = sqlSession;
    }

    /**
     * 查询所有
     * @return 结果集合
     */
    @Override
    public List<UserInfo> selectAll()
    {
        return this.sqlSession.selectList("com.rg.dao.UserInfoDao.selectAll");
    }

    /**
     * 查询单个
     * @param id 条件id
     * @return 单个对象
     */
    @Override
    public UserInfo selectUser(int id)
    {
        return this.sqlSession.selectOne("com.rg.dao.UserInfoDao.selectUser", id);
    }

    /**
     * 新增数据
     * @param userInfo 对象
     * @return 受影响行数
     */
    @Override
    public int insert(UserInfo userInfo)
    {
        return this.sqlSession.insert("com.rg.dao.UserInfoDao.insert", userInfo);
    }

    /**
     * 修改数据
     * @param userInfo 对象
     * @return 受影响行数
     */
    @Override
    public int update(UserInfo userInfo)
    {
        return this.sqlSession.update("com.rg.dao.UserInfoDao.update", userInfo);
    }

    /**
     * 删除数据
     * @param id 条件id
     * @return 受影响行数
     */
    @Override
    public int delete(int id)
    {
        return this.sqlSession.delete("com.rg.dao.UserInfoDao.delete", id);
    }
}
  • 在Dao层创建mapper映射文件、如下:
<mapper namespace="com.rg.dao.UserInfoDao">
    <!--
       id:推荐使用接口中方法名称
       resultType:sql语句返回值类型、这里虽然最后结果是集合、但是集合中存的是UserInfo
    -->
    <select id="selectAll" resultType="com.rg.entity.UserInfo">
        select * from UserInfo
    </select>
    <select id="selectUser" resultType="com.rg.entity.UserInfo">
        select * from UserInfo where id = #{id}
    </select>
    <insert id="insert" parameterType="com.rg.entity.UserInfo">
        insert into UserInfo(Name,Age) values(#{Name},#{Age})
    </insert>
    <update id="update" parameterType="com.rg.entity.UserInfo">
        update UserInfo set Name=#{Name},Age=#{Age} where id = #{id}
    </update>
    <delete id="delete" parameterType="int">
        delete from UserInfo where id=#{id}
    </delete>
</mapper>
  • 在测试类中测试、如下:
private UserInfoDao userInfoDao;
    private SqlSession sqlSession;
    @Before
    public void init() throws IOException
    {
        //mybatis主配置文件
        String config = "mybatis.xml";
        //读取配置文件
        InputStream is = Resources.getResourceAsStream(config);
        //创建SqlSessionFactory对象,目的是获取SqlSession
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        //获取SqlSession对象,SqlSession能执行sql语句
        this.sqlSession = sqlSessionFactory.openSession();
        this.userInfoDao = new UserInfoDaoImpl(sqlSession);
    }
    @After
    public void finish()
    {
        //关闭selectList,释放资源
        this.sqlSession.close();
    }
    @Test
    public void selectAll()
    {
        //执行SqlSession的selectList()
        List<UserInfo> userList = this.userInfoDao.selectAll();
        //循环输出集合中的结果
        userList.forEach(x -> System.out.println(x));
    }
    @Test
    public void selectUser()
    {
        UserInfo userInfo = this.userInfoDao.selectUser(2);
        System.out.println(userInfo);
    }

    @Test
    public void insert()
    {
        UserInfo userInfo = new UserInfo();
        userInfo.setName("张飞");
        userInfo.setAge(16);
        int result = this.userInfoDao.insert(userInfo);
        sqlSession.commit();
        System.out.println(result);
    }

    @Test
    public void update()
    {
        UserInfo userInfo = new UserInfo();
        userInfo.setId(2);
        userInfo.setName("李白");
        userInfo.setAge(20);
        int result = this.userInfoDao.update(userInfo);
        sqlSession.commit();
        System.out.println(result);
    }

    @Test
    public void delete()
    {
        int result = this.userInfoDao.delete(2);
        sqlSession.commit();
        System.out.println(result);
    }

这样、通过MyBatis就实现了对数据库表的简单CURD。

原文地址:https://www.cnblogs.com/dcy521/p/14745415.html