MyBatis-CRUD(增删查改)

10 篇文章 0 订阅

1.namespace

namespace中的包名要和 Dao/mapper接口的包名一致!

2.select选择,查询语句

  • id:就是对应的namespace中的方法名;

  • resultType: Sql语句执行的返回值

  • parameterType :参数类型

  • 举例:根据id查询用户

    UserMapper接口中添加方法:

    //根据用户id查询用户
    User getUserById(int id);

    UserMapper.xml中添加查询语句:

    <select id="getUserById" parameterType="int" resultType="com.likea.pojo.User">
    <!--参数名需要和方法的参数名保持一致都是id-->
        select * from user where id=#{id}
    </select>

    测试:

    @Test
    public void getUserById(){
        //创建sqlSession,获取执行sql的对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //获取getMapper
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //调用查找方法
        User user = mapper.getUserById(2);
        System.out.println(user);
        //关闭资源
        sqlSession.close();
    }

3.insert插入

  • 参数类型是User对象

  • 举例:插入一个用户,三个字段,将其封装成User对象当成参数传入

    UserMapper接口中添加方法:

    //添加一个用户
        boolean addUser(User user);

    UserMapper.xml中添加插入语句:

    <insert id="addUser" parameterType="com.likea.pojo.User">
    <!--对象中的属性能直接取出-->
        insert into user values(#{id},#{username},#{password})
    </insert>

    测试:

    @Test
    public void addUser() {
        //增删改需要提交事务,否则不会产生影响
        //获取sql执行对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //getMapper
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //方法一:传入的参数
        User user = new User();
        user.setId(4);
        user.setUsername("赵六");
        user.setPassword("111111");
        //方法二:传入参数,有参构造
        User user1 = new User(5, "田七", "77777");
        //调用插入方法
        boolean flag = mapper.addUser(user);
        boolean flag1 = mapper.addUser(user1);
        if (flag && flag1) {
            System.out.println("赵六插入成功与否:" + flag);
            System.out.println("田七插入成功与否:" + flag1);
        }
        //提交事务
        sqlSession.commit();
        //关闭资源
        sqlSession.close();
    }

4.update修改

  • 举例:修改用户,传入User类型的参数,也需要提交事务

    UserMapper接口中添加方法:

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

    UserMapper.xml中添加修改语句:

    <update id="updateUser" parameterType="com.likea.pojo.User">
        update user set username=#{username},password=#{password}       where id=#{id}
    </update>

    测试:

    @Test
    public void updateUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.updateUser(new User(1, "刘洋", "88888888"));
        if (i>0){
            System.out.println("修改成功!");
        }
        //增删改需要提交事务,不然不影响数据库的数据
        sqlSession.commit();
        sqlSession.close();
    }

5.delete删除

  • 举例:删除用户通过id

    UserMapper接口中添加方法:

    //删除用户
    int deleteUserById(int id);

    UserMapper.xml中添加删除语句:

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

    测试:

    @Test
    public void deleteUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.deleteUserById(1);
        if (i>0){
            System.out.println("删除成功");
        }
        sqlSession.commit();
        sqlSession.close();
    }

6.总结

  1. 编写接口

  2. 编写对应的mapper中的sql语句

  3. 测试:增删改需要提交事务

7.万能的Map

假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map!

  • 举例:使用map做参数添加用户

    UserMapper接口中添加方法:

    //使用map做参数添加用户
    int addUser1(Map<String,Object> map);

    UserMapper.xml中添加插入语句:

    <insert id="addUser1" parameterType="map">
    <!--传递的参数名是map的键key-->
        insert into user(id,username,password) values(#{id},#{name},#{pwd})
    </insert>

    测试:

    @Test
    public void addUser1() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<>();
        map.put("id",8);
        map.put("name","王霸");
        map.put("pwd","66666");
        int i = mapper.addUser1(map);
        if (i>0){
            System.out.println("插入成功");
        }
        sqlSession.commit();
        sqlSession.close();
    }
  • 举例:查询用户通过不止一个字段,用Map作为参数

    UserMapper接口中添加方法:

    //使用map作为参数,查询用户
    User getUser1(Map<String,Object> map);

    UserMapper.xml中添加查询语句:

    <select id="getUser1" parameterType="map" resultType="com.likea.pojo.User">
        select * from user where id=#{id} and username=#{name}
    </select>

    测试:

    @Test
    public void getUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        HashMap<String, Object> map = new HashMap<>();
        map.put("id",1);
        map.put("name","田七");
        User user = mapper.getUser1(map);
        System.out.println(user);
        sqlSession.close();
    }
  • Map传递参数,直接在sql中取出key即可!

  • 对象传递参数,直接在sql中取对象的属性即可!

  • 只有一个基本类型参数的情况下,可以直接在sql中取到,和形参名一致!

  • 多个参数用map或注解

8.模糊查询

  • 举例:根据用户名模糊查询用户列表

    UserMapper接口中添加方法:

    //通过用户名模糊查询用户列表
    List<User> getUserLike(String value);

    UserMapper.xml中添加查询语句:

    <select id="getUserLike" resultType="com.likea.pojo.User">
        select * from user where username like #{value}
    </select>

    测试:

    @Test
    public void getUserLike() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //第一种方式:在传参的时候使用通配符
        List<User> userList = mapper.getUserLike("%李%");
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }
  • 第一种方式:在传参的时候使用通配符

  • 第二种方式:在sql中使用通配符

    <select id="getUserLike" resultType="com.likea.pojo.User">
        select * from user where username like "%"#{value}"%"
    </select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

热爱编程的小洋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值