mybatis-plus常用方法

实体类
//lombok注解是编译期有效
@Data   //动态添加get/set/toString/equals等方法
@AllArgsConstructor //添加构造方法
@NoArgsConstructor   //添加无参构造
@Accessors(chain = true)  //引入链式加载方式  重写set方法
//设置表名 参数也能删
@TableName("user")
//实体类 实现序列化 是因为 要通过网络传输或者io流的输入输出就需要序列化
public class User implements Serializable {
    private static final long serialVersionUID = 966119419375497297L;
    //常用的IdType.AUTO  数据库ID自增 该类型请确保数据库设置了 ID自增 否则无效
    // 其次IdType.ASSIGN_UUID 分配UUID   主键不需要赋值可以写IdType.NONE
    //指定主键并且指定主键的生成策略
    @TableId(type = IdType.AUTO)
    private Integer id;

    /**
     *
     * @TableField 单独只有注解 表示数据库表中一定有这个字段
     * @TableField(exist = false) 表示数据库表中没有这个字段  一般用在关联查询时的关联对象上
     */
    //规则:如果字段名称与属性一致(包含驼峰规则)则可以省略不写
    @TableField(fill = FieldFill.INSERT) //省略后,程序自动配置
    private String name;
    private Integer age;
    private String sex;

    /**
     * @Accessors 引入链式加载  就是重写set方法
     *                  调用时可以连续的 . 连续调用set方法
     * User user=new User();
     * user.setId(1).setName("张三").
     */
    //重写后有返回值
//    public User setId(Integer id) {
//        this.id = id;
//        return this;
//    }
}

接口
@Mapper //为接口创建代理对象 交给spring管理
//注意事项~!!!!   继承父级接口时必须添加泛型
public interface UserMapper extends BaseMapper<User> {

    //查询全部用户数据  注解方式或xml映射文件方式
    List<User> findAll();

    @Select("select * from user where name=#{name}")
    User selectUserByUsername(String name);

}
测试类
//mybatisplus就是以对象的方式操作数据库
@SpringBootTest  //当程序执行@Test方法时,会先启动springBoot的容器实例化对象,.之后程序调用
class SpringbootDemo2ApplicationTests {

    //动态注入mapper接口的实例对象 代理对象  cgblib  jdk
    @Autowired    //依赖注入 1.按照类型注入   2.按照名称注入
    //@Qualifier("注入属性的名称")
    private UserMapper userMapper;

    @Test
    public void testMybatis() {
        //springboot中动态代理就算实现接口他底层也用的是CGLIB
        //整合mybatis mybatis的代理方式还是jdk
        System.out.println("输入代理对象的类型:"+userMapper.getClass()+"JDK代理");
        List<User> userList = userMapper.findAll();
        System.out.println(userList);
    }
1.查询所有 selectList(null)
@Test
    public void testMP(){
        //几乎单表不写sql      查询所有的user表数据 不写where条件
        List<User> userList = userMapper.selectList(null);
        System.out.println(userList);
    }
2.插入数据 insert(对象)
@Test
    public void insert(){
        User user= new User();
        user.setName("测试myplus").setAge(10).setSex("男");
        userMapper.insert(user);
        //准备好了入库的模板
        //通过反射机制拿到类上面的注解参数(user表名) 之后再拿到(类中属性)
        //                          传进insert方法中的对象通过get完成value赋值
//        TableName tableName = user.getClass().getAnnotation(TableName.class);
//        System.out.println(tableName.value());
//        user.getClass().getFields( );

    }
3.根据ID查询 selectById(id)
/**
     * 1.根据Id查询数据id=5的用
     * 2.根据name=”唐僧”age=30   sql: where name=xxx and age=xXX
     */
    @Test
    public void testSelect01(){
        User user = userMapper.selectById(5);
        System.out.println(user);
    }
4.根据条件查询
@Test
    public void testSelect01(){
        User u=new User();
        u.setName("唐僧").setAge(30);
        //QueryWrapper条件构造器 动态拼接where条件
        // 原则:根据对象中不为null的属性动态拼接where条件
        QueryWrapper<User> queryWrapper = new QueryWrapper<User>(u);
        //Sql: select xxx,xxx,xxx from user where name="唐僧" and age=30
        User user1 = userMapper.selectOne(queryWrapper);
        System.out.println(user1);
    }
5.= , > , < , <=, >= 条件查询
/**
     * 需求: 查询age>18的 性别为女的用户  sex="女"
     * 特殊符号: 字段左侧 > gt   < lt  = eq
     *            >= ge       <= le
     */
    @Test
    public void testSelect2(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.gt("age", 18);
        queryWrapper.gt("sex","女");
        List<User> list = userMapper.selectList(queryWrapper);
        System.out.println(list);
    }
6.模糊查询 like(字段, 模糊条件)
/**
     * 模糊查询名字带"精" 性别为"女"的用户
     */
    @Test
    public void testSelect3(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        //like %精%   likeLeft %精  likeRight 精%
        queryWrapper.like("name", "精");
        queryWrapper.eq("sex", "女");
        List<User> list = userMapper.selectList(queryWrapper);
        System.out.println(list);
    }
7.not null和order by查询
/**
     *案例4:要求age>18岁,并且name字段不为null的用户.按照年龄降序排列.
     */
    @Test
    public void testselect04() {
     QueryWrapper<User> querywrapper = new QueryWrapper<>();
        querywrapper.gt("age",18);
        querywrapper.isNotNull("name");
        querywrapper.orderByDesc("age" );
     List<User> userList = userMapper.selectList(querywrapper);
        System.out.println(userList);
     }
8.查询条件中判空 gt(判空条件,字段,参数),eq(判空条件,字段,参数)…
/**
     * 案例5:
     *   查询用户信息﹑有2个参数,但是2个参数可能部分为null动态查询
     *   根据sex和age查询sex和 age 可能为null???
     */
    @Test
    public void testSelect4(){
        User user=new User();

        user.setAge(18);
        user.setSex("女");
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.gt(user.getAge()!=null && user.getAge()>0,
                     "age", user.getAge())
                .eq(user.getSex()!=null && !"".equals(user.getSex()),
                        "sex", "女");
        List<User> userList = userMapper.selectList(queryWrapper);
        System.out.println(userList);
    }
9.子查询  selectBatchIds(数组)   in(字段 ,数组)
/**
     * 查询id为 1,3,5,6,7的用户
     */
    @Test
    public void testSelect06( ){
        //规则:如果数组需要转化集合则使用包装类型
        Integer[] ids = {1,3,5,6,7};
        //将数组转化为集合
        List<Integer> idList = Arrays.asList(ids ) ;
        QueryWrapper querywrapper = new QueryWrapper();
        querywrapper.in("id" ,idList);
        List<User> userList = userMapper.selectList(querywrapper );
        System.out.println(userList);

        //方法2
        List<User> userList2 = userMapper.selectBatchIds(idList);
        System.out.println(userList2);
    }
10 删除(条件删除)
/**
     * 删除name=null的用户
     */
    @Test
    public void deletetest(){
        QueryWrapper queryWrapper=new QueryWrapper();
        queryWrapper.isNull("name");
        userMapper.delete(queryWrapper);
        System.out.println("删除成功");
    }
11 修改 update
/**
     * 修改数据
     */
    @Test
    public void updateTest(){
        User user=new User();
        user.setId(53).setName("springboot").setAge(1000);
        //Sql: update user set name="xxx",age=18,sex="xx" where id=x
        //Sql形成的原则  根据对象中不为null的属性当做set条件 并且将id当做where的条件
        userMapper.updateById(user);


        User userTemp=new User();
        userTemp.setAge(100).setSex("其他");
        QueryWrapper queryWrapper=new QueryWrapper();
        queryWrapper.eq("name", "springboot");
        userMapper.update(userTemp, queryWrapper);

    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值