[Mybatis] 使用Mybatis进行简单的增删改查

🌈有幸相识 ,我是小相。有一个大厂梦,努力奔赴!加油陌生人!🌈
☁️该文章是跟随B站狂神学习Mybatis时的笔记与心得,若与您有用,感谢点赞。文章不免有不足之处,请指出,我会及时改正!

该部分代码见:mybatis-01- · xcy.小相/web-Mybatis - 码云 - 开源中国 (gitee.com)

1. *Mapper.xml结构

在Mybatis中,接口实现类由原来的* Impl.java变成 *Mapper.xml。通过xml来代替查询语句,替换了原先的接口实现类。在一个 XML 映射文件中,可以定义无数个映射语句。

<?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="top.xcyxiaoxiang.dao.UserMapper">
    <select id="getUserList" resultType="top.xcyxiaoxiang.pojo.User">
        select * from users
    </select>

    <select id="getUserById" parameterType="int" resultType="top.xcyxiaoxiang.pojo.User">
        select * from users where id=#{id}
    </select>

    <insert id="insertUser" parameterType="top.xcyxiaoxiang.pojo.User">
        insert into users values(#{id},#{name},#{pwd})
    </insert>

    <update id="updateUser" parameterType="top.xcyxiaoxiang.pojo.User" >
        update users set name=#{name},pwd=#{pwd} where id=#{id}
    </update>

    <delete id="deleteUser" parameterType="int">
        delete from users where id= #{id}
    </delete>
</mapper>
  • namespace:命名空间,对应一个mapper接口,该参数必须指定。
  • select:查询标签,查询SQL语句将会放置此处。
    • id:对应该mapper接口中的一个操作方法。
    • resultType:返回值类型,通常使用全限定名(或别名)。
    • parameterType: 传入的参数。
  • #{}:用于传递参数。

2. <select >查询

  • 模糊查询的SQL为:select * from users where name like "%"#{value}"%"
编写Mapper接口
    /**
     * 获取用户列表
     * @return
     */
    List<User> getUserList();

    /**
     * 根据用户id查询用户
     * @param id
     * @return
     */
    User getUserById(int id);
编写mapper.xml文件
    <select id="getUserList" resultType="top.xcyxiaoxiang.pojo.User">
        select * from users
    </select>

    <select id="getUserById" parameterType="int" resultType="top.xcyxiaoxiang.pojo.User">
        select * from users where id=#{id}
    </select>
编写测试文件
    @Test
    public void getUserList(){
        // 获取session对象
        SqlSession sqlSession = MybatisUnits.getSqlSession();
        //执行sql
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = userMapper.getUserList();
        for(User user:userList){
            System.out.println(user);
        }
        // 关闭SqlSession
        sqlSession.close();

    }

3. <insert>插入

编写Mapper接口
    /**
     * 增加用户
     * @param user
     */
    void insertUser(User user);
编写mapper.xml文件
    <insert id="insertUser" parameterType="top.xcyxiaoxiang.pojo.User">
        insert into users values(#{id},#{name},#{pwd})
    </insert>
编写测试文件
    @Test
    // 注意:增 删 改 需要提交事务
    public void insertUser(){
        SqlSession sqlSession = MybatisUnits.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = new User(4,"王二麻","123123");
        mapper.insertUser(user);
        // 提交事务
        sqlSession.commit();

        sqlSession.close();
    }

4. <update>更新

编写Mapper接口
    /**
     * 更新用户信息
     * @param user
     */
    void updateUser(User user);
编写mapper.xml文件
    <update id="updateUser" parameterType="top.xcyxiaoxiang.pojo.User" >
        update users set name=#{name},pwd=#{pwd} where id=#{id}
    </update>
编写测试文件
    @Test
    public void updateUser(){
        SqlSession sqlsession = MybatisUnits.getSqlSession();
        UserMapper mapper = sqlsession.getMapper(UserMapper.class);
        mapper.updateUser(new User(4,"哈哈哈哈","123123123"));
        sqlsession.commit();
        sqlsession.close();

    }

5. <delete>删除

编写Mapper接口
    /**
     * 根据用户ID删除用户
     * @param id
     */
    void deleteUser(int id);
编写mapper.xml文件
    <delete id="deleteUser" parameterType="int">
        delete from users where id= #{id}
    </delete>
编写测试文件
    @Test
    public void deleteUser(){
        SqlSession sqlSession = MybatisUnits.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.deleteUser(4);
        sqlSession.commit();
        sqlSession.close();
    }

6. 部分参数的传递

通过将参数封装至HashMap中,来实现部分参数的传递。

  • UserMapper.java
    /**
     * 通过Map传递部分参数来实现更新用户数据
     * @param map
     */
    void updateUserByMap(Map map);
  • UserMapper.xml
    <update id="updateUserByMap" parameterType="map">
        update users set name = #{userName} where id= #{userId}
    </update>
  • Test
    @Test
    public void updateUserByMap(){
        SqlSession sqlSession = MybatisUnits.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<>();
        map.put("userId",3);
        map.put("userName","mapper");
        mapper.updateUserByMap(map);
        sqlSession.commit();
        sqlSession.close();
    }

注意事项

  • mybatis默认设置关闭自动提交,因此增删改都需要提交事务,否则不能成功操作数据库。

  • 执行后一定要关闭sqlSession对象。

  • SQL语句中#{}中的参数名必须和pojo中的实体类变量或mapper接口中对应的参数名相同,或和对象中的属性名成相同。

  • namespace:后的名称必须要使用.来表达层次关系。

  • 在核心配置文件中通过resource注册mapper时,使用/来表达层次关系。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值