mysql resulttype_MyBatis-resultType 与 resultMap 中的几种返回类型「建议收藏」

一、返回集合1.返回JavaBean集合publicListselectMyUserByNameLike(Stringname);select*frommyuserwherenamelike#{name}测试方法publicstaticvoidmain(String[]args){SqlSessionsession=null;try{InputStreaminpu…

大家好,又见面了,我是你们的朋友全栈君。

一、返回集合

1.返回JavaBean集合

public List selectMyUserByNameLike(String name);

select * from myuser where name like #{name}

测试方法

public static voidmain(String[] args) {

SqlSession session= null;try{

InputStream inputStream= Resources.getResourceAsStream(“mybatis-config.xml”);

SqlSessionFactory sqlSessionFactory= newSqlSessionFactoryBuilder().build(inputStream);

session=sqlSessionFactory.openSession();

MyUserMapper mapper= session.getMapper(MyUserMapper.class);

List myUsers = mapper.selectMyUserByNameLike(“%a%”);

System.out.println(myUsers);

}catch(IOException e) {

e.printStackTrace();

}finally{if (session != null) {

session.close();

}

}

}

6d4bdba59052e14d16091df9dc0e4203.png

2.返回 Map 集合

select * from myuser

af90b11c4a1334f5b4fa87920a3558f4.png

二、返回 Map

1.一条记录

public Map selectMyUserById(Integer id);

select * from myuser where id = #{id}

060663513f72f834d058cc9e3216a556.png

2.多条记录,需要指定 Map 的 Key 和 Value 的类型

//指定 Map 的 Key 从记录中的 id 列获取

@MapKey(“id”)public Map selectMyUserByGtId(Integer id);

select * from myuser where id > #{id}

057b8c56200de140bf3e3fc443c680ee.png

三、返回 resultMap 自定义结果集封装

关于自动映射封装的配置

默认数据库字段与 JavaBean 对应不上时可开启驼峰命名或查询时使用别名

1.自定义 JavaBean 的封装

确认是否成功可以关掉 MyBatis 的自动映射

public MyUser selectMyUserById(Integer id);

select * from myuser where id = #{id}

b38f21e452cfc1709003969ef6dcef74.png

2.关联查询的封装,一对一,JavaBean 属性包含 JavaBean

b05dc7478e7661e0573d21d9b90e9225.png

public MyUser selectMyUserById(Integer id);

直接调用属性赋值

SELECT m.id, m.name, m.age, m.did, d.name AS dname FROM myuser m,dept d WHERE m.did = d.id AND m.id = #{id}

2a4e155940f608e00203c60b3813e3cf.png

使用 association

SELECT m.id, m.name, m.age, m.did, d.name AS dname FROM myuser m,dept d WHERE m.did = d.id AND m.id = #{id}

使用 association 二次查询,即有两条 SQL

SELECT * FROM myuser WHERE id = #{id}

/p>

PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”

“http://mybatis.org/dtd/mybatis-3-mapper.dtd”>

select * from dept where id = #{id}

7f99b1110bd267c7d5f6cae2d20eeaac.png

开启懒加载:在没有使用 Dept 的属性时,则只会加载 MyUser 的属性。即只会发送一条 SQL 语句,要使用 Dept 属性时才会发送第二条 SQL。不会一次性发送两条 SQL

3.关联查询的封装,一对多,JavaBean 属性包含 JavaBean 的集合

1193fcc8a4edfe9e520d955164dff06b.png

使用 association

public Dept getDeptById(Integer id);

SELECT m.id,m.name,m.age,m.did,d.name AS dname FROM myuser m,dept d WHERE m.did = d.id AND d.id = #{id}

f65eaf779c06464d59cdc493a16f27fa.png

关闭懒加载,使用二次查询

public Dept getDeptByIdStep(Integer did);

select * from dept where id = #{id}

public List selectMyUserByDid(Integer dId);

select * from myuser where dId = #{did}

e7abb1518dd35bc89f2a46875f8114d9.png

4.鉴别器 discriminator

SELECT * FROM myuser WHERE id = #{id}

select * from dept where id = #{id}

2f8ada759e8c291e46eed92484988a67.png

16915c2740532c941e0703196efb595b.png

上面测试中使用的实体类与数据

public classDept {privateInteger id;privateString name;private List myUsers;

public classMyUser {privateInteger id;privateString name;privateInteger age;private Dept dept;

26c1d7f7fc944b9554f0239c7e3c63ec.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128908.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 打造一个红旗(redflag)Linux的基础镜像(base image)「建议收藏」

    打造一个红旗(redflag)Linux的基础镜像(base image)「建议收藏」起因由于工作原因,想找一个红旗Linux的基础镜像(baseimage)。网上搜了一下,但没有现成的。起初是想找对应的centos版本来代替,但又怕有些莫名其妙的问题。官方文档不过搜索过程中,

  • Android – 位置定位(Location)服务(Service)类的基本操作「建议收藏」

    Android – 位置定位(Location)服务(Service)类的基本操作

  • Snapde和常用的CSV文件编辑器对比

    Snapde和常用的CSV文件编辑器对比Snapde,一个专门为编辑超大型数据量CSV文件而设计的单机版电子表格软件;它运行的速度非常快,反应非常灵敏。CSV是一种用逗号分隔列、回车分割行的文本文件,市面上常用的CSV编辑软件有:Snapde、Ron’sEditor、CSVEditorPro、DMcsvEditor、CSVPad、CSVed、CSVFileView、KillinkCSVEditor、CSVBuddy、Me…

  • verilog流水线设计代码_流水线cpu设计verilog

    verilog流水线设计代码_流水线cpu设计verilog介绍定义:流水线设计就是将组合逻辑分割,并在各级之间插入寄存器,暂存中间数据的方法。以面积换速度。优点:每一部分延时降低——可用更快的时钟;大部分电路同时运算——提高数据吞吐率。缺点:增加面积;流水线并不减小单个数据操作的时间,减小的是整个数据流的操作时间;(不懂)功耗增加,硬件复杂度增加,特别对于复杂逻辑如cpu的流水线而言,流水越深,发生需要hold流水线或reset流水线的情况时,时间损失越大。所以使用流水线并非有利无害,大家需权衡考虑。应用场景:1)组合逻辑太长,

  • [JAVA]定时任务之-Quartz使用篇

    [JAVA]定时任务之-Quartz使用篇定时任务之-Quartz使用篇        Quartz是OpenSymphony开源组织在Jobscheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或EJBs。官方网站:http://www.opensymphon

  • apache ant安装和build.xml

    apache ant安装和build.xml

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号