MyBatisPlus

MyBatisPlus

一、介绍:

MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提升效率而生。

在这里插入图片描述

二、为什么使用MyBatis-Plus?

使用MyBatis或者是其他的持久层框架或技术实现CRUD操作,逻辑思路简单,但操作实现繁琐,如果大量的重复代码由程序媛来实现,未免有些影响效率,所以我们使用MyBatisPlus这种简化开发的工具来帮助我们快速开发

注意:MyBatisPlus主要完成单表的CRUD操作简化开发

三、MyBatis-plus入门

实现步骤:

  1. 导入MyBatis-plus的jar包文件
  2. 思想:使用对象的方式操作数据库
  3. 编辑pojo实现对象与数据表的映射关系
  4. 继承公共的接口(BaseMapper),获取常用的CRUD操作
  5. 实现数据库操作
导入jar包文件:
 <!--spring整合mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>
编辑pojo类:
//注解的作用:动态的生成get/set/toString...方法
@Data   //一般为属性赋值get/set方法
@Accessors(chain = true)    //开启链式加载(重写set方法)
@NoArgsConstructor  //无参构造
@AllArgsConstructor //全参构造
@TableName("demo_user")
public class User {

    @TableId(type = IdType.AUTO)
    private Integer id;
//    @TableField("name")
    private String name;
    private Integer age;
    private String sex;

}

注意: 1、pojo类应该与数据库中的表完成映射(@TableName(“demo_user”) //实现对象与表名映射)

​ 2、pojo中的属性与表中的字段一一映射

​ 使用注解:设定主键自增 @TableId(type = IdType.AUTO)

​ @TableField(“name”) 实现属性与字段映射.(如果属性与字段的名称一致,则注解可以省略)

继承公共的接口(BaseMappper<pojo类>):
public interface UserMapper extends BaseMapper<User> {
    //查询所有的user表数据
    List<User> findAll();
}

注意: 继承接口之后,必须添加泛型对象,否则程序无法执行

​ 父类中的接口:MyBatis-Plus将常用的CRUD的方法进行了抽取,以后自雷如果需要调用,则直接使用即可

在这里插入图片描述

MyBatis-Plus生效配置:

注意:如果之前你使用的是MyBatis,那就可以直接在后面加个-plus即可

#SpringBoot整合MyBatisPlus
mybatis-plus:
  #设置别名包
  type-aliases-package: com.jt.pojo
  #加载映射文件
  mapper-locations: classpath:/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true
#打印Sql语句
logging:
  level:
    com.jt.mapper: debug
#未来只要这个包下的sql执行,就会以debug的形式打印日志
实现数据库操作:
//思想:以对象的形式操作数据库,单表几乎
    @Test
    public void testInsert(){
        User user=new User();
        user.setName("MP").setAge(19).setSex("其他");
        userMapper.insert(user);
    }

在这里插入图片描述

MP工作原理:

核心思想:以对象的方式操作数据库
配置:

​ 1、编辑POJO与数据表的映射

​ 2、编辑POJO属性与表字段映射

​ 3、封装了大量的常用CRUD API 简化用户调用

​ 4、根据对象动态的生成Sql语句

执行过程:

​ 1、程序业务开始调用userMapper.insert(user)

​ 2、根据Mapper接口动态获取操作的泛型,获取对象之后获取表的相关数据

​ public interface UserMapper extends BaseMapper获取这个泛型

​ 3、只要获取对象 获取了表名称,字段名称,数据的值

​ 4、将对象转化为特定的Sql,之后交给MyBatis执行

MP常用操作:
  1. 根据ID查询:
    //1.根据ID查询
        @Test
        public void selectById(){
            User user = userMapper.selectById(1);
            System.out.println(user);
        }
    
  2. selectList查询:
    //2.查询name="小乔" sex="男"的用户
        public void testSelect2(){
            User user=new User();
            user.setName("小乔").setSex("男");
            //实现会动态的根据对象中不为null的属性,拼接where条件
            //条件构造器默认的管理连接符是and
            QueryWrapper<User> userQueryWrapper = new QueryWrapper<>(user);
            List<User> userList = userMapper.selectList(userQueryWrapper);
            System.out.println(userList);
        }
    
    //3.查询name="小乔" sex="男"的用户
        public void testSelect3(){
            QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
            userQueryWrapper.eq("name", "小乔").eq("sex", "男");
            List<User> userList = userMapper.selectList(userQueryWrapper);
            System.out.println(userList);
        }
    
    //4.查询 age> 18 sex="女"的用户
        public void testSelect4(){
            QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
            //逻辑运算符: > gt, < lt, = eq, >= ge, <= le, != ne
            userQueryWrapper.gt("age", 18).eq("sex", "女");
            List<User> userList = userMapper.selectList(userQueryWrapper);
            System.out.println(userList);
        }
    
  3. selectList查询–like关键字(%号在左边就是leftLike,%在右边就是rightLike,两边都有%就是like)
    //5. like关键字
        //5.1 查询name包含"乔" where name like '%乔%'
        //5.2 查询name以乔结尾的 where name like '%乔'
        @Test
        public void testSelect5(){
            QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
            userQueryWrapper.like("name", "乔");
            List<User> userList = userMapper.selectList(userQueryWrapper);
            System.out.println(userList);
            userQueryWrapper.clear();
            userQueryWrapper.likeLeft("name", "乔");
            List<User> userList1 = userMapper.selectList(userQueryWrapper);
            System.out.println(userList1);
        }
    
  4. selectList查询–in关键字(两个方法,一个是可变参数,一个是数组集合)
    //6. in 关键字
        //需求: 查询ID为1,3,5,6的数据
        @Test
        public void testSelect6(){
            QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
            //可变参数
            userQueryWrapper.in("id", 1,3,5,6);
            List<User> userList = userMapper.selectList(userQueryWrapper);
            System.out.println(userList);
        }
    
    	@Test
        public void testSelect6(){
            QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
            //一般的数组采用包装类型,使用对象身上的方法,基本类型没有方法
            Integer[] arr={1,3,5,6};
            userQueryWrapper.in("id",arr);
            List<User> userList = userMapper.selectList(userQueryWrapper);
            System.out.println(userList);
        }
    
  5. selectList查询–order by
    	//7.关键字: order by  排序
    	//默认规则:升序asc	如果想要降序desc
    	//需求: 查询性别为男的用户并且 按照年龄降序排列.	
    	@Test
        public void testSelect7(){
            QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
            userQueryWrapper.eq("sex", "男").orderByDesc("age");
            List<User> userList = userMapper.selectList(userQueryWrapper);
            System.out.println(userList);
        }
    
  6. selectList查询–动态Sql
    	/**
         * 动态Sql:
         *  根据用户的条件,动态的拼接where条件
         *  案例: 根据sex,age查询数据
         *  1.select * from demo_user where age > 18 and sex="女"
         *  API说明:
         *      queryWrapper.gt(判断条件,字段名称,字段值)
         *      判断条件: true  则动态的拼接where条件
         *               false 不会拼接where条件
         *  判断语句:
         *       Boolean sexBoo = (sex !=null) && sex.length()>0;
         */
    	@Test
        public void testSelect8(){
            String sex="男";
            Integer age=20;
            QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
            //判断参数是否存在
            Boolean sexBoo=StringUtils.hasLength(sex);
            Boolean ageBoo=(age!=null);
            // age > 18 and sex="女"
            userQueryWrapper.gt(ageBoo, "age", 18).eq(sexBoo, "sex", sex);
            List<User> userList = userMapper.selectList(userQueryWrapper);
            System.out.println(userList);
        }
    
  7. selectList查询–objs
    /**
         * 练习9: 只获取主键ID的值
         * Sql: select id from demo_user
         */
        @Test
        public void testSelect9(){
            //注意:如果我们将这里的泛型修改,会导致这里报错,因为在java中只能向上造型,没有向下造型,selectObjs方法的返回值是Object类型
            List<Object> ids = userMapper.selectObjs(null);
            System.out.println(ids);
        }
    
  8. 删除操作
    	/**
         * 练习10: 删除name="xxx"的数据
         */
        @Test
        public void testDelete(){
            //删除操作的条件构造器
            QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
            userQueryWrapper.eq("name", "小乔");
            userMapper.delete(userQueryWrapper);
    
            userQueryWrapper.clear();
            //删除ID为100的数据
            userMapper.deleteById(100);
        }
    
  9. 更新操作–byId
    /**
         * 练习11: 数据修改
         * 案例1:  要求修改id=233 name改为="晚上吃什么"
         * API说明: userMapper.updateById(对象信息)
         */
        @Test
        public void testUpdate1(){
            User user=new User();
            user.setId(233).setName("晚上吃什么");
            //修改除ID之外的所有不为null的数据,id作为where的唯一条件
            userMapper.updateById(user);
        }
    
  10. 更新操作–任意字段
    	/**
         * 练习12: 数据修改
         * 案例2:  将name=mp的用户改为name="宵夜吃什么" age=20 sex=女
         * API说明:
         *         userMapper.update(对象,修改条件构造器)
         *         对象: 修改后的数据使用对象封装
         *         修改条件构造器: 负责修改的where条件
         */
        @Test
        public void testUpdate2(){
            QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
            userQueryWrapper.eq("name", "夜宵吃什么");
            User user=new User();
            user.setAge(20).setSex("女");
            userMapper.update(user,userQueryWrapper);
        }     
    
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值