Mybatis(4) ——使用MyBatis实现CRUD

    首先回顾一下第一个mybatis程序,这里我们通过分析可以发现,对于第一个mybatis程序中编写的文件,我们可以复用,在后面的编写中,我们只需要修改dao包下的文件,及其对应的测试文件的代码,其他的代码都不用动

这篇博客用于记录怎么使用mybatis对数据库进行CRUD
固定使用步骤

  • 编写DAO接口:和原来写JDBC代码的时候一样,使用面向接口编程的思想
  • 编写对应mapper.xml文件中的操作节点+节点参数+sql语句
  • 测试:测试中我们需要注意,CRUD中,除了查询不需要提交事务之外,其他的都需要提交事务

1、select

    选择,即查询语句

  • id属性:对应namespace中对应的Dao接口中的方法名称

  • resultType:SQL语句执行的返回值类型

  • parameterType: id属性对应的方法的参数类型

    使用固定步骤
    ①编写DAO接口

    package com.thhh.dao;
    
    import com.thhh.pojo.User;
    
    import java.util.List;
    
    //在mybatis中,我们一般不写dao,而将其改写为mapper,其实二者是一样的,只是名字变了
    public interface UserDao {
        //1、查询所有用户
        List<User> getUserList();
    }
    

    ②编写对应mapper.xml文件中的操作节点+节点参数+sql语句

    <?xml version="1.0" encoding="UTF8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!--mapper节点,mapper 映射器-->
    <mapper namespace="com.thhh.dao.UserDao"><!--属性namespace,即命名空间,用于绑定一个 mapper/dao 接口-->
        <!--select:查询语句-->
        <!--查询所有的用户信息-->
        <select id="getUserList" resultType="com.thhh.pojo.User">
            select * from mybatis.user
        </select>
    </mapper>
    

    ③测试

    package com.thhh;
    
    import com.thhh.dao.UserDao;
    import com.thhh.pojo.User;
    import com.thhh.utils.MyBatisUtils;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    import java.util.List;
    
    public class UserDaoTest {
        @Test
        public void test1(){
            //1、获取SqlSession对象
            SqlSession sqlSession = MyBatisUtils.getSqlSession();
            //2、获取执行SQL的对象,获取的方法就是通过sqlSession.getMapper(),去获取User.class的mapper映射器
            UserDao mapper = sqlSession.getMapper(UserDao.class);
            List<User> userList = mapper.getUserList();
            for (User user : userList) {
                System.out.println(user);
            }
            sqlSession.close();
        }
    

    在这里插入图片描述

2、insert

    使用步骤都是固定的

//2、通过ID查询用户
User getUserById(int id);
    <!--插入一条数据-->
    <insert id="insertUser" parameterType="com.thhh.pojo.User">
        insert into mybatis.user(id,name,pwd) values(#{id},#{name},#{pwd})
    </insert>

注意:这里由于使用的是修改操作,所以需要提交事务,且我们不用像在JDBC中一样去手动的开启事务

    @Test
    public void test3(){
        //1、获取SqlSession对象
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        //2、获取执行SQL的对象,获取的方法就是通过sqlSession.getMapper(),去获取User.class的mapper映射器
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        int result = mapper.insertUser(new User(4, "赵六", "123"));
        System.out.println("数据库受影响的行数"+result);
        sqlSession.commit();
        sqlSession.close();
    }

在这里插入图片描述
在这里插入图片描述

3、update

4、delete

完整的DAO代码

package com.thhh.dao;

import com.thhh.pojo.User;

import java.util.List;

//在mybatis中,我们一般不写dao,而将其改写为mapper,其实二者是一样的,只是名字变了
public interface UserDao {
    //1、查询所有用户
    List<User> getUserList();
    //2、通过ID查询用户
    User getUserById(int id);
    //3、插入一个新用户
    int insertUser(User user);
    //4、修改用户信息
    int updateUser(User user);
    //5、删除用户信息
    int deleteUser(int id);
}

完整的mapper.xml代码

<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--mapper节点,mapper 映射器-->
<mapper namespace="com.thhh.dao.UserDao"><!--属性namespace,即命名空间,用于绑定一个 mapper/dao 接口-->
    <!--select:查询语句-->
    <!--查询所有的用户信息-->
    <select id="getUserList" resultType="com.thhh.pojo.User">
        select * from mybatis.user
    </select>
    <!--通过id查询指定的用户信息-->
    <select id="getUserById" resultType="com.thhh.pojo.User" parameterType="int">
        select * from mybatis.user where id = #{id}
    </select>
    <!--插入一条数据-->
    <insert id="insertUser" parameterType="com.thhh.pojo.User">
        insert into mybatis.user(id,name,pwd) values(#{id},#{name},#{pwd})
    </insert>
    <!--修改一条数据-->
    <update id="updateUser" parameterType="com.thhh.pojo.User">
        update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id}
    </update>
    <delete id="deleteUser" parameterType="int">
        delete from mybatis.user where id=#{id}
    </delete>

</mapper>

完整的测试代码

package com.thhh;

import com.thhh.dao.UserDao;
import com.thhh.pojo.User;
import com.thhh.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserDaoTest {
    @Test
    public void test1(){
        //1、获取SqlSession对象
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        //2、获取执行SQL的对象,获取的方法就是通过sqlSession.getMapper(),去获取User.class的mapper映射器
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        List<User> userList = mapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }

    @Test
    public void test2(){
        //1、获取SqlSession对象
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        //2、获取执行SQL的对象,获取的方法就是通过sqlSession.getMapper(),去获取User.class的mapper映射器
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        User user = mapper.getUserById(2);
        System.out.println(user);
        sqlSession.close();
    }

    @Test
    public void test3(){
        //1、获取SqlSession对象
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        //2、获取执行SQL的对象,获取的方法就是通过sqlSession.getMapper(),去获取User.class的mapper映射器
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        int result = mapper.insertUser(new User(4, "赵六", "123"));
        System.out.println("数据库受影响的行数"+result);
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void test4(){
        //1、获取SqlSession对象
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        //2、获取执行SQL的对象,获取的方法就是通过sqlSession.getMapper(),去获取User.class的mapper映射器
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        int result = mapper.updateUser(new User(2, "李四2", "123"));
        System.out.println("数据库受影响的行数"+result);
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void test5(){
        //1、获取SqlSession对象
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        //2、获取执行SQL的对象,获取的方法就是通过sqlSession.getMapper(),去获取User.class的mapper映射器
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        int result = mapper.deleteUser(4);
        System.out.println("数据库受影响的行数"+result);
        sqlSession.commit();
        sqlSession.close();
    }
}

小结

  • 使用MyBatis实现JDBC的CRUD功能确实很简单,对于数据库中的一张表总共就只需要编写3个文件 —— Dao/Mapper接口定义文件、这个接口对应的Mapper.xml文件和测试Dao/Mapper接口功能的文件,其他的文件在"第一个mybatis程序"中已经写过了,不用再修改,这里直接使用即可
    这其实也就对应了上面我们总结的实现CRUD的3步:设计DAO/Mapper接口、实现Mapper接口和测试
    在这里插入图片描述
  • UserMapper/UserDao与其对应的UserMapper.xml文件通过mapper节点的namespace属性进行关联,而UserMapper.xml和mybatis核心配置文件通过mapper节点的resources属性进行关联;注意:namespace中填写的必须是对应的UserMapper的全路径,而我们在MyBatis中注册Mapper.xml的时候如果使用的是resource属性对Mapper.xml文件进行注册,才是写的Mapper的"/"全路径(全路径:包名+类名)
  • 在Mapper.xml文件中,我们如果要使用参数列表中的属性,直接通过"#{属性名称即可使用}",而对于参数列表传递的是一个对象的引用时,直接在#{ }中写上对象的属性名称即可使用,不用加上传过来的引用
    在这里插入图片描述
  • 对于MyBatis实现的CRUD中,除了查询功能不需要我们手动提交事务之外,其他3个修改操作我们都需要在sqlSession对象关闭的前一句提交事务,否则数据将不会持久化到数据库中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值