框架——MyBatis查询(单表查询,多表联查)

2024-08-24 01:04

本文主要是介绍框架——MyBatis查询(单表查询,多表联查),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.单表查询

 2.多表查询

想查询student并且查询student所选择的专业major

①通过id查一个

②不传入值直接查所有的学生列表

 ③嵌套查询

想查询专业major并且查询该专业被哪些学生student选择

①通过id查一个

 ②不传入值直接查所有的专业列表

 ③嵌套查询

3. 设置自动映射级别

4.注解


1.单表查询

 在AdminDao类中写该方法

//根据id查询管理员对象
Admin findAdminById(int id);

 在AdminMapper.xml文件中写相应的SQL语句 

<select id="findAdminById" parameterType="int" resultType="Admin">select * from admin where id = #{id}</select>

 在测试类的main方法中调用该方法,传入想要查询的管理员的信息(比如我们要查询id=1的管理员的信息)

此时数据库中id=1的数据如下 

结果查询正确 

若此时在数据库中新增一列admin_age年龄,在idea的Admin方法中新增一个adminAge的属性,则查询时不会查询出adminAge的值,因为数据库和java对于年龄的命名方式不同,他们两个都严格使用了他们的命名规范,所以怎么解决这一问题呢?

如果java中使用 标准驼峰命名 ,数据库中使用 下划线连接命名 ,可以开始全局设置实现自动转换
<setting name="mapUnderscoreToCamelCase" value="true"/>

 在mybatis.xml文件中配置全局设置实现自动转换,这样就可以解决命名的问题啦

此时数据库中id=1的数据如下  

 

 结果查询正确 ,包含年龄的值

 2.多表查询

在mysql中创建两张表,一个student学生表,一个major专业表,想要通过传入学生student的id来查询学生的姓名、性别、学号和该学生选择的专业

接着在idea中创建studentmajor类,在两个类中设置相关的属性,并生成set,get方法

其中Student类中要传入专业Major的类

 Major类中要传入Student类的集合(因为一个专业可以被多个学生选,而一个学生只能选择一个专业)

 


 接着还是环境的搭建的步骤:

具体可以看我之前写过的文章http://t.csdnimg.cn/pl52Kicon-default.png?t=N7T8http://t.csdnimg.cn/pl52K


在dao包下创建StudentDao接口,创建对应的sql映射文件StudentMapper.xml,并配置接口地址到映射文件StudentMapper.xml(其他的基本和之前创建的AdminMapper.xml文件一样)

在mybatis.xml文件配置sql映射文件 

 接着就可以写方法进行查询了操作啦! ! !

想查询student并且查询student所选择的专业major

①通过id查一个

 在StudentDao类中写该方法

//通过id查一个
Student findStudentById(int id);

 在StudentMapper.xml文件中写相应的SQL语句 

因为是多表查询所以不用再传入resultType了,但是要传入resultMap来手动设置映射,这样major专业的名字就可以查询到了

 <resultMap id="studentMap" type="Student"><id column="id" property="id"></id><result column="num" property="num"></result><result column="name" property="name"></result><result column="gender" property="gender"></result><association property="major" javaType="Major"><result column="mname" property="name"></result></association>
</resultMap>
<select id="findStudentById" parameterType="int" resultMap="studentMap">SELECTs.id,s.num,s.name,s.gender,m.name mnameFROM student s LEFT JOIN major m ON s.majorid = m.id WHERE s.id = #{id}</select>

  在测试类的main方法中调用该方法,传入想要查询的学生的id

多表查询的结果就出来啦!

②不传入值直接查所有的学生列表

 在StudentDao类中写该方法

//查所有
List<Student> findStudents();

  在StudentMapper.xml文件中写相应的SQL语句 

  <resultMap id="studentMap" type="Student"><id column="id" property="id"></id><result column="num" property="num"></result><result column="name" property="name"></result><result column="gender" property="gender"></result><association property="major" javaType="Major"><result column="mname" property="name"></result></association></resultMap><select id="findStudents" resultMap="studentMap">SELECTs.id,s.num,s.name,s.gender,m.name mnameFROM student s LEFT JOIN major m ON s.majorid = m.id</select>

在测试类的main方法中调用该方法

多表查询的结果就出来啦!

 ③嵌套查询

 在StudentDao类中写该方法

//嵌套查询
Student findStudentById1(int id);

  在StudentMapper.xml文件中写相应的SQL语句 

把一个关联查询,分成了两单表查询,先查询学生信息,然后通过学生专业外键查询关联的专业信息

<!--嵌套查询,把一个关联查询,分成了两单表查询,先查询学生信息,然后通过学生专业外键查询关联的专业信息--><resultMap id="studentMap1" type="Student"><association property="major" javaType="Major" select="findMajorById" column="majorid"></association></resultMap><select id="findStudentById1" parameterType="int" resultMap="studentMap1">SELECTs.id,s.num,s.name,s.gender,s.majoridFROM student s WHERE s.id = #{id}</select><select id="findMajorById" parameterType="int" resultType="Major">select name from major where id = #{id}</select>

在测试类的main方法中调用该方法,传入想要查询的学生的id

多表查询的结果就出来啦!

想查询专业major并且查询该专业被哪些学生student选择

①通过id查一个

 在MajorDao类中写该方法

//通过id查一个

Major findMajorById(int id);

 在MajorMapper.xml文件中写相应的SQL语句 

因为是多表查询所以不用再传入resultType了,但是要传入resultMap来手动设置映射,这样student学生的名字就可以查询到了

    <resultMap id="majorMap" type="Major"><id column="id" property="id"></id><result column="name" property="name"></result><collection property="students" javaType="List" ofType="Student"><result column="num" property="num"></result><result column="sname" property="name"></result></collection></resultMap><select id="findMajorById" resultMap="majorMap">SELECT m.id, m.name,s.num,s.name snameFROM major m LEFT JOIN student s ON m.id = s.majorid WHERE m.id = #{id}</select>

  在测试类的main方法中调用该方法,传入想要查询的专业的id

多表查询的结果就出来啦!

 ②不传入值直接查所有的专业列表

在MajorDao类中写该方法

//查所有
List<Student> findStudents();

在MajorMapper.xml文件中写相应的SQL语句 

    <resultMap id="majorMap" type="Major"><id column="id" property="id"></id><result column="name" property="name"></result><collection property="students" javaType="List" ofType="Student"><result column="num" property="num"></result><result column="sname" property="name"></result></collection></resultMap><select id="findMajors" resultMap="majorMap">SELECT m.id, m.name,s.num,s.name snameFROM major m LEFT JOIN student s ON m.id = s.majorid</select>

在测试类的main方法中调用该方法

多表查询的结果就出来啦!

 ③嵌套查询

在MajorDao类中写该方法

//嵌套查询

Major findMajorById1(int id);

在MajorMapper.xml文件中写相应的SQL语句 

把一个关联查询,分成了两单表查询,先查询专业信息,然后通过学生的专业外键查询关联的学生信息

<!--嵌套查询--><resultMap id="majorMap1" type="Major"><collection property="students" javaType="List" ofType="Student" select="findStudents" column="id"></collection></resultMap><select id="findMajorById1" resultMap="majorMap1">SELECT id,name FROM major WHERE id = #{id}</select><select id="findStudents" resultType="student">select num,name from student where majorid = #{id}</select>

 在测试类的main方法中调用该方法,传入想要查询的专业的id

多表查询的结果就出来啦!

3. 设置自动映射级别

NONE完全关闭自动映射

PARTIAL当查询没有嵌套查询时,会自动映射,一旦有嵌套查询就不会自动映射

FULL 无论是否有嵌套都会自动映射

mabatis官方默认给的是部分映射:PARTIAL

4.注解

是直接将SQL语句写在Dao层的方法上(推荐SQL语句比较简单的使用),这样SQL语句就不用在sql 映射文件中写了,减少了代码的冗余,更加便利简洁

常用注解标签
@Insert : 插入 sql , 和 xml insert sql 语法完全一样
@Select : 查询 sql, 和 xml select sql 语法完全一样
@Update : 更新 sql, 和 xml update sql 语法完全一样
@Delete : 删除 sql, 和 xml delete sql 语法完全一样
@Param : 入参
@Results : 设置结果集合
@Result : 结果

 就比如这样,直接将SQL写在方法上

这篇关于框架——MyBatis查询(单表查询,多表联查)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101001

相关文章

MySQL 多表连接操作方法(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)

《MySQL多表连接操作方法(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLOUTERJOIN)》多表连接是一种将两个或多个表中的数据组合在一起的SQL操作,通过连接,... 目录一、 什么是多表连接?二、 mysql 支持的连接类型三、 多表连接的语法四、实战示例 数据准备五、连接的性

MySQL中的分组和多表连接详解

《MySQL中的分组和多表连接详解》:本文主要介绍MySQL中的分组和多表连接的相关操作,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录mysql中的分组和多表连接一、MySQL的分组(group javascriptby )二、多表连接(表连接会产生大量的数据垃圾)MySQL中的

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四