框架——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

相关文章

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

MYSQL关联关系查询方式

《MYSQL关联关系查询方式》文章详细介绍了MySQL中如何使用内连接和左外连接进行表的关联查询,并展示了如何选择列和使用别名,文章还提供了一些关于查询优化的建议,并鼓励读者参考和支持脚本之家... 目录mysql关联关系查询关联关系查询这个查询做了以下几件事MySQL自关联查询总结MYSQL关联关系查询

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被