Mybatis多表查询

文章讲述了作者在使用SpringSecurity时遇到的Mybatis多表查询问题,尝试了链表查询和嵌套查询方法未果,最终发现可以通过在XML文件中直接写多表SQL语句并自定义接受类解决,成功实现了预期结果。
摘要由CSDN通过智能技术生成

目录

一、问题

二、搜索

三、解决


一、问题

       在学习springsecurity途中,需要设计合理的表结构,依据他人的经验,从基础的RBAC开始,在此基础上,需要使用操作数据库的工具,由于之前使用过mybatis,便在该项目中继续使用。由于先前未有mybatis多表查询的经验,便在网上搜索了大量资料,但并未解决我的问题。但最终还是解决了(似乎),特此记录。

二、搜索

       搜索他人资料,都是链表查询或者嵌套查询,例如:

Mybatis链表查询/嵌套查询_mybatis 链式查询_码农的坤仔的博客-CSDN博客

mybatis中的连表查询_mybatis连表查询_L向上z的博客-CSDN博客等等。根据他们的方法,我也在每个类中添加了对应依赖类,在主xml文件中添加诸如collection,association。如下:

<resultMap id="BaseResultMap" type="com.example.spring_mybatis.entity.Login" >
    <id column="id" property="id" jdbcType="INTEGER" />
    <result column="username" property="username" jdbcType="VARCHAR" />
    <result column="userpassword" property="userpassword" jdbcType="VARCHAR" />
    <result column="oldpassword" property="oldpassword" jdbcType="VARCHAR" />
    <result column="nicheng" property="nicheng" jdbcType="VARCHAR" />
    <collection property="lr" ofType="com.example.spring_mybatis.entity.LoginRoles">
      <id column="id" property="id" jdbcType="INTEGER"/>
      <result column="loginID" property="loginid" jdbcType="INTEGER"/>
      <result column="rolesID" property="rolesid" jdbcType="INTEGER"/>
      <association property="ur" javaType="com.example.spring_mybatis.entity.UserRoles">
        <collection property="rp" ofType="com.example.spring_mybatis.entity.RolesPermissions">
          <id column="id" property="id" jdbcType="INTEGER"/>
          <result column="rolesID" property="rolesid" jdbcType="INTEGER"/>
          <result column="permissionID" property="permissionid" jdbcType="INTEGER"/>
          <association property="up" javaType="com.example.spring_mybatis.entity.UserPermissions">
          </association>
        </collection>
      </association>
    </collection>
  </resultMap>

        在实际编写过程中, association中无法识别该类中的字段,所以加以删除,什么原因,不得而知,希望能有人解答一下。然后将sql语句加入其中,运行后未报错,但结果为空。

三、解决

         由于结果不符合期望,便暂时舍弃这些方法继续寻找,偶然在一篇文章中看到跟我类似的设计:运用Mybatis进行多表联查_mybatis多表联合查询_龍夜的博客-CSDN博客

         其虽也使用了collection等,但其使用的sql语句引起了我的注意。又想到以前编写的mybatis xml文件,在一次编写中,我将table名称写错了,写成了另一张表,调用该方法,却可以查出该错误表的数据。也就是说,在数据库连接成功的情况下,mybatis的xml文件可以查询该数据库下所有的表,那么,我直接在xml文件下使用多表查询语句,并创建自定义接受类,是否可以得到我想要的结果呢,如下:

<select id="selectUserPermissions" resultType="com.example.spring_mybatis.entity.UserMessage">
      select a.username,a.nicheng,c.roles,e.permissions from login a
        join login_roles b
        on a.id = b.loginID
        join userroles c
        on b.rolesID = c.id
        join roles_permissions d
        on c.id = d.rolesID
        join userpermissions e
        on d.permissionID = e.id
        where a.nicheng = #{nicheng}
</select>

         其中UserMessage为自定义接受类,运行后,果然得到了我想要的结果,至此,问题得到了解决。之后我将多余的mapper,xml文删掉,运行后,依旧得到了我想要的结果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值