• 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。

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

  • 相关阅读:
    s3c2440 nand flash 拷贝实验
    DE270数字系统设计(4)基于Nios的LCD显示
    DE270数字系统设计实验(3)移位寄存器
    s3c2440启动时的内存拷贝过程分析
    s3c2440基本io/ports led点亮
    (转)X11/Xlib.h:没有该文件或目录
    NAND Flash读写技术
    Http中ContentType的取值讲解
    Json对象和Json字符串的区别
    table() function
  • 原文地址:https://www.cnblogs.com/chenrunlin/p/5446879.html
Copyright © 2020-2023  润新知