zoukankan      html  css  js  c++  java
  • Mybatis_多对多关联查询

    多对多就是两个一对多

    一个人有多个role,一个role有多个人。

    Person类中加一句private List<Role> roleList; 并生成setter getter

    查询一个人有多少role(此处为一对多查询):

        <resultMap type="person" id="selectRoleByPersonIdRM">
            <id column = "person_id" property = "personId" />
            <result column = "name" property = "name" />
            <result column = "gender" property = "gender" />
            <result column = "person_addr" property = "personAddr" />
            <result column = "birthday" property = "birthday" />
            <!-- collection一对多的关联查询。property:一中多的属性名  ofType:多的数据类型 -->
            <collection property="roleList" ofType="xxx.x.model.Role">
                <id column = "ROLE_ID" property = "roleId" />
                <result column = "ROLE_NAME" property = "roleName" />
                <result column = "DESCRIPT" property = "descript" />
            </collection>
        </resultMap>
        <select id = "selectRoleByPersonId" parameterType="int" resultMap="selectRoleByPersonIdRM">
            select * from person p,person_role pr,role r where p.PERSON_ID=pr.PERSON_ID and pr.ROLE_ID = r.ROLE__ID and p.PERSON_ID = #{personId}
        </select>
        
        <select id = "selectPersonByRoleId" parameterType="int" resultMap="">
            select * from person p,person_role pr,role r where p.PERSON_ID = pr.PERSON_ID and pr.ROLE_ID = r.ROLE_ID and r.ROLE_ID = #{roleId}
        </select>
        public void selectRoleByPersonId() {
            // 创建SqlSession
            SqlSession session = sessionFactory.openSession();
            try {
                Person person = session.selectOne("xxx.x.mapper.PersonTestMapper.selectRoleByPersonId", 1);
                System.out.println(person);
            } catch (Exception e) {
                e.printStackTrace();
                session.rollback();
            } finally {
                session.close();
            }
        }

    查询一个role里有哪些人,xml要在RoleMapper里写了:

    在Role.java中添加一行:private List<Person> personList; 并添加setter getter

    要记得在SQLMapConfig中添加一行<mapper resource="xxx/x/mapper/RoleMapper.xml" />

        <!-- extends="BaseResultMap" 继承了Role最基本的映射,BaseResultMap是在逆向工程后在xml自动生成的 -->
        <resultMap type="xxx.x.Role" id="selectPersonByRoleIdRM" extends="BaseResultMap">
            <!-- collection一对多的关联查询集合的意思。property:一中多的属性名  ofType:多的数据类型 -->
            <collection property="personList" ofType="xxx.x.model.Person">
                <id column = "person_ID" property = "personId" />
                <result column = "gender" property = "gender" />
                <result column = "person_addr" property = "personAddr" />
                <result column = "birthday" property = "birthday" />
            </collection>
        </resultMap>
        <select id = "selectPersonByRoleId" parameterType="int" resultMap="selectPersonByRoleIdRM">
            select * from person p,person_role pr,role r where p.PERSON_ID = pr.PERSON_ID and pr.ROLE_ID = r.ROLE_ID and r.ROLE_ID = #{roleId}
        </select>
        public void selectPersonByRoleId() {
            // 创建SqlSession
            SqlSession session = sessionFactory.openSession();
            try {
                Role role = session.selectOne("xxx.x.mapper.RoleMapper.selectPersonByRoleId", 1);
                System.out.println(role);
            } catch (Exception e) {
                e.printStackTrace();
                session.rollback();
            } finally {
                session.close();
            }
        }
  • 相关阅读:
    121. 122. 123. 188. Best Time to Buy and Sell Stock *HARD* 309. Best Time to Buy and Sell Stock with Cooldown -- 买卖股票
    from __future__ import absolute_import
    sql之left join、right join、inner join的区别
    Eclipse workspace 被占用问题
    JavaScript SetInterval与setTimeout使用方法详解
    提示框3秒钟后自动消失
    页面加载及取消加载
    分层总结
    java中的注释
    canvas画图
  • 原文地址:https://www.cnblogs.com/lonske/p/9016546.html
Copyright © 2011-2022 走看看