mybatis中@Many

简介: mybatis中@Many

吃饭先喝汤,不用请药方——佚名

之前写了mybatis中@One

今天写个@Many

首先还是代码:

package com.ruben.mapper;
import com.ruben.pojo.po.UserInfo;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.cursor.Cursor;
import org.apache.ibatis.session.RowBounds;
import java.util.List;
@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user_info")
    @Results({
            @Result(column = "id", property = "id"),
            @Result(column = "name", property = "name"),
            @Result(column = "age", property = "age"),
            @Result(column = "email", property = "email"),
            @Result(property = "userRoles", javaType = List.class, column = "userRole.userId = id",
                    many = @Many(select = "com.ruben.mapper.UserRoleMapper.selectListCursor"))
    })
    List<UserInfo> selectList(RowBounds rowBounds);
}


这里的UserRoleMapper.selectListCursor还是没动,感觉这里不应该是userRole.userId,直接使用userIdroleId会更好

<?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 namespace="com.ruben.mapper.UserRoleMapper">
    <resultMap id="userRole" type="com.ruben.pojo.po.UserRole">
        <result column="id" property="id"/>
        <result column="user_id" property="userId"/>
        <result column="role_id" property="roleId"/>
        <association property="role"
                     column="id = role_id"
                     javaType="com.ruben.pojo.po.RoleInfo"
                     select="com.ruben.mapper.RoleMapper.getById"
                     fetchType="lazy"/>
    </resultMap>
    <select id="selectListCursor" resultMap="userRole">
        select *
        from user_role
        <where>
            <if test="userRole.userId != null">
                AND user_id = #{userRole.userId}
            </if>
            <if test="userRole.roleId != null">
                AND role_id = #{userRole.roleId}
            </if>
        </where>
    </select>
</mapper>

然后结合之前的代码,这里写个单元测试:

@Test
void testMany(@Autowired UserMapper userMapper) {
    List<UserInfo> users = userMapper.selectList(new RowBounds(0, 5));
    Assertions.assertEquals("admin", users.get(0).getUserRoles().get(0).getRole().getRoleName());
    Assertions.assertEquals("user", users.get(0).getUserRoles().get(1).getRole().getRoleName());
}

运行结果:

相关文章
|
3月前
|
缓存 Java 数据库连接
Mybatis
Mybatis
22 0
|
SQL 算法 Java
Mybatis-plus超详细讲解(2022)
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
1868 1
|
2月前
|
SQL Java 数据库连接
从0开始回顾Mybatis
Mybatis 1、什么是Mybatis? 概念: 1. Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高。 2. MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 缺点: 1. SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求
|
7月前
|
SQL Java 数据库连接
14MyBatis - MyBatis介绍
14MyBatis - MyBatis介绍
21 0
|
11月前
|
SQL XML 存储
Mybatis总结
Mybatis总结
87 0
|
Java 数据库连接 mybatis
MyBatis总结
MyBatis总结
53 0
MyBatis总结
Mybatis-Plus中or()的使用
Mybatis-Plus中or()的使用
103 0
|
XML SQL Java
Mybatis使用问题汇总
JDK1.8分组问题产生的SQL需求
80 0
|
SQL 算法 Oracle
MyBatis-Plus的使用
MyBatis-Plus的使用
139 1
MyBatis-Plus的使用
使用Mybatis-plus
使用Mybatis-plus
76 0
使用Mybatis-plus