zoukankan      html  css  js  c++  java
  • mybatis---实现关联表查询

    推荐学习博客:

      1、http://www.cnblogs.com/xdp-gacl/p/4264440.html

      2、http://www.cnblogs.com/yaobolove/p/5444046.html

    以前觉得hibernate的formula属性配置特别方便,作用就是说白了就是用一个查询语句动态的生成一个类的属性,数据库表又不存在这个属性,例子如下:

    <hibernate-mapping>
        <class name="com.bsit.device.hibernate.pojo.User_info" table="user_info"   >
    		<id name="userid" type="java.lang.String">
    			<column name="USERID" ><comment>用户id</comment></column>
    			<generator class="assigned"/>
    		</id>
    			
    		<property name="account" type="java.lang.String">
    			<column name="ACCOUNT" ><comment>用户账号</comment></column>
    		</property>
    					
    		<property name="username" type="java.lang.String">
    			<column name="USERNAME" ><comment>用户名称</comment></column>
    		</property>
    					
    		<property name="password" type="java.lang.String">
    			<column name="PASSWORD" ><comment>密码</comment></column>
    		</property>
    			
    		<property name="org_id" type="java.lang.String">
    			<column name="org_id" ><comment>用户所属的组织机构id</comment></column>
    		</property>
    			
    		<property name="org_name" type="java.lang.String" formula="(select o.orgname from org o where o.orgid=org_id )" />
    		
        </class>
    </hibernate-mapping>
    

      但本人不太喜欢hibernate,还是感觉直接sql来的爽,所以mybatis成了最爱,但此功能在mybatis中是怎样实现的呢?

    <mapper namespace="com.bsit.system.mapper.Sys_userMapper" >
    
    	<resultMap id="resultMap" type="com.bsit.system.model.Sys_user" >
              <id property="id" column="id"/>   
              <result property="username" column="username"/>
              <result property="account" column="account"/>
              <result property="password" column="password"/>
              <result property="role_id" column="role_id"/>
              <association property="role_name" column="role_id" select="getRoleNameByRoleId"/>   
          </resultMap>
        
          <!-- 根据id获取对象 -->
    	<select id="getRoleNameByRoleId" parameterType="String" resultType="String">
    		select t.r_role_name from sys_role t where t.id = #{id}
    	</select>
    	
    	<!-- 根据id获取对象 -->
    	<select id="getSys_userById" parameterType="String" resultMap="resultMap">
    		select t.* from sys_user t where t.id = #{id}
    	</select>
    	
    </mapper>
    

      service调用getSys_userById,返回值再根据关联association调用getRoleNameByRoleId,getRoleNameByRoleId方法中的参数就是association标签中column的值,

    如果有多个参数,则可写成:

    <association property="role_name" column="{acc=account,pas=password}" select="getRoleNameByRoleId"/>  
    <!-- 根据id获取对象 -->
    <select id="getRoleNameByRoleId" parameterType="java.util.Map" resultMap="resultMap">
    	select t.* from sys_user t where t.account = #{acc} and t.password = #{pas}
    </select>
    

      关联查询传入多值,column当map使用,是键值对形式。在具体查询语句中,直接使用其键就可以取到其值。column中如果有多个参数时,则对应的select标签的parameterType就必须是java.util.Map,或java.util.HashMap。

      如果想要在对象中关联属性,则可参考推荐博客。

  • 相关阅读:
    【转】Redis概念原理、redis面试
    mysql登录后显示用户名与当前数据库名
    (5.3.10)数据库迁移——sql server降级操作
    navicat下载安装破解
    sql server2016+windows server2016使用日志传送做主从,主库无法备份事务日志
    (4.41)sql server如何把xml转换成表格数据?
    .NET Core SDK在Windows系统安装后出现Failed to load the hostfxr.dll等问题的解决方法
    .NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程
    .NET Core实战项目之CMS 第六章 入门篇-Vue的快速入门及其使用
    [译]聊聊C#中的泛型的使用(新手勿入)
  • 原文地址:https://www.cnblogs.com/chenrunlin/p/5446879.html
Copyright © 2011-2022 走看看