Mybatis笔记 —— 增删改查的具体实现

本篇博客是根据B站up @遇见狂神说 的视频以及 Mybatis官网文档 整理的笔记,里面会有一些视频的代码和官网的概念,以及我个人的注释笔记,代码例子等。
还有很多总结内容,是我自己总结的,只是分享一些个人的看法,仅供参考
全篇博客包括代码均为自己手打,结果截图均为自己运行的结果。
以下是视频链接
https://www.bilibili.com/video/BV1NE411Q7Nx?p=21
Mybatis官网文档链接
https://mybatis.org/mybatis-3/zh/index.html

在之前的博客里面说明了如何搭建一个Mybatis的项目
Mybatis笔记 —— 运行环境的搭建与Mybatis框架的运行过程分析
这篇博客写一下具体的实现增删改查的代码

实体类User,工具类MybatisUtils,配置文件mybatis-config.xml都不需要修改。增加新的需求,只需要在UserMapper接口类里面增加新的抽象方法,然后在UserMapper.xml映射文件中编写响应的sql语句即可

要进行增删改查的表
在这里插入图片描述

增删改查CRUD:增加(Create)、检索(Retrieve)、更新(Update)、删除(Delete)

根据id查询用户
public interface UserDao {
    //查询全部用户
    List<User> getUserList();
    //根据id查询用户
    User getUserById(int id);
}
<!--UserDao接口方法里面定义了一个参数,这里select查询需要用到参数,参数通过#{}来接收-->
    <select id="getUserById" parameterType="int" resultType="com.pojo.User">
        select * from mybatis.user where id = #{id};
    </select>

这里的 id 和接口类里面的抽象方法一致,parameterType是接口传入参数类型,resultType是接口返回数据类型。传入的参数是id,参数类型是 int 。传出的参数是User类对象,参数类型是User类。

测试方法

@Test
    public void getUserById(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        //向查询语句中传入参数 1,按照id=1来查询数据
        User user = mapper.getUserById(1);
        System.out.println(user);
        sqlSession.close();
    }

在这里插入图片描述
查询id为1的数据,查询成功

增加一个用户

同样的,现在接口中增加一个抽象方法

public interface UserDao {
    List<User> getUserList();
    User getUserById(int id);
    //insert 一个用户
    int addUser(User user);
}

这里要注意的是,使用的是int,是因为结果集的不同,查询select语句与插入删除语句的返回的结果不同。插入删除如果成功就会返回一个数字1,因此用 int 来定义。而查询语句查询成功就会返回一个结果集

然后修改UserMapper.xml

<!--这里values后面获取参数时,可以自动从传入的参数user中提取对应属性的值-->
    <insert id="addUser" parameterType="com.pojo.User">
        insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
    </insert>

最后是测试方法
注意,所有的增删改查语句都需要提交事务

 @Test
    public void addUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);

        int res = mapper.addUser(new User(4,"龙王","444444"));
        if(res>0){
            System.out.println("插入成功");
        }

        //提交事务
        // !!所有的增删改查都需要提交事务,否则数据库不受影响
        sqlSession.commit();
        sqlSession.close();
    }

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

修改一个用户

接口类

//修改一个用户
int updateUser(User user);

UserMapper.xml

<!-- 同样,只要 #{}里面的参数名与传入参数user里面的属性名对应相同,就可以直接获取值-->
    <update id="updateUser" parameterType="com.pojo.User">
        update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id};
    </update>

测试方法

@Test
    public void updateUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        int res = mapper.updateUser(new User(4, "东海龙王", "123123"));
        System.out.println(res);
        sqlSession.commit();
        sqlSession.close();
    }

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

删除一个用户
//删除一个用户
int deleteUser(int id);

UserMapper.xml

<delete id="deleteUser" parameterType="int">
    delete from mybatis.user where id=#{id};
</delete>

测试方法

@Test
public void deleteUser(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserDao mapper = sqlSession.getMapper(UserDao.class);
    int i = mapper.deleteUser(4);
    System.out.println(i);
    sqlSession.commit();
    sqlSession.close();
}

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

通过Map修改上面的传参方式

上面在UserMapper.xml里面编写 insert等标签的时候,传入的参数都是一个实体类对象user。这样是将user里面的全部属性变量都传入了,如果只需要部分变量的话,可以使用map

修改接口类,新增一个添加用户的方法,传入的参数是一个map,此时map里面还没有值

public interface UserDao {
    //万能的Map
	int addUser2(Map<String,Object> map);
}

修改UserMapper.xml文件

这里的sql语句中只写了两个字段,也只接收了map传过来的两个属性值

<!--使用map对象的值来作为参数传递-->
    <insert id="addUser2" parameterType="map">
        insert into mybatis.user (id,pwd) values (#{userid},#{password});
    </insert>

测试方法

 @Test
    public void addUser2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("userid",5);
        map.put("username","西海龙王");
        map.put("password","555555");
        int i = mapper.addUser2(map);
        sqlSession.commit();
        sqlSession.close();
    }

在这里插入图片描述
因为UserMapper.xml中并没有接收username的值,所以这里的name是null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一纸春秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值