当前位置: 首页 > news >正文

移动办公型网站开发温州做网站技术员

移动办公型网站开发,温州做网站技术员,网站关键词密度,家私家具网上商城多对一处理(association) 多个学生对一个老师 对于学生这边,关联:多个学生,关联一个老师[多对一] 对于老师而言,集合,一个老师有多个学生【一对多】 SQL: 测试环境搭建 1.导入依…

多对一处理(association)

  • 多个学生对一个老师

  • 对于学生这边,关联:多个学生,关联一个老师[多对一]

  • 对于老师而言,集合,一个老师有多个学生【一对多】

SQL:

测试环境搭建

1.导入依赖文件并编写配置文件

pom.xml

<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version></dependency>
</dependencies>

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--   映入外部配置文件--><properties resource="db.properties"/><settings>
<!--        标准的日志工厂实现--><setting name="logImpl" value="stdout_logging"/></settings>
<environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment>
</environments><mappers><mapper class="com.lyc.mapper.StudentMapper"/><mapper class="com.lyc.mapper.TeacherMapper"/></mappers>
</configuration>

db.properties

driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username = root
password = 211314

2.新建实体类

student

package com.lyc.pojo;import lombok.Data;
import org.apache.ibatis.type.Alias;@Data
@Alias("student")
public class Student {private int id;private String name;//学生要关联一个老师private Teacher teacher;
}

Teacher

package com.lyc.pojo;import lombok.Data;
import org.apache.ibatis.type.Alias;@Data
@Alias("teacher")
public class Teacher {private int id;private String name;
}

3.编写Mybatis工具包

package com.lyc.utils;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class MybatisUtils {public SqlSession getsqlSession() throws IOException {String resource = "mybatis-config.xml";InputStream stream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);return sqlSessionFactory.openSession(true);}
}

4.建立Mapper接口,建立Mapper.xml

studentMapper.java

package com.lyc.mapper;import com.lyc.pojo.Student;import java.util.List;public interface StudentMapper {List<Student> getStudent();List<Student> getStudent2();
}

teacherMapper.java

package com.lyc.mapper;import com.lyc.pojo.Teacher;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;public interface TeacherMapper {
//    @Select("select * from mybatis.teacher where id = #{tid}")Teacher getTeacher(@Param("tid") int id);
}

5.在核心配置文件中绑定注册我们的Mapper映射文件

<mappers><mapper class="com.lyc.mapper.StudentMapper"/><mapper class="com.lyc.mapper.TeacherMapper"/></mappers>

按照查询嵌套处理

studentmapper.xml

 <mapper namespace="com.lyc.mapper.StudentMapper"><!--    思路:1.查询所有的学生信息2.根据查询出来的学生的tid查询到老师信息--><select id="getStudent" resultMap="student-teacher">select *from mybatis.student;</select><resultMap id="student-teacher" type="com.lyc.pojo.Student"><result property="id" column="id"/><result property="name" column="name"/><!--        复杂的属性,我们需要单独处理对象:association集合:collection--><association property="teacher" column="tid" javaType="com.lyc.pojo.Teacher" select="getTeacher"/></resultMap><select id="getTeacher" resultType="com.lyc.pojo.Teacher">select * from mybatis.teacher where id = #{id}</select></mapper>

按照结果嵌套查询

studentmapper.xml

<!--    按照结果嵌套处理--><select id="getStudent2" resultMap="student-teacher2">select student.id,student.name,teacher.name as teacherNamefrom mybatis.student,mybatis.teacherwhere student.tid = teacher.id</select><resultMap id="student-teacher2" type="com.lyc.pojo.Student"><result property="id" column="id"/><result property="name" column="name"/><association property="teacher" javaType="com.lyc.pojo.Teacher"><result property="name" column="teacherName"/></association></resultMap>

注:单表查询时,当执行到tid时去调用映射,映射又去子查询,所以#{}里面自动填充了cloum的值,所以#{}的值可以随便添,记住,是单表查询时

回顾MySQL多对一查询方式:

  • 子查询

  • 联表查询

一对多处理(collection)

环境搭建: 与上文一致

实体类:

public class Student {private int id;private String name;//学生要关联一个老师private int tid;}public class Teacher {private int id;private String name;//一个老师有多个老师private List<Student> students;}

mapper类:

teacherMapper.java

package com.lyc.mapper;import com.lyc.pojo.Teacher;
import com.lyc.pojo.Teacher;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface TeacherMapper {
//    List<Teacher> selectTeacher();//获取指定老师下的所有学生及老师信息Teacher selectTeacher(@Param("tid") int id);Teacher selectTeacher2(@Param("tid") int id);
}

按照查询嵌套处理

TeacherMapper.xml

   <select id="selectTeacher2" resultMap="teacher-student2">select * from mybatis.teacher where id = #{tid};</select><resultMap id="teacher-student2" type="com.lyc.pojo.Teacher"><collection property="students" javaType="ArrayList" ofType="com.lyc.pojo.Student" select="getStudent" column="id"/></resultMap><select id="getStudent" resultType="com.lyc.pojo.Student">select * from mybatis.student where tid = #{tid}</select></mapper>

按照结果嵌套查询

TeacherMapper.xml

 <select id="selectTeacher" resultMap="teacher-student">select s.id sid,s.name sname,t.id tid,t.name tnamefrom mybatis.teacher tjoin mybatis.student s ont.id = s.tid and t.id = #{tid};</select>​<resultMap id="teacher-student" type="com.lyc.pojo.Teacher"><result property="id" column="tid"/><result property="name" column="tname"/><!--        复杂的属性,我们需要单独处理对象:association集合:collectionjavaType:指定属性的类型,集合中的泛型信息,我们使用ofType获取--><collection property="students" ofType="com.lyc.pojo.Student"><result property="id" column="sid"/><result property="name" column="sname"/><result property="tid" column="tid"/></collection></resultMap>

小结

  1. 关联 association

  2. 集合:collection

  3. javaType & ofype

    1. javaType用来指定实体类中属性的类型

    2. ofType 用来指定映射到List或者集合中的实体类,反省中的约束类型

注:

  • 保证SQL的可读性,精良保证通俗易懂

  • 注意一对多和多对一中 属性名和字段名的问题如果问题不好排查,可以使用日志,建议使用log4j

希望对大家有所帮助! 

http://www.dtcms.com/a/460819.html

相关文章:

  • 【SpringAI】第六弹:深入解析 MCP 上下文协议、开发和部署 MCP 服务、MCP 安全问题与最佳实践
  • Unreal开发痛点破解!GOT Online新功能:Lua全监控 + LLM内存可视化!
  • 节后变电站如何通过智能在线监测系统发现「积劳成疾」的隐患?
  • 基于vscode在WSL中配置PlatformIO开发环境
  • C#基础15-线程安全集合
  • 门诊场景评测深度分析报告:医生-病人-测量代理交互对诊断影响机制研究(下)
  • USCTNET:一种用于物理一致性高光谱图像重建的深度展开核范数优化求解器
  • 为什么我的网站没有百度索引量南充市网站建设
  • 常规线扫描镜头有哪些类型?能做什么?
  • 企业级 K8s 深度解析:从容器编排到云原生基石的十年演进
  • 网络产品报价指南--S5735系列交换机
  • 笔记 | 内网服务器通过wifi穿透,设置流量走向
  • 哈尔滨网站建设市场html5网站编写
  • [THREEJS]实战-基础三要素
  • 光谱相机的探测器阵列
  • 怎么更换网站的域名电商公司组织架构图
  • 网上招聘网站开发报告一个简单的网页代码带图片
  • 嵌入式设备轻量级语音识别实战:从STM32到树莓派的智能语音控制
  • AMD KFD的BO设计分析系列6-3: res_cursor--BO物理内存资源的迭代器
  • C#发送邮件到263邮箱服务器教程
  • 淘宝客建网站要钱的吗京东网站建设案例论文
  • Linux环境下Node.js任意版本安装与pnpm、yarn包管理
  • AI问答与搜索引擎:信息获取的现状
  • Element UI表格中根据数值动态设置字体颜色
  • AI量化投资决策Agent系列-比尔·阿克曼Agent
  • C 标准库 - `<limits.h>》
  • 51c大模型~合集190
  • # **DRF Response 对象**
  • 临夏建设网站易烊千玺网页设计模板代码
  • 自己开发网站要多少钱如何快速找到做网站的客户