玩转MyBatis02——增删改查

本文详细介绍MyBatis框架中常见的增删改查操作实现方法,包括各种参数传递方式及动态SQL的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一节我们搭建了 MyBatis 的环境,并简单实现了一个查询所有用户的 SQL 语句。本节,我将带领大家学习一下常用的增删改查的常用 SQL 语句。MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。官方文档地址

1. select

在这里插入图片描述

1.1 不带参数

  • UserMapper 接口编写
// 查询所有用户
List<User> getUserList();
  • UserMapper.xml编写
<!--select查询语句, resultType 写集合的范型的类型-->
<select id="getUserList" resultType="com.jason.pojo.User">
    select *
    from mybatis.user
</select>
  • 测试类中用例编写
@Test
public void queryAllUserTest() {
    // 获取 SqlSession 对象
    SqlSession sqlSession = MybatisUtils.getSqlSession();

    // 执行 SQL
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<User> userList = mapper.getUserList();
    for (User user : userList) {
        System.out.println(user);
    }
    // 关闭 SqlSession
    sqlSession.close();

}

1.2 带一个参数

  • UserMapper 接口编写
// 根据用户ID查询用户信息
User getUserInfoById(int id);
  • UserMapper.xml编写
<!--select查询语句, resultType 写集合的范型的类型-->
<select id="getUserInfoById" resultType="com.jason.pojo.User">
    select * from mybatis.user where id=#{id}
</select>
  • 测试类中用例编写
@Test
public void queryUserByIdTest() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();

    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    int userId = 1;
    User user = mapper.getUserInfoById(userId);
    System.out.println(user);

    // 关闭 SqlSession
    sqlSession.close();
}

1.3 带多个参数(@Param)

  • UserMapper 接口编写
// 根据用户名和密码查询用户 @Param
User getUserByNP(@Param("username") String username, @Param("password") String password);
  • UserMapper.xml编写
<select id="getUserByNP" resultType="com.jason.pojo.User">
    select * from mybatis.user where name = #{username} and pwd = #{password}
</select>

注意:xml 文件中 #{x} 中的 x 需要与 UserMapper 接口中@Param(“x”) 中的 x 保持一致!!!

  • 测试类中用例编写
@Test
public void queryUserByNPTest() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();

    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.getUserByNP("Jason", "123456");
    System.out.println(user);
    sqlSession.close();
}

1.4 带多个参数(Map)

  • UserMapper 接口编写
// 根据用户名和密码查询用户 Map
User getUserByNPMap(Map<String, Object> map);
  • UserMapper.xml编写
<!--直接取 Map 中的 key 即可-->
<select id="getUserByNPMap"  parameterType="map" resultType="com.jason.pojo.User">
    select * from mybatis.user where name = #{username} and pwd = #{pwd}
</select>

注意:xml 文件中 #{x} 中的 x 取的是 Map 中对应 key 的 value

  • 测试类中用例编写
@Test
public void queryUserByNPMapTest() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();

    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    Map<String, Object> map = new HashMap<>();
    map.put("username", "Jason");
    map.put("pwd", "123456");

    User user = mapper.getUserByNPMap(map);
    System.out.println(user);
    sqlSession.close();
}

注意: Map 中对应 key 为 SQL 中的动态参数即可,无需有序

  • 参数少时可以用 @Param 注解,参数较多时推荐使用 Map
  • Map. 传递参数,直接在 SQL 中取出 key 即可!(parameterType=“map” )
  • 对象传递参数,直接在 SQL 中取对象的属性即可!(insert 中的 parameterType=“com.jason.pojo.User”)
  • 只有一个基本类型参数的情况下,可以直接在 SQL 中取!
  • @Param 传递的参数,直接在 SQL 中取即可

1.5 模糊查询

  • UserMapper 接口编写
// 模糊查询
List<User> getUserListNameLike(String namePre);
  • UserMapper.xml编写
<select id="getUserListNameLike" resultType="com.jason.pojo.User">
    select * from mybatis.user where name like #{username}
</select>

注意:xml 文件中 #{x} 中的 x 需要与 UserMapper 接口中@Param(“x”) 中的 x 保持一致!!!

  • 测试类中用例编写
@Test
public void queryUserLikeTest() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    List<User> users = mapper.getUserListNameLike("%j%");
    for (User user : users) {
        System.out.println(user);
    }
    sqlSession.close();
}
  • 注意模糊查询时,需要带通配符 %%

2. insert

在这里插入图片描述

  • UserMapper 接口编写
// 新增用户
int addUser(User user);

返回值时影响的行数!

  • UserMapper.xml编写
<insert id="addUser" parameterType="com.jason.pojo.User">
    insert into mybatis.user (id, name, pwd)
    values (#{id}, #{name}, #{pwd})
</insert>
  • 测试类中用例编写
@Test
public void addUserTest() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = new User(5, "Nathan", "123");
    // 返回影响的行数, res >= 1, 为0时实际为插入失败
    int res = mapper.addUser(user);
    System.out.println(res);
    sqlSession.commit();
    sqlSession.close();
}

注意:增、删、改操作需要提交事务!

3. update

在这里插入图片描述

  • UserMapper 接口编写
// 修改用户信息
int updateUser(User user);

返回值时影响的行数!

  • UserMapper.xml编写
<update id="updateUser" parameterType="com.jason.pojo.User">
	update mybatis.user set name = #{name} where id = #{id}
</update>
  • 测试类中用例编写
@Test
public void updateUserTest() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = new User(5, "New Name", "456");
    // 返回影响的行数
    int res = mapper.updateUser(user);
    System.out.println(res);
    sqlSession.commit();
    sqlSession.close();
}

注意:增、删、改操作需要提交事务!

4. delete

在这里插入图片描述

  • UserMapper 接口编写
// 根据用户ID删除用户
int deleteUserById(int userId);

返回值时影响的行数!

  • UserMapper.xml编写
<delete id="deleteUserById" parameterType="int">
    delete from mybatis.user where id = #{id}
</delete>
  • 测试类中用例编写
@Test
public void deleteUserByIdTest() {
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    int res = mapper.deleteUserById(5);
    System.out.println(res);
    sqlSession.commit();
    sqlSession.close();
}

注意:增、删、改操作需要提交事务!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值