ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-07-13

2021-07-13 22:31:47  阅读:193  来源: 互联网

标签:queryWrapper 13 name QueryWrapper userMapper 查询 userList 2021 07


1Mybatis-plus

mybais-plus是面向对象思想的体现

需求:之前操作数据库采用sql(面向过程的语言)方法进行编辑,但是如果所有单表操作都由程序完成,则开发效率低,能否开发一种机制可以实现以“面向对象”的方式操作数据库

一个名词:字段(数据库列名)

使用了mp之后我们就可以取消mybatis需要的mapper映射

问题:

(1)对象与数据库的表如何实现一对一映射?

答:通过注解的方式实现了对象与表的关联@TableName

(2)对象中的属性要求与表中的字段一对一映射????如何实现?

(3)MP采用BaseMapper的方式,将公共的接口方法进行了抽取,采用泛型T的方式进行了约束

 (4)MP将用户操作的对象在底层自动的转化为sql语句

对象方法: userMapper.insert(User对象);
Sql语句: insert into demo_user(id,name…) value(100,xxx…)
步骤:
1.根据userMapper找到对应的class类型
2.根据userMapper的类型通过反射机制获取父级接口类型BaseMapper
3.找到BaseMapper类型之后,获取泛型类型 User.class
4.获取User.class之后,获取class的注解名@TableName注解.获取注解名称. 至此表名获取成功
5.根据User.class获取其中的属性名称.之后获取属性上的@TableField 获取字段名称.
6.之后利用对象的get方法获取属性的值最终实现了Sql语句的拼接过程.
7.MP将整理好的Sql交给Mybatis(jdbc)去处理. 最终实现了以对象的方式操作数据库.

2入门案例

2.1添加mybatis-plus依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.2</version>
</dependency>

2.2编辑pojo

@Data
@Accessors(chain = true)//重写set方法
//如果没有添加注解的属性值,则默认以类名当做表名(demo_user)
@TableName("demo_user")//对象与表绑定
public class DemoUser {
    @TableId(type = IdType.AUTO)//定义主键自增
   // @TableId(type = IdType.ASSIGN_UUID)//随机Hash值保证主键不重复
    private Integer id;
    //exist是否绑定字段,名称一致可以省略
//    @TableField(value = "name",exist = true)
    private String name;
    private Integer age;
    private String sex;
}

 2.3删除mybatis依赖,mybatis依赖与mybatis-plus冲突

#SpringBoot整合MybatisPlus配置
mybatis-plus:
  #定义别名包
  type-aliases-package: com.jt.pojo
  mapper-locations: classpath:/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

2.4测试

    @Test
    public void testSelect(){

        List<DemoUser> userList =
                userMapper.selectList(null);
        System.out.println(userList);
    }

 3MP常规操作
3.1 根据对象查询

    /**
     * 1.查询id=21的用户  根据ID查询数据   1条记录
     * 2.查询name="白骨精" sex=女 的用户   List
     * 知识点:
     *      1.queryWrapper  条件构造器  拼接where条件的.
     *      原则: 根据对象中不为null的属性拼接where条件
     */
    @Test
    public void testSelect(){
        //1.根据ID查询
        DemoUser user = userMapper.selectById(21);
        System.out.println(user);
        //2.根据属性查询
        DemoUser user2 = new DemoUser();
        user2.setName("白骨精").setSex("女");
        QueryWrapper<DemoUser> queryWrapper = new QueryWrapper<>(user2);
        List<DemoUser> userList = userMapper.selectList(queryWrapper);
        System.out.println(userList);
    }


3.2 条件构造器查询

说明: 如果查询条件中有特殊关系符,则使用特殊转义字符查询 代码如下.

/**
     * 需求: 查询age>18岁  并且性别为女的用户
     * Sql: select * from demo_user where age > 18 and sex="女"
     * 特殊字符:  > gt   < lt   = eq
     *           >= ge  <= le
     * 默认链接符: and
     *
     * */
    @Test
    public void testSelect2(){
        QueryWrapper<DemoUser> queryWrapper = new QueryWrapper<>();
        queryWrapper.gt("age", 18)
                    .eq("sex", "女");
        List<DemoUser> userList = userMapper.selectList(queryWrapper);
        System.out.println(userList);
    }



3.3关键字like查询

 /**
     * 练习like关键字
     *      查询name中包含"精"字的数据
     * Sql: like "%精%"
     *      以精开头    like "精%"   likeRight
     *      以精结尾    like "%精"   likeleft
      */
    @Test
    public void testSelect3(){
        QueryWrapper<DemoUser> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("name", "精");
        List<DemoUser> userList = userMapper.selectList(queryWrapper);
        System.out.println(userList);
    }


3.4 关键字OrderBy

 /**
     * 查询sex=男的数据,以id倒序排列
     * Sql: select * from demo_user where sex='男' order by id desc
     */
    @Test
    public void testSelect4(){
        QueryWrapper<DemoUser> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("sex", "男")
                    .orderByDesc("id");
        List<DemoUser> userList = userMapper.selectList(queryWrapper);
        System.out.println(userList);
    }


3.5 In关键字

/**
     * 5.查询id= 1,3,5,6,7的用户
     * Sql: select * from demo_user where id in (xxx,xx,xx)
     */
    @Test
    public void testSelect5(){
        //数组使用包装类型
        Integer[] ids = {1,3,5,6,7};
        //需要将数组转化为集合
        List idList = Arrays.asList(ids);
        QueryWrapper<DemoUser> queryWrapper = new QueryWrapper<>();
        //queryWrapper.in("id", idList);    //根据list查询 list集合功能丰富
        queryWrapper.in("id", ids); //数组必须包装类型
        List<DemoUser> userList = userMapper.selectList(queryWrapper);
        System.out.println(userList);
    }


3.6 带判断条件的查询

 /**
     * 需求: 如果根据name属性和age属性查询数据. 有时某个数据可能为null,
     *      要求动态查询!!!
     *      where name=xxx age>xxxx
     * 伪Sql: select * from demo_user
     *              where name!=null name=xxx and age!=null age>xxx
     * condition: 内部编辑一个判断的条件
     *                      如果返回值结果为true 则拼接该字段.
     *                      如果为false 则不拼接该字段
     * StringUtils.hasLength(name) 判断字符串是否有效
     */
    @Test
    public void testSelect6(){
        QueryWrapper<DemoUser> queryWrapper = new QueryWrapper<>();
        String name = "";
        int age = 18;
        queryWrapper.eq(StringUtils.hasLength(name),"name",name)
                    .gt(age>0, "age",age);
        List<DemoUser> userList = userMapper.selectList(queryWrapper);
        System.out.println(userList);
    }


3.7 查询第一列数据

/**
     * 需求: 只想查询第一列数据   selectObjs
     * 说明: queryWrapper=null 不需要where条件
     * selectObjs:
     *      1.一般根据条件查询Id的值,查询之后为后续的sql提供数据支持
     *      2. 有时用户只需要查询ID的值,并不需要其他数据项时 使用objs.
    */
    @Test
    public void testSelect7(){
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("sex","男");
        List objs = userMapper.selectObjs(queryWrapper);
        System.out.println(objs);
    }



3.8 查询指定字段的数据

/**
     * 需求: 想查询name/sex字段
     *  queryWrapper.select("name","sex"); 挑选执行字段
     */
    @Test
    public void testSelect8(){
        QueryWrapper<DemoUser> queryWrapper = new QueryWrapper();
        queryWrapper.select("name","sex");
        List objs = userMapper.selectList(queryWrapper);
        System.out.println(objs);
    }


3.9 更新数据

 /**
     * 更新数据
     *      将name="中午吃什么" 改为name="晚上吃什么"
     *      性别: 改为 其他
     * Sql:
     *      update demo_user set name="xxx",sex="其他"
     *          where name="xxxx"
     * 参数说明:
     *      1.entity 实体对象  需要修改的数据进行封装
     *      2.updateWrapper 条件构造器
     */
    @Test
    public void testSelect10(){
        DemoUser user = new DemoUser();
        user.setName("晚上吃什么").setSex("其他");
        UpdateWrapper updateWrapper = new UpdateWrapper();
        updateWrapper.eq("name", "中午吃什么");
        userMapper.update(user,updateWrapper);
    }

标签:queryWrapper,13,name,QueryWrapper,userMapper,查询,userList,2021,07
来源: https://blog.csdn.net/m0_48017688/article/details/118709449

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有