有时候经常碰到多级联查,比如通过某个功能A表查角色信息,但是A表和角色表没有直接的关联关系,需要通过用户表进行关联,所以就需要多级关联查询出来了(下面的只是举例,实际应用用户和角色不会这样设计字段)
一、MyBatis xml文件手写resultMap和查询语句
1、MyBatis配置文件:因为是通过column(数据库字段名称)和property(实体类对象名称)进行数据绑定的,如果存在相同字段的名字可以用as修改字段名称也能进行特殊绑定
<resultMap type=\"User\" id=\"UserResult\"> <!-- 表字段 --> <result property=\"xxxxxxxxxId\" column=\"xxxxxxxxx_id\"/> <!-- 通用字段和关联字段 --> <result property=\"userId\" column=\"user_id\"/> <result property=\"status\" column=\"status\"/> <result property=\"createBy\" column=\"create_by\"/> <result property=\"createTime\" column=\"create_time\"/> <result property=\"updateBy\" column=\"update_by\"/> <result property=\"updateTime\" column=\"update_time\"/> <result property=\"remark\" column=\"remark\"/> <result property=\"scriptJson\" column=\"script_json\"/> <!-- 关联查询 --> <association property=\"user\" column=\"user_id\" javaType=\"User\" resultMap=\"UserResult\"/> </resultMap> <resultMap type=\"User\" id=\"UserResult\"> <id property=\"userId\" column=\"user_id\"/> <result property=\"userName\" column=\"user_name\"/> <id property=\"roleId\" column=\"role_id\"/> <!-- 二级关联查询 --> <association property=\"role\" column=\"role_id\" javaType=\"Role\" resultMap=\"RoleResult\"/> </resultMap> <resultMap type=\"Role\" id=\"RoleResult\"> <id property=\"roleId\" column=\"role_id\"/> <result property=\"roleName\" column=\"role_name\"/> </resultMap>
<select id=\"\" parameterType=\"\" resultMap=\"\"> select a.*,u.role_id,r.role_name from xxxx a left join user u on a.user_id = u.user_id left join role r on r.role_id = u.role_id </select>
二、使用jeesite中的@Table注解
@Table(name=\"Test\", alias=\"a\", label=\"测试表\", columns={ @Column(name=\"testid\", attrName=\"testid\", label=\"测试ID\", isPK=true), @Column(name=\"userid\", attrName=\"userid\", label=\"用户id\"), @Column(includeEntity=DataEntity.class), }, joinTable = { @JoinTable(type= JoinTable.Type.LEFT_JOIN,entity = User.class, alias = \"c\", on = \"c.user_id = a.user_id\", attrName=\"user\",columns = { @Column(name = \"user_name\",attrName=\"username\", label=\"用户名\"), @Column(name = \"role_id\",attrName=\"roleId\", label=\"角色id\"), }), @JoinTable(type= JoinTable.Type.LEFT_JOIN,entity = Role.class, alias = \"d\", on = \"d.role_id = c.role_id\", attrName=\"role\",columns = { @Column(name = \"role_name\",attrName=\"rolename\", label=\"角色名称\"), }), }, orderBy=\"a.update_date DESC\" ) public class Utest extends DataEntity<Utest> { private static final long serialVersionUID = 1L; private User user; private Role role; private String testid; }
省略get、set方法,在使用的时候直接调用jeesite的finList、findPage等查询方法进行使用了数据结构就自己debug一下吧
来源:https://www.cnblogs.com/yangdadaBO/p/16147888.html
本站部分图文来源于网络,如有侵权请联系删除。