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。
如果想要在对象中关联属性,则可参考推荐博客。
mybatis---实现关联表查询的更多相关文章
- MyBatis实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- MyBatis——实现关联表查询
原文:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创 ...
- Mybatis系列(三):Mybatis实现关联表查询
原文链接:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 ...
- MyBatis—实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
- mybatis一对一关联表查询
先创建一个表 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name ) ); CREATE TABLE class( c_ ...
- Mybatis源码分析--关联表查询及延迟加载原理(二)
在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...
- 在MyBatis中查询数据、涉及多参数的数据访问操作、插入数据时获取数据自增长的id、关联表查询操作、动态SQL、关于配置MyBatis映射没有代码提示的解决方案
1. 单元测试 在单元测试中,每个测试方法都需要执行相同的前置代码和后置代码,则可以自定义2个方法,分别在这2个方法中执行前置代码和后置代码,并为这2个方法添加@Before和@After注解,然后, ...
- .NetCore中EFCore的使用整理(二)-关联表查询
EF常用处理关联加载的方式有3中:延迟加载(Lazy Loading).贪婪加载 (Eager Loading)以及显示加载. 一.EF Core 1.1 1.当前的版本,还不支持延迟加载(Lazy ...
- SpringBoot Data JPA 关联表查询的方法
SpringBoot Data JPA实现 一对多.多对一关联表查询 开发环境 IDEA 2017.1 Java1.8 SpringBoot 2.0 MySQL 5.X 功能需求 通过关联关系查询商店 ...
- 使用Mybatis进行连表查询、left join---https://blog.csdn.net/jinzhencs/article/details/51980518
使用Mybatis进行连表查询.left join https://blog.csdn.net/jinzhencs/article/details/51980518
随机推荐
- IP地址的分类
IPv4 地址的分类: 一,组成 1. 使用32位地址 2. 以点分十进制表示,如172.16.0.0,每一个数字对应于8个二进制的比特串,称为一个位组(octets).如某一台主机的IP地址 ...
- mysql在linux下修改存储路径
通过下面几步即可修改路径,这里的路径都是测试的路径,一般默认安装路径在/var/lib/mysql下,真正配置按照真实路径配置. 1.修改/etc/sysconfig/selinux文件:#SELIN ...
- Codeforces Round #222 (Div. 1) D. Developing Game 线段树有效区间合并
D. Developing Game Pavel is going to make a game of his dream. However, he knows that he can't mak ...
- SQL位移运算函数
-- ============================================= -- Author: <maco_wang> -- Create date: & ...
- TComboBox; 指定某一行,不给下拉,只读ReadOnly 伪装 实现
//cbb1: TComboBox; 指定某一行,不给下拉,自读伪装 实现: cbb1.Style :=csSimple; //设定style 不可以下拉 cbb1.ItemIndex := ; // ...
- DataSet、DataTable、Json、List 等各种数据的相互转化
1.根据Dataset生成json格式的字符串,不管Dataset里面有多少个表都可以一一生成对应的json字符串,并一次性返回 private string dsToJson(DataSet d ...
- JSON.stringify() / JSON.parse()
JSON.stringify() 这个方法可以把javascript对象转换成json字符串. JSON.parse() 这个方法可以把 json 字符串转换成 javascript对象. [下面来看 ...
- Spark 自定义累加变量(Accmulator)AccumulatorParam
1.创建一个累加变量 public <T> Accumulator<T> accumulator(T initialValue, AccumulatorParam<T&g ...
- 不注册Activex 直接调用它
此处的Activex是ATL方式的. [ComVisible(false)] [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnk ...
- WPF 四种样式
1.内联样式<TextBlock FontSize="20" Foreground="Blue">好啊</TextBlock> 2.页面 ...