MybatisPlus實現(xiàn)對象嵌套關聯(lián)查詢一對多List集合查詢
對象嵌套關聯(lián)查詢一對多List集合查詢
mybatis嵌套關聯(lián)查詢?nèi)缦?/h3>
由于我的是一對集合查詢,所以我有兩個類。
@Data @TableName("tb_user") public class User { ? ? @TableId(type= IdType.INPUT) ? ? private String id; ? ? @TableField("user_name") ? ? private String username; ? ? private String password; ? ? private String name; ? ? private String email; ? ? private int age; ? ? private ArrayList<Authority> list; }
權限類
@Data @TableName public class Authority { ? ? @TableId(type = IdType.INPUT) ? ? @TableField("aid") ? ? private int id; ? ? @TableId("aname") ? ? private String name; }
測試類
?@Test ? ? public void ManyToMany(){ ? ? ? ? User user = userMapper.selectAuthorityById(1); ? ? ? ? ArrayList <Authority> list = user.getList(); ? ? ? ? System.out.println(user); ? ? ? ? for (Authority authority : list) { ? ? ? ? ? ? System.out.println("所對應權限為"+authority.getName()); ? ? ? ? } ? ? }
springboot項目的依賴
? ? ? ?<dependency> ? ? ? ? <groupId>org.springframework.boot</groupId> ? ? ? ? <artifactId>spring-boot-starter</artifactId> ? ? </dependency> ? ? ? ? <dependency> ? ? ? ? <groupId>mysql</groupId> ? ? ? ? <artifactId>mysql-connector-java</artifactId> ? ? ? ? <version>5.1.26</version> ? ? </dependency> ? ? ? ? <dependency> ? ? ? ? <groupId>org.projectlombok</groupId> ? ? ? ? <artifactId>lombok</artifactId> ? ? ? ? <optional>true</optional> ? ? </dependency> ? ? ? ? <dependency> ? ? ? ? <groupId>org.springframework.boot</groupId> ? ? ? ? <artifactId>spring-boot-starter-test</artifactId> ? ? ? ? <scope>test</scope> ? ? </dependency> ? ? ? ?<!--mybatis plus 起步依賴--> ? ? ? ? <dependency> ? ? ? ? <groupId>com.baomidou</groupId> ? ? ? ? <artifactId>mybatis-plus-boot-starter</artifactId> ? ? ? ? <version>3.4.0</version> ? ? </dependency>
這下面就是我xml文件里面怎么寫的嵌套查詢語句
<mapper namespace="com.itheima.mybatisplus.mapper.UserMapper"> ? ? <!--返回的對象為authority--> ? ? <resultMap id="authority" type="com.itheima.mybatisplus.domain.User"> ? ? ? ? <id column="id" property="id"/> ? ? ? ? <id column="password" property="password"/> ? ? ? ? <id column="age" property="age"/> ? ? ? ? <id column="email" property="email"/> ? ? ? ? <id column="name" property="name"/> ? ? ? ? <id column="user_name" property="username"/> ? ? ? <collection property="list" ? ? ? ? ? ? ? ? ? ofType="com.itheima.mybatisplus.domain.Authority"> ? ? ? ? ? <id property="id" column="aid"/> ? ? ? ? ? <id property="name" column="aname"/> ? ? ? </collection> ?? ?<select id="selectAuthorityById" parameterType="int" resultMap="authority"> ? ? ? ?SELECT * FROM ? ? ? ? ?authority a,tb_user t,user_authority ua ? ? ? ? ?WHERE a.aid=ua.authority_id ? ? ? ? ?AND t.id=ua.user_id ? ? ? ? ?AND t.id=#{id} ? ? </select>
數(shù)據(jù)庫的配置我就不放了,直接編寫就可以了,看會下面這個xml配置就可以了
一對多查詢(經(jīng)典案例)
條件
查詢班級表 返回所有學生信息 (一對多問題)
數(shù)據(jù)庫
班級class_info
學生student
代碼實現(xiàn)
<!-- 多對一 或者 一對一 --> <!-- <association property=""--> <!-- 一對多 返回集合--> <!- - <collection property=""- ->
實體類ClassInfo.java
@Data public class ClassInfo { private Long id; private String name; private String nameTest; private List<Student> studentList; }
ClassInfoMapper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--名稱空間:對應mapper層某個接口的包的全名稱--> <mapper namespace="com.example.demo.mapper.ClassInfoMapper"> <!-- 查詢班級 返回所有學生的信息 一對多--> <!-- 自定義映射規(guī)則--> <resultMap id="OneToMany" type="com.qcby.zsgc.entity.ClassInfo"> <result column="name" jdbcType="VARCHAR" property="nameTest" /> <collection column="{id1=id,name=name}" property="studentList" select="com.example.demo.mapper.StudentMapper.listByClassInfoId"> </collection> </resultMap> <select id="listAllWithStudent" resultMap="OneToMany"> select * from class_info </select>
關聯(lián)StudentMapper.xml中的子查詢
<select id="listByClassInfoId" resultType="com.example.demo.entity.Student"> SELECT * FROM student s where class_info_id = #{id1} or name = #{name} </select>
ClassInfoMapper.java
public interface ClassInfoMapper extends BaseMapper<ClassInfo> {?? ? ? IPage<ClassInfo> listAllWithStudent(IPage<ClassInfo> page);? }
ClassInfoService.java
public interface ClassInfoService extends IService<ClassInfo> {? ? ? IPage<ClassInfo> listAllWithStudent(IPage<ClassInfo> page);? }
ClassInfoServiceImpl.java
@Service public class ClassInfoServiceImpl extends ServiceImpl<ClassInfoMapper, ClassInfo> implements ClassInfoService { ? ? @Autowired ? ? private StudentService studentService; ? ? @Override ? ? public IPage<ClassInfo> listAllWithStudent(IPage<ClassInfo> page) { ? ? ? ? return this.baseMapper.listAllWithStudent(page); ? ? } }
ClassInfoController.java
@Controller @RequestMapping("classInfo") public class ClassInfoController { ? ? ? @Autowired ? ? private ClassInfoService classInfoService; ? ? ? @RequestMapping("listAllWithStudent") ? ? @ResponseBody ? ? public IPage<ClassInfo> listAllWithStudent(Integer pageNo,Integer pageSize){ ? ? ? ? Page<ClassInfo> page = new Page<>(pageNo,pageSize); ? ? ? ? return classInfoService.listAllWithStudent(page); ? ? }? }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
java用LocalDateTime類獲取當天時間、前一天時間及本周/本月的開始和結束時間
這篇文章主要給大家介紹了關于java使用LocalDateTime類獲取當天時間、前一天時間及本周/本月的開始和結束時間的相關資料,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下2023-08-08詳解Spring中Bean后置處理器(BeanPostProcessor)的使用
BeanPostProcessor 接口也被稱為Bean后置處理器,通過該接口可以自定義調(diào)用初始化前后執(zhí)行的操作方法。本文將詳細講講它的使用,需要的可以參考一下2022-06-06