百木园-与人分享,
就是让自己快乐。

MyBatis 和 jeesite多表查询

有时候经常碰到多级联查,比如通过某个功能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
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » MyBatis 和 jeesite多表查询

相关推荐

  • 暂无文章