Mybatis之多对一处理
时间:2021-11-30
本文章向大家介绍Mybatis之多对一处理,主要包括Mybatis之多对一处理使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Mybatis
10、多对一处理
10.1、数据库
-
USE ibatis; CREATE TABLE teacher( teacher_id INT(10) NOT NULL, teacher_name VARCHAR(30) DEFAULT NULL, PRIMARY KEY(teacher_id) )ENGINE = INNOBASE DEFAULT CHARSET=utf8; INSERT INTO teacher(teacher_id,teacher_name) VALUES (1,'jcooling'); CREATE TABLE student( student_id INT(10) NOT NULL, student_NAME VARCHAR(30) DEFAULT NULL, teacher_id INT(10) DEFAULT NULL, PRIMARY KEY(student_id), KEY fkteacher_id (teacher_id), CONSTRAINT fkteacher_id FOREIGN KEY(teacher_id) REFERENCES teacher(teacher_id) )ENGINE = INNOBASE DEFAULT CHARSET=utf8; INSERT INTO student(student_id,student_NAME,teacher_id) VALUES(1, '小明', '1'); INSERT INTO student(student_id,student_NAME,teacher_id) VALUES(2, '小红', '1'); INSERT INTO student(student_id,student_NAME,teacher_id) VALUES(3, '小张', '1'); INSERT INTO student(student_id,student_NAME,teacher_id) VALUES(4, '小李', '1'); INSERT INTO student(student_id,student_NAME,teacher_id) VALUES(5, '小王', '1');
10.2、环境搭建
-
导入lombok。
-
新建实体类Teacher,Student。
-
@NoArgsConstructor @AllArgsConstructor @Data @ToString public class Student { private int studentId; private String studentName; /*学生需要关联一个老师!*/ private Teacher teacher; }
-
@NoArgsConstructor @AllArgsConstructor @Data @ToString public class Teacher { private Integer teacherId; private String teacherName; }
-
-
建立Mapper接口。
-
public interface StudentMapper { }
-
public interface TeacherMapper { Teacher getTeacher(@Param("teacherId") int teacherId); }
-
-
写*Mapper.xml。
-
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.jcooling.mapper.TeacherMapper"> <select id="getTeacher" resultType="Teacher"> select * from teacher where teacher_id= #{teacherId}; </select> </mapper>
-
-
建立*Mapper.xml文件在核心配置文件中绑定注册我们的Mapper接口或者文件!
-
<!--每一个Mapper.XML都需要在Mybatis核心配置文件中注册!--> <mappers> <package name="com.jcooling.mapper"></package> </mappers>
-
-
测试查询是否能够成功!
-
@Test public void testGetTeacher(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class); Teacher teacher = mapper.getTeacher(1); System.out.println(teacher); }
-
-
实体类属性使用驼峰命名,为了能使数据库字段与Java实体类属性一一映射,需要做一下配置。
-
<settings> <!--<setting name="logImpl" value="STDOUT_LOGGING"/>--> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>
-
10.3、按照查询嵌套处理
-
<!--思路: 1.查询所有的学生信息。 2.根据查询出来的学生的teacher_id,寻找对应的老师!--> <select id="getStudent" resultMap="StudentTeacher"> select * from student </select> <resultMap id="StudentTeacher" type="Student"> <!--<result property="studentId" column="student_id"></result>--> <!--<result property="studentName" column="student_name"></result>--> <!--复杂的属性,我们需要单独处理 对象:association 集合:colLection--> <association property="teacher" column="teacher_id" javaType="Teacher" select="getTeacher"></association> </resultMap> <select id="getTeacher" resultType="Teacher"> select * from teacher where teacher_id=#{teacherId} </select>
10.4、按照结果嵌套处理
-
<!--按照结果嵌套处理--> <select id="getStudent2" resultMap="StudentTeacher2"> select s.student_id sid,s.student_NAME sname,t.teacher_name tname from student s,teacher t where s.teacher_id=t.teacher_id; </select> <resultMap id="StudentTeacher2" type="Student"> <result property="studentId" column="sid" ></result> <result property="studentName" column="sname" ></result> <association property="teacher" javaType="Teacher"> <result property="teacherName" column="tname"></result> </association> </resultMap>
-
回顾Mysql
- 多对一查询方式:
- 子查询。
- 联表查询。
- 多对一查询方式:
原文地址:https://www.cnblogs.com/jcooling-hai/p/15624782.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 在本地运行 fyne 官网
- Python-科学计算-pandas-12-df单列计算
- JDK15就要来了,你却还不知道JDK8的新特性!
- 八佰:用Python看知乎 vs 豆瓣的战斗
- 学习Python你必须了解的lenna小姐姐
- 10行python代码制作笑死人不偿命的倒放gif
- “Hello Node.js” 这一次是你没见过的写法
- 作为DBA,你不得不掌握的压测工具
- Mac之vim普通命令使用
- selenium库的基本使用
- 高效大数据开发之 bitmap 思想的应用
- 从0到1实现一个虚拟DOM
- Xenomai XDDP example and Posix Compling
- 项目实践|基于Flink的用户行为日志分析系统
- 手把手教你用Matplotlib画一个小清新配色的商业图表