首页 > 其他分享 >Mybatis之一对多处理

Mybatis之一对多处理

时间:2023-10-13 10:44:41浏览次数:28  
标签:之一 name 处理 teacher mybatis tid Student Mybatis id

一对多处理

运用场景: 一个老师有多名学生, 对于老师而言 就是一对多

  1. Teacher实体类

@Data
public class Teacher {

   private int id;
   private String name;
   List<Student> students;
}

 

  1. mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
       PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
       "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

   <properties resource="db.properties">
   </properties>
   
   <settings>
       <!--标准的日志工厂实现-->
       <setting name="logImpl" value="STDOUT_LOGGING"/>
   </settings>
   
   <typeAliases>
<!--       <package name="com.kuang.pojo"/>-->
       <typeAlias type="com.kuang.pojo.Teacher" alias="Teacher"/>
   </typeAliases>


   <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>
       <environment id="test">
           <transactionManager type="JDBC"/>
           <dataSource type="POOLED">
               <property name="driver" value="com.mysql.jdbc.Driver"/>
               <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf8&amp;zeroDateTimeBehavior=convertToNull&amp;serverTimezone=GMT%2B8"/>
               <property name="username" value="root"/>
               <property name="password" value="123456"/>
           </dataSource>
       </environment>
   </environments>

   <mappers>
       <mapper class="com.kuang.mapper.TeacherMapper"/>
   </mappers>
</configuration>

 

  1. TeacherMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
       PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
       "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kuang.mapper.TeacherMapper">

   <select id="getTeacher" resultMap="TeacherStudent">
      select s.id sid,s.name sname,s.tid stid,t.id tid,t.name tname from mybatis.teacher t
      join mybatis.student s on s.tid = t.id
      where t.id = #{tid}
   </select>
   <resultMap id="TeacherStudent" type="Teacher">
       <result property="id" column="tid"/>
       <result property="name" column="tname"/>
       <!--复杂的属性,我们需要单独处理 对象:association 集合:collection
      javaType 指定属性类型!
      集合中的泛型信息,我们使用ofType获取
      -->
      <collection property="students" ofType="Student">
          <result property="id" column="sid"/>
          <result property="name" column="sname"/>
          <result property="tid" column="stid"/>
      </collection>
   </resultMap>
</mapper>
  1. 公共类

public class MybatisUtils {

   private static SqlSessionFactory sqlSessionFactory;

  static {
      try {
          String resource = "mybatis-config.xml";
          InputStream inputStream = Resources.getResourceAsStream(resource);
          sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      } catch (IOException e) {
          e.printStackTrace();
      }
  }
  public static SqlSession getSqlSession(){
       return sqlSessionFactory.openSession(true);
  }

}
  1. 测试

  @Test
public void getTeacher(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
    Teacher teacher = mapper.getTeacher(1);
    System.out.println("teacher = " + teacher);
    sqlSession.close();
}
}
  1. 输出结果

teacher = Teacher(id=1, name=秦老师, students=[Student(id=1, name=小明, tid=1), Student(id=2, name=小红, tid=1), Student(id=3, name=小张, tid=1), Student(id=4, name=小李, tid=1), Student(id=5, name=小王, tid=1)])


标签:之一,name,处理,teacher,mybatis,tid,Student,Mybatis,id
From: https://www.cnblogs.com/kuangshenmentu/p/17761536.html

相关文章

  • Mybatis之缓存
    缓存简介引入:查询数据:需要连接数据库--好资源解决:把第一次查询的结果放到一个地方,再次查询时直接在这个地方访问就可以(内存--缓存),不需要在访问数据库什么是缓存?存在内存中的临时数据将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库查询文件)查询......
  • 第一个Mybatis项目
    1.mybatis-config.xml配置及pom文件<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfiguration    PUBLIC"-//mybatis.org//DTDConfig3.0//EN"    "https://mybatis.org/dtd/mybatis-3-config.dtd"><c......
  • mybatisplus根据两个字段进行更新或新增
    注意:使用@Builder注解时,要加上无参构造器,否则无法更新 @Override@TransactionalpublicvoidsaveManufacturerInfo(List<Manufacturer>manufacturerList){List<ManufacturerMap>codeNameMapping=manufacturerList.stream().map(item->ManufacturerMap.......
  • 【awk】两文件处理
    实际工作中经常会遇到两个文件中特定列比较的问题,以下是网上查到两文件比较的代码,包括交集、并集和差集。交集awk'NR==FNR{A[$0];next}($0inA)'a.txtb.txt此处A代表前一个文件,前一个$0指的是a.txt中的数据,后一个则指的是b.txt中的数据。 条件NR==FNR成立时,当前读......
  • Mybatis-Flex核心功能之@Id
    1、是什么?在Entity类中,MyBatis-Flex是使用@Id注解来标识主键的2、怎么玩?public@interfaceId{/***ID生成策略,默认为none**@return生成策略*/KeyTypekeyType()defaultKeyType.None;/***若keyType类型是seque......
  • BMP图像处理
    目录BMP图像python代码处理后的BMP图像BMP图像python代码处理后的BMP图像......
  • [Unraid 系列 v6.10+] 5 莫名死机处理
    说明目前,我的UNRAID系统版本为6.12.4,每隔一两周就会死机,网络服务(PING等)、SSH、WebGUI都会终止。现就有关问题进行处理。现在网上有几种说法:Docker分配的img文件过小,一旦需要超出又不满足条件,就会出现该问题。Docker容器分配的网络为macvlan而非ipvlan,而我已......
  • MyBatis使用细节
    一、别名在核心配置文件中使用<typeAliases>标签配置别名。别名可以用于映射文件中的resultType属性。1.直接配置别名<typeAliases><!--type:类型全限定路径alias:别名名称--><typeAliastype="com.gsy.pojo.People"alias="p"></typeAlias>......
  • mybatis动态方法
    一、首先创建数据库二、创建项目工程先导入文件编写配置文件db.propertiesdriver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/dbusername=rootpassword=rootconfig.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybat......
  • java项目使用Mybatis-Plus插件,QueryWrapper日期开始-结束范围查询
    1、参数开始日期startTime、结束日期endTime挺好用,开始日期、结束日期当天都包含进去了,如果使用qw.between("create_time",startTime,endTime)方法是不含endTime结束日期当天的qw.apply(bCulresCardMvVO.getStartTime()!=null,"date_format(create_time,......