框架——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索引的优化之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)四

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生