mybatisplus一对多关联查询,mybatis嵌套结果查询
目录
对象嵌套关联查询一对多目录集合查询框架嵌套关联查询如下一对多查询(经典案例)条件数据库代码实现
对象嵌套关联查询一对多List集合查询
mybatis嵌套关联查询如下
由于我的是一对集合查询,所以我有两个类。
@Data@TableName(tb_user )公共类用户{ @TableId(type=IdType .输入)私有字符串id;@TableField(用户名)私有字符串用户名;私有字符串密码;私有字符串名称;私人字符串电子邮件;私人年龄;私有ArrayListAuthority列表;}权限类
@ Data @ tablename公共类Authority { @ TableId(type=id type .INPUT)@ table field( aid )private int id;@TableId(aname )私有字符串名称;}测试类
@ Test public void ManyToMany(){ User User=User mapper。selectauthoritybyid(1);ArrayList权限列表=用户。getlist();System.out.println(用户);for(Authority权限:列表){ system。出去。println(所对应权限为权威。getname());} }跳羚项目的依赖
依赖关系groupIdorg.springframework.boot/groupId工件id spring-boot-starter/工件id/依赖关系groupId MySQL/groupId工件id MySQL-connector-Java/工件id版本5。1 .26/版本/依赖关系依赖关系groupIdorg.projectlombok/groupId工件id lombok/工件id选项true/可选/相关性依赖关系groupIdorg.springframework.boot/groupId工件id spring-boot-starter-test/工件id scope test/scope/dependency!-我的巴蒂斯加起步依赖-依赖关系groupIdcom.baomidou/groupId artifactId my batis-plus-boot-starter/artifactId版本3 . 4 . 0/版本/依赖关系这下面就是我可扩展标记语言文件里面怎么写的嵌套查询语句
映射器命名空间=c
om.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>数据库的配置我就不放了,直接编写就可以了,看会下面这个xml配置就可以了
一对多查询(经典案例)
条件
查询班级表 返回所有学生信息 (一对多问题)
数据库
班级class_info
学生student
代码实现
<!-- 多对一 或者 一对一 --><!-- <association property=""--><!-- 一对多 返回集合--><!- - <collection property=""- ->
实体类ClassInfo.java
@Datapublic 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"> <!-- 查询班级 返回所有学生的信息 一对多--> <!-- 自定义映射规则--> <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>
关联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
@Servicepublic 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); } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。