Mybatis之增删改查实现(对比分析对象传参和map传参)

在实现了Mybatis的环境搭建和第一个Mybatis程序之后,这篇博客就是来记录基本的增删改查步骤。关于Mybatis环境搭建,可以参考我的前一篇博客:https://blog.csdn.net/weixin_43923436/article/details/110421441

查找:
select标签是mybatis中最常用的标签之一,就是对应数据库的查找功能:
首先在接口中添加抽象方法,比如按照id查找:

public interface UserMapper {
   //根据id查询用户
   User selectUserById(int id);
}

在xml中配置时,需要注意namespace,一定要指向你写的接口,id就是你写的查找的抽象方法的方法名,resultType是返回值的类型,Mybatis会自动将查询结果封装成对象返回给你。#{}中是获取传入参数的值,这里是是传入参数的名字,抽象方法中是int id,这里就是id。#{}中也可以是传入对象的属性或者map的key,后文中会详细介绍。

<?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.dao.UserMapper">

<select id="selectUserById" resultType="com.kuang.pojo.User">
select * from user where id = #{id}
</select>

</mapper>

测试:
SqlSession session = MybatisUtils.getSession();是获取数据库连接,session.close();是关闭连接,这两步是固定步骤,UserMapper mapper = session.getMapper(UserMapper.class)是获取你写的接口的实例,然后用这个实例调用你写的查询方法就可以获取查询结果了:User user = mapper.selectUserById(1);

@Test
public void tsetSelectUserById() {
   SqlSession session = MybatisUtils.getSession();  //获取SqlSession连接
   UserMapper mapper = session.getMapper(UserMapper.class);
   User user = mapper.selectUserById(1);
   System.out.println(user);
   session.close();
}

在数据库中添加:
接口中的抽象方法:

int addUser(User user);

在xml中配置,注意,这里是insert标签,不是select标签了。parameterType是传入参数的类型,这里是user对象。

<insert id="addUser" parameterType="com.kuang.pojo.User">
    insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert>

测试:
注意,除了查询操作,其余的增删改都需要提交事务才是成功:session.commit()。也就是说,测试时,除了创建连接和关闭连接这两步必须操作外,在增删改时,还必须加上提交事务。

@Test
public void testAddUser() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);
   User user = new User(5,"王五","zxcvbn");
   session.commit(); //提交事务,重点!不写的话不会提交到数据库
   session.close();
}

改:
接口中抽象方法:

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

xml中配置,update标签,这里的#{}中就是使用的传入参数user对象中的属性,和user对象中属性名相同就能获取相应属性的值。

<update id="updateUser" parameterType="com.kuang.pojo.User">
  update user set name=#{name},pwd=#{pwd} where id = #{id}
</update>

删除:
接口中抽象方法:

//根据id删除用户
int deleteUser(int id);

xml中配置,用delect标签:

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

map传参:

基本传参:#{}中直接就是参数的名字。
对象传参:传入的是个对象,#{}中就是对象的属性。

如果对象中属性特别多,可是需要的查询操作却只需要一条属性就够,那样的话,封装一个对象传参的话,封装对象会变得很麻烦,并且对象的大部分属性根本用不到,却还要封装进去,很麻烦,因此。实际工作中,大部分公司会选择用map来进行传参:
封装map对象,只需要封装会用到的属性就行:

Map<String, Object> map = new HashMap<String, Object>();
map.put("username","小明");
map.put("pwd","123456");

接口中的抽象方法:

User selectUser(Map<String,Object> map);

xml中配置:

<select id="selectUser" parameterType="map" resultType="com.User">
select * from user where name = #{username} and pwd = #{pwd}
</select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值