首页 > 作文

mybaties plus selectMaps和selectList的区别说明

更新时间:2023-04-04 04:15:58 阅读: 评论:0

目录
lectmaps和lectlist的区别mybaties plus之lectmaps、lectobjs、lectcount、lectone的用法lectmapslectobjslectcountlectone

lectmaps和lectlist的区别

lectlist查询部分字段,会返回所有的,没查询的值为null

lectmaps 只会返回你查询的。

mybaties plus之lectmaps、lectobjs、lectcount、lectone的用法

首先创建一个数据库表,如下图所示:

然后创建一个spring boot项目,pom.xml和配置如下:

<?xml version="1.0" encoding="utf-8"?><project xmlns="http://maven.apache.org/pom/4.0.0"         xmlns:xsi="/d/file/titlepic/xmlschema-instance"         xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelversion>4.0.0</modelversion>    <groupid>org.kaven</groupid>    <artifactid>mybatis-plus</artifactid>    <version>1.0-snapshot</version>    <parent>        <groupid>org.springframework.boot</groupid>        <artifactid>spring-boot-starter-parent</artifactid>        <version>2.3.4.relea</version>        <relativepath/>    </parent>    <properties>        <java.version>1.8</java.version>    </properties>    <dependencies>        <dependency>            <groupid>org.springframework.boot</groupid>            <artifactid>spring-boot-starter</artifactid>        </dependency>        <dependency>            <groupid>org.springframework.boot</groupid>            <artifactid>spring-boot-starter-test</artifactid>        </dependency>        <dependency>            <groupid>org.springframework.boot</groupid>            <artifactid>spring-boot-starter-webflux</artifactid>        </dependency>        <dependency>            <groupid>com.baomidou</groupid>            <artifactid>mybatis-plus-boot-starter</artifactid>            <version>3.4.0</version>        </dependency>        <dependency>            <groupid>mysql</groupid>            <artifactid>mysql-connector-java</artifactid>            <version>5.1.49</version>        </dependency>        <dependency>            <groupid>org.projectlombok</groupid>            <artifactid>lombok</artifactid>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupid>org.springframework.boot</groupid>                <artifactid>spring-boot-maven-plugin</artifactid>            </plugin>        </plugins>    </build></project>
spring:  application:    name: mybatis-plus  datasource:    driver-class-name: com.mysql.jdbc.driver    urname: root    password: itkaven@123    url: jdbc:mysql://127.0.0.1:3306/test?characterencoding=utf-8&ussl=falrver:  port: 8085logging:  level:    root: warn    com.kaven.mybatisplus.dao: trace  pattern:    console: '%p%m%n'mybatis-plus:  mapper-locations: classpath:mappers/*.xml

实体类ur:

package com.kaven.mybatisplus.entity;import com.baomidou.mybatisplus.annotation.tablefield;import com.baomidou.mybatisplus.annotation.tableid;import com.baomidou.mybatisplus.annotation.tablename;import lombok.data;@tablename("ur")@datapublic class ur {    @tableid    private string id;    @tablefield("urname")    private string urname;    @tablefield("password")    private string password;    @tablefield("age")    private integer age;    /**     * 使用 @tablefield(exist = fal) ,表示该字段在数据库中不存在 ,所以不会插入数据库中     * 使用 transient 、 static 修饰属性也不会插入数据库中     */    @tablefield(exist = fal)    private string phone;}

mapper接口urmapper:

package com.kaven.mybatisplus.dao;import com.baomidou.mybatisplus.core.mapper.bamapper;import com.kaven.mybatisplus.entity.ur;import org.springframework.stereotype.component;@componentpublic interface urmapper extends bamapper<ur> {}

启动类:

package com.kaven.mybatisplus;import org.mybatis.spring.annotation.mapperscan;import org.springframework.boot.springapplication;import org.springframework.boot.autoconfigure.springbootapplication;@springbootapplication@mapperscan(bapackages = "com.kaven.mybatisplus.dao")public class apprun {    public static void main(string[] args) {        springapplication.run(apprun.class , args);    }}

@mapperscan(bapackages = “com.kaven.mybatisplus.dao”)这个一定要加上。

我们先在数据库中添加几行数据,方便演示。

lectmaps

来看一下源码:

    /**     * 根据 wrapper 条件,查询全部记录     *     * @param querywrapper 实体对象封装操作类(可以为 null)     */    list<map<string, object>> lectmaps(@param(constants.wrapper) wrapper<t> querywrapper);

方法返回list<map<string, object>>类型的值,它的应用场景就是当我们只需要对象的一小部分属性或者对象没有的属性时,这种方法就显得很有用了。

我们先不使用lectmaps来实现一下只需要对象的一部分属性。

package com.kaven.mybatisplus.dao;import com.baomidou.mybatisplus.core.conditions.query.querywrapper;import com.baomidou.mybatisplus.core.toolkit.wrappers;import com.kaven.mybatisplus.entity.ur;import org.junit.test;import org.junit.runner.runwith;import org.springframework.beans.factory.annotation.autowired;import org.springframework.boot.test.context.springboottest;import org.springframework.test.context.junit4.springrunner;import java.util.hashmap;import java.util.list;import java.util.map;@runwith(springrunner.class)@springboottestpublic class urmappermapstest {    @autowired    private urmapper urmapper;    @test    public void lectlist(){        querywrapper<ur> urquerywrapper = wrappers.query();        urquerywrapper.lect(ur.class , e -> !e.getcolumn().equals("password")).lt("age" , 50);        list<ur> urlist = urmapper.lectlist(urquerywrapper);        urlist.foreach(system.out::println);    }}

结果如下:

结果虽然是正确的,但输出的ur数据中有为null的属性,当不需要的属性比较多时,这种方法就不太好。

使用lectmaps来实现一下只需要对象的一部分属性。

package com.kaven.mybatisplus.dao;import com.baomidou.mybatisplus.core.conditions.query.querywrapper;import com.baomidou.mybatisplus.core.toolkit.wrappers;import com.kaven.mybatisplus.entity.ur;import org.junit.test;import org.junit.runner.runwith;import org.springframework.beans.factory.annotation.autowired;import org.springframework.boot.test.context.springboottest;import org.s古典文学名著pringframework.test.context.junit4.springrunner;import java.util.hashmap;import java.util.list;import java.util.map;@runwith(springrunner.class)@springboottestpublic class urmappermapstest {    @autowired    private urmapper urmapper;    @test    public void lectmaps(){        querywrapper<ur> urquerywrapper = wrappers.query();        urquerywrapper.lect(ur.class , e -> !e.getcolu奥运会美国vs西班牙mn().equals("password")).lt("age" , 50);        list<map<string , object>> maplist = urmapper.lectmaps(urquerywrapper);        maplist.foreach(system.out::printl设计行业n);    }}

结果如下:

结果也是正确的,并且没有那些为null的属性值。

再来演示一下lectmaps怎么返回给我们实体类中不存在的属性。

以age进行分组,并且每组age和要小于60,输出平均age、最大age、最小age。

这个例子可能不太好,但能体现出lectmaps的方便之处,因为平均age、最大age、最小age是ur实体类中没有的属性。

package com.kaven.mybatisplus.dao;import com.baomidou.mybatisplus.core.conditions.query.querywrapper;import com.baomidou.mybatisplus.core.toolkit.wrappers;import com.kaven.mybatisplus.entity.ur;import org.junit.test;import org.junit.runner.runwith;import org.springframework.beans.factory.annotation.autowired;import org.springframework.boot.test.context.springboottest;import org.springframework.test.context.junit4.springrunner;import java.util.hashmap;import java.util.list;import java.util.map;@runwith(springrunner.class)@springboottestpublic class urmappermapstest {    @autowired    private urmapper urmapper;    @test    public void lectmaps2(){        querywrapper<ur> urquerywrapper = wrappers.query();        urquerywrapper.lect("avg(age) avg_age" , "min(age) min_age" , "max(age) max_age")                        .groupby("age")                        .having("sum(age) < {0}" , 60);        list<map<string , object>> maplist = urmapper.lectmaps(urquerywrapper);        maplist.foreach(system.out::println);    }}

结果如下:

结果是正确的,可以看一下输出的sql语句。

lectobjs

看一下源码:

    /**     * 根据 wrapper 条件,查询全部记录     * <p>注意: 只返回第一个字段的值</p>     *     * @param querywrapper 实体对象封装操作类(可以为 null)     */    list<o高一作文题目bject> lectobjs(@param(constants.wrapper) wrapper<t> querywrapper);

从源码的注释中可以看到注意: 只返回第一个字段的值这句话,我们来演示一下该方法就能明白这句话了。

package com.kaven.mybatisplus.dao;import com.baomidou.mybatisplus.core.conditions.query.querywrapper;import com.baomidou.mybatisplus.core.toolkit.wrappers;import com.kaven.mybatisplus.entity.ur;import org.junit.test;import org.junit.runner.runwith;import org.springframework.beans.factory.annotation.autowired;import org.springframework.boot.test.context.springboottest;import org.springframework.test.context.junit4.springrunner;import java.util.hashmap;import java.util.list;import java.util.map;@runwith(springrunner.class)@springboottestpublic class urmapperothertest {    @autowired    private urmapper urmapper;    @test    public void lectobjs(){        querywrapper<ur> urquerywrapper = wrappers.query();        urquerywrapper.lect("urname" , "age").likeright("urname","k").le("age" , 30);        list<object> objectlist = urmapper.lectobjs(urquerywrapper);        objectlist.foreach(system.out::println);    }}

结果如下:

很显然,结果是正确的,并且只返回了urname。

lectcount

看一下源码:

    /**     * 根据 wrapper 条件,查询总记录数     *     * @param querywrapper 实体对象封装操作类(可以为 null)     */    integer lectcount(@param(constants.wrapper) wrapper<t> querywrapper);

该方法其实就是返回符合条件的记录数。

我们来演示一下。

package com.kaven.mybatisplus.dao;import com.baomidou.mybatisplus.core.conditions.query.querywrapper;import com.baomidou.mybatisplus.core.toolkit.wrappers;import com.kaven.mybatisplus.entity.ur;import org.junit.test;import org.junit.runner.runwith;import org.springframework.beans.factory.annotation.autowired;import org.springframework.boot.test.context.springboottest;import org.springframework.test.context.junit4.springrunner;import java.util.hashmap;import java.util.list;import java.util.map;@runwith(springrunner.class)@springboottestpublic class urmapperothertest {    @autowired    private urmapper urmapper;    @test    public void lectcount(){        querywrapper<ur> urquerywrapper = wrappers.query();        urquerywrapper.likeright("urname","k").le("age" , 30);        integer count = urmapper.lectcount(urquerywrapper);        system.out.println(count);    }}

结果如下:

结果也是正确的。

lectone

也来看一下源码:

    /**     * 根据 entity 条件,查询一条记录     *     * @param querywrapper 实体对象封装操作类(可以为 null)     */    t lectone(@param(constants.wrapper) wrapper<t> querywrapper);

这个方法会返回一个实体,所以,如果有多条数据匹配的话,就会报错。

我们来演示一下报错的情况。

package com.kaven.mybatisplus.dao;import com.baomidou.mybatisplus.core.conditions.query.querywrapper;import com.baomidou.mybatisplus.core.toolkit.wrappers;import com.kaven.mybatisplus.entity.ur;import org.junit.test;import org.junit.runner.runwith;import org.springframework.beans.factory.annotation.autowired;import org.springframework.boot.test.context.springboottest;import org.springframework.test.context.junit4.springrunner;import java.util.hashmap;import java.util.list;import java.util.map;@runwith(springrunner.class)@springboottestpublic class urmapperothertest {    @autowired    private urmapper urmapper;    @test    public void lectoneerror(){        querywrapper<ur> urquerywrapper = wrappers.query();        urquerywrapper.like("urname","k");        ur ur = urmapper.lectone(urquerywrapper);        system.out.printl部编版四年级下册语文电子课本n(ur);    }}

报错如下:

再来演示一下正确的情况。

package com.kaven.mybatisplus.dao;import com.baomidou.mybatisplus.core.conditions.query.querywrapper;import com.baomidou.mybatisplus.core.toolkit.wrappers;import com.kaven.mybatisplus.entity.ur;import org.junit.test;import org.junit.runner.runwith;import org.springframework.beans.factory.annotation.autowired;import org.springframework.boot.test.context.springboottest;import org.springframework.test.context.junit4.springrunner;import java.util.hashmap;import java.util.list;import java.util.map;@runwith(springrunner.class)@springboottestpublic class urmapperothertest {    @autowired    private urmapper urmapper;    @test    public void lectone(){        querywrapper<ur> urquerywrapper = wrappers.query();        urquerywrapper.like("urname","kaven");        ur ur = urmapper.lectone(urquerywrapper);        system.out.println(ur);    }}

结果如下:

结果是正确的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。

本文发布于:2023-04-04 04:15:54,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/73e8149f6b36f45e116a3af31dac02ca.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:mybaties plus selectMaps和selectList的区别说明.doc

本文 PDF 下载地址:mybaties plus selectMaps和selectList的区别说明.pdf

标签:属性   实体   对象   正确
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图