zlprime zlprime
  • 首页
  • 朝花夕拾
    • 摄影
    • 读书
    • 生活
    • 随笔
  • 技能分享
    • WordPress
  • 其它
    • 游记地图
    • 闲言碎语
    • 阅读书单
    • 友情链接
    • 留言板
  • Java
首页 › Java › Mybatis Puls的CRUD操作

Mybatis Puls的CRUD操作

Stone
6月前Java
788 0 1

插入操作:

public void testInsert(){
      User user = new User();
      user.setUserName("zlprime");
      user.setPassword("zlprime");
      user.setAge(18);

      //public int insert(T entity);
      //使用insert方法,会返回数据库中受影响的行数
      int result = userMapper.insert(user);

      //添加完成之后,mybatis plus会将新增的主键自动封装到之前的实体类中
      //所以,可以通过实体类的get方法获取新增之后的主键
      System.out.println(user.getId());

    }

@TableField注解

在实体类中我们的属性名一般是驼峰命名形式,例如userName,而在数据库中我们的字段名可能是这样的user_name。如果是这种情况,mybatis plus会自动将我们实体类中的userName属性,映射到数据库中的user_name字段,无需我们额外操作。但是,如果不是以驼峰命名法进行命名,或者出现其它无法映射的情况,就可能会出现问题。而TableField注解就是为了解决这个问题的

     /**
     * @TableField
     * 1.解决对象中的属性名和数据表中的字段名无法对应的情况
     * 2.解决对象中的属性字段在数据表中不存在的问题
     */
    @TableId(type = IdType.AUTO)
    private BigInteger id;
    private String userName;
    @TableField(value = "password",select = false)
    //value = "password"指定数据库表中的字段名。即属性 passWord与字段password对应
    //select = false 表示在执行查询操作的时候,不查询改属性对应的数据
    private String passWord;
    private Integer age;
    private String name;
    private String email;
    @TableField(exist = false) 
    //表示这个属性,在数据库中是没有字段与之对应的
    //因此在执行更新、插入等操作时,不会操作该字段
    private String address; //address属性在数据表中是不存在的,没有字段可以跟其对应

更新操作

根据ID进行更新

        User user = new User();
        user.setUserName("zlprime");
        user.setPassWord("zlprime");
        user.setAge(18);
        user.setId(1L); //更新条件

        /*
        * public int updateById(@Param("et") T entity);
        * 将id信息封装到对象中,更新时会根据该id在数据表中查询到对应的数据行
        * 并将改行的数据更新成对象中封装的数据
        * 最后返回被影响的行数
        * */
        int result = userMapper.updateById(user);

根据条件进行更新

        User user = new User();
        user.setUserName("zlprime");
        user.setPassWord("zlprime");
        user.setAge(18);
        user.setId(1L); //更新条件
        /*
        * QueryWrapper的eq方法设置更新条件。其中第一个参数是数据表中的字段名
        * */
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("user_name","zlprime") //意思就是 user_name ='zlprime'
                .eq("password","zlprime"); //意思就是 password='zlprime'
        /*
        * 根据条件进行更新
        * public int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
        * T 表示要更新的数据
        * Wrapper<T> wrapper对象中,则封装了更新的条件
        * */
        userMapper.update(user,queryWrapper);

除了上面的QueryWrapper,Wrapper还有一个实现类是UpdateWrapper:

	UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
        updateWrapper.set("user_name","zlpriem") //通过set方法设置需要更新数据
                .eq("id",1); //通过eq方法设置更新的条件
        //由于已经将需要更新的数据封装到UpdateWrapper中了,所以update方法的第一个参数不需要再传入了。用null代替
        userMapper.update(null,updateWrapper);

QueryWrapper和UpdateWrapper的区别是,前者只设置更新条件,后者不但能设置更新条件还能封装需要更新的数据。


删除操作

根据ID进行删除

        /*
        * public int deleteById(Serializable id);
        * 根据ID删除数据,返回的是受影响的行数
        * */
        int id = userMapper.deleteById(1L);

将删除条件封装到Map集合中

	/*
        * 创建一个Map集合,将条件添加到集合中
        * */
        Map<String,Object> map = new HashMap<>();
        map.put("user_name","zlprime");
        map.put("password","zlprime");

        /*
        * public int deleteByMap(@Param("cm") Map<String, Object> columnMap);
        * 根据map集合中封装的条件去删除数据
        * 多条件之间是and关系
        * 返回的结果是受影响的行数
        * */
        int i = userMapper.deleteByMap(map);

根据Wrapper条件进行删除

将要删除的数据所要求的条件放在Wrapper对象中,再根据这个对象中的条件进行删除

 	QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("user_name","zlprime")
                .eq("name","zlprime"); //根据包装的条件进行删除

        /*
        * public int delete(@Param("ew") Wrapper<T> wrapper);
        * 返回的是受影响的行数
        * */
        int result = userMapper.delete(wrapper);

批量删除

        /*
        * public int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
        * 参数是一个集合,将要删除的id放到集合中
        * 返回的是受影响的行数
        * */
        ArrayList<Long> idList = new ArrayList<>();
        idList.add(1L);
        idList.add(2L);
        int result = userMapper.deleteBatchIds(idList);
        System.out.println(result);

查询操作

根据ID查询

        /*
        * public T selectById(Serializable id);
        * 参数是要查询的ID值
        * 查询成功返回查询的对象,查询失败返回null
        * */
        User user = userMapper.selectById(4);
        System.out.println(user);

批量查询

	/*
         * public List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
         * 参数是一个集合,将要查询的id放到集合中
         * 查询成功返回集合,失败返回null
         * */
        ArrayList<Long> idList = new ArrayList<>();
        idList.add(3L);
        idList.add(4L);
        List<User> users = userMapper.selectBatchIds(idList);
        System.out.println(users);

查询一条数据

	QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("name","王五");
        /*
        * 查询一条数据
        * public T selectOne(@Param("ew") Wrapper<T> queryWrapper);
        * 传入Wrapper包装的查询条件
        * 如果查询到一条或数据不存在则返回正常
        * 如果查询到多条则会抛出异常
        * */
        User user = userMapper.selectOne(wrapper);

查询数据的条数

        /**
         * 根据Wrapper条件,查询符合条件的数据条数
         */
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("password","123456"); //设置查询条件

        /**
         * public Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);
         * 传入条件,返回查询到的条数
         */
        Integer count = userMapper.selectCount(wrapper); 

查询数据列表

 	/**
         * 根据Wrapper条件进行批量查询
         */
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("password","123456"); //设置查询条件
        /**
         * public List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
         * 参数是Wrapper条件
         * 返回值是List集合
         */
        List<User> users = userMapper.selectList(wrapper);
        for (User user : users) {
            System.out.println(user);
        }

分页查询

使用分页查询,首先要在SpringBoot的配置类中,配置Mybatis Plus的分页插件:

    @Bean //配置分页插件
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor();
    }
	/**
         * Page类的构造方法可以传入两个参数:
         * @param current 当前页
         * @param size  每页显示的条数
         */
        Page<User> page = new Page<>(2,2);//第一页,每页显示两条数据

        /**
         * 设置查询条件
         */
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("password","123456"); //设置查询条件

        /**
         * public IPage<T> selectPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);
         * 调用selectPage方法,会返回一个IPage对象
         * 这个对象中封装了查询到的数据总条数、总页数等信息
         */
        IPage<User> iPage = userMapper.selectPage(page, wrapper);
        System.out.println("数据总页数"+iPage.getPages()); //获取总页数
        System.out.println("数据总条数"+iPage.getTotal()); //获取数据总条数
        List<User> records = iPage.getRecords();//获取符合条件的数据集合
        for (User record : records) {
            System.out.println(record);
        }
java java框架 mybatis plus
1
本文系作者 @Stone 原创发布在 zlprime。未经许可,禁止转载。
MyBatis Plus的常用配置(Spring Boot版)
上一篇
Mac M1芯片无法运行nacos 2.x版本
下一篇
评论 (0)
再想想
聚合文章
JDBC的使用总结
5月前
Centos8中安装RabbitMQ
5月前
集合之Map集合
5月前
Collections集合工具类和可变参数
5月前
相关文章
JDBC的使用总结
Centos8中安装RabbitMQ
集合之Map集合
Collections集合工具类和可变参数
简介

海边微风起,等风也等你

留言板
留言板
小伙伴们
2Broear Libra の 向往 云帆沧海 若志随笔 豆豆 Chuanbo
Copyright © 2017-2023 zlprime. 皖ICP备17019582号
  • 首页
  • 朝花夕拾
    • 摄影
    • 读书
    • 生活
    • 随笔
  • 技能分享
    • WordPress
  • 其它
    • 游记地图
    • 闲言碎语
    • 阅读书单
    • 友情链接
    • 留言板
热门搜索
  • java
  • spring
Stone
67 文章
139 评论
83 喜欢
  • 1
  • 0
  • Top