mybatis中表与表之间的关联
第三天
1.mybatis处理表与表之间的关系?
比如要在帖子回复表里显示其它两张相关联表的信息。
处理的第一种方式:
1)主要的数据实体类是ReplyInfo,相关联的实体表的数据是TitleInfo,UserInfo。
那么首先创建的是ReplyInfoView的实体对象。
package com.gxa.bj.model;
public class ReplyInfoView extends ReplyInfo {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getTitleName() {
return titleName;
}
public void setTitleName(String titleName) {
this.titleName = titleName;
}
private String titleName;
}
要关联的哪些数据,就直接把该数据加入到继承类的字段里。
2)编写相应的处理接口(Mapper接口):
package com.gxa.bj.dao.imp;
import com.gxa.bj.dao.IDaoBBS;
import com.gxa.bj.model.ReplyInfo;
public interface ReplyInfoMapper extends IDaoBBS<ReplyInfo> {
}
3)编写相应的SQL配置文件(ReplyInfoMapper.xml)。
<?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.gxa.bj.dao.imp.ReplyInfoMapper">
<select id="getModel" resultType="com.gxa.bj.model.ReplyInfoView">
select r.replyid,r.replycontent as reployContent,r.replyTime,
r.titleid,r.userid,u.userName,t.titleName
from replyinfo r inner join userinfo u
on r.userid = u.userid
inner join titleinfo t
on r.titleid = t.titleid
where r.replyId = #{id}
</select>
</mapper>
4)将刚编写的mapper映射文件加入到mybatis-config.xml中:
<mappers>
<mapper resource="com/gxa/bj/model/UserInfoMapper.xml"/>
<mapper resource="com/gxa/bj/model/ReplyInfoMapper.xml"/>
</mappers>
5)编写测试类:
ReplyInfoMapper replyInfoMapper = sqlSession.getMapper(ReplyInfoMapper.class);
ReplyInfoView replyInfoView = (ReplyInfoView) replyInfoMapper.getModel("bfdc6c63ce774f21b3344f4587d69199");
System.out.println("帖子名字:"+replyInfoView.getTitleName());
System.out.println("回复的作者:"+replyInfoView.getUserName());
System.out.println("帖子的回复内容:"+replyInfoView.getReployContent());
sqlSession.close();
处理的第二种方式:(更能体现实体与实体之间的关系)
1.一对多的情况。在多的实体对象里会出现一的实体对象的属性:
实现的原理:不改变原有的实体类。加入实体与实体之间的映射结果。
实现的步骤:
1)创建一个Mapper的映射文件。TitleInfoMapper.xml.
该文件里除了相对应的多表查询的SQL语句之外,还具有结果集的映射配置。
<?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.gxa.bj.dao.imp.TitleInfoMapper">
<select id="getModel" parameterType="java.lang.String" resultMap="TitleInfoResult">
select * from titleinfo t inner join userinfo u
on t.userid = u.userid
inner join typeinfo f
on t.typeid = f.typeid
where t.titleid = #{id}
</select>
<resultMap type="com.gxa.bj.model.TitleInfo" id="TitleInfoResult">
<result column="titleid" property="titleId"></result>
<result column="titleName" property="titleName"></result>
<result column="titleTime" property="titleTime"></result>
<result column="titleContent" property="titleContent"></result>
<result column="typeId" property="typeId"></result>
<result column="userId" property="userId"></result>
<association property="titleTypeInfo" javaType="com.gxa.bj.model.TypeInfo" foreignColumn="typeId">
<id column="typeId" property="typeId"></id>
<result column="typeName" property="typeName"></result>
</association>
<association property="titleUserInfo" foreignColumn="userId" javaType="com.gxa.bj.model.UserInfo">
<id column="userId" property="userId"></id>
<result column="userName" property="userName"></result>
</association>
</resultMap>
</mapper>
其中:resultMap这个节点作为结果集的配置节点。其中的id属性就是它的引用Id(其它地方引用它的时候,是通过这个id名来引用的)。
<result>节点就是对应到数据库里的表的列名和实体对象的字段。
比如:<result column="titleName" property="titleName"></result>
column:数据库的列名
property:类的字段名
association节点表示关联的实体对象。
后续操作同之前的一样。
mybatis中表与表之间的关联的更多相关文章
- Hibernate中表与表之间的关联多对多,级联保存,级联删除
第一步:创建两个实体类:用户和角色实体类,多对多关系,并让两个实体类之间互相关联: 用户实体类: package com.yinfu.entity; import java.util.HashSet; ...
- Hibernate中表与表之间的关联一对多,级联保存和级联删除
1:Hibernate的一对多操作(重点) 一对多映射配置 第一步:创建两个实体类:客户和联系人(例)以客户为一,联系人为多: package com.yinfu.entity; public cla ...
- 【CoreData】表之间的关联
这次是表之间怎么进行关联,要求如下: // 建立学生与班级表之间的联系 既然是表与表之间的关联,那肯定是要先创建表: // 1.创建模型文件 (相当于一个数据库里的表) // New File ——— ...
- PowerDesigner如何设计表之间的关联
PowerDesigner如何设计表之间的关联 步骤/方法 在工具箱中找到参照关系工具: 由地区表到省份表之间拉参照关系,箭头指向父表,然后双击参照关系线,打开参照关系的属性: 在这里检查 ...
- [MySQL数据库之表的约束条件:primary key、auto_increment、not null与default、unique、foreign key:表与表之间建立关联]
[MySQL数据库之表的约束条件:primary key.auto_increment.not null与default.unique.foreign key:表与表之间建立关联] 表的约束条件 约束 ...
- mysql 中表与表之间的关系
如何找出两张表的对应关系 分析步骤: 1.先找出左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段 (通常是id) 2.再站 ...
- SAP 透明表之间的关联字段
VTTK-TPLST=TTDST-TPLST(装运点的关联表及描述表字段TTDST-BEZEI) VTTK-ROUTE=TVROT-ROUTE(装运线路关联表及描述表字段TVROT-BEZEI) VT ...
- CodeFirst 表之间的关联
多重性关系可以是Optional(一个属性可拥有一个单个实例或没有) Required(一个属性必须拥有一个单个实例) Many很多的(一个属性可以拥有一个集合或一个单个实例). Has方法包括如下几 ...
- MyBatis学习(二)---数据表之间关联
想要了解MyBatis基础的朋友可以通过传送门: MyBatis学习(一)---配置文件,Mapper接口和动态SQL http://www.cnblogs.com/ghq120/p/8322302. ...
随机推荐
- 基于AQS的锁
锁分为独占锁和共享锁,它们的主要实现都是依靠AbstractQueuedSynchronizer,这个类只提供一系列公共的方法,让子类来调用.基于我了解不深,从这个类的属性,方法,和独占锁的获取方式去 ...
- mysql存储过程详细教程
记录mysql存储过程中的关键语法:DELIMITER // 声明语句结束符,用于区分;CREATE PROCEDURE demo_in_parameter(IN p_in int) 声明存储过程 ...
- BeanUtils.populate的作用
它是在org.apache.commons.beanutils.BeanUtils包中的一个方法. 方法的作用:将一些 key-value 的值(例如 hashmap)映射到 bean 中的属性. ...
- openvpn配置教程
openvpn配置教程 本文是为解决本地服器能从外网访问web页,从新改写(临摹) 烂泥:ubuntu 14.04搭建OpenVPN服务器这篇文章 腾讯云为服务器,本地服务器为客户端 一.服务器安装o ...
- egrep 及扩展正则表达式
grep -E 表示支持扩展的正则表达式 grep -E = egrep 一.字符匹配: 扩展模式下的字符匹配与基本正则表达式的字符匹配相同,如: . 表示任意单个字符 [] 表示范围内人任意单个字符 ...
- nagios二次开发(四)---nagios监控原理和nagios架构简介
nagios监控原理 下面根据上面摘自网络的原理图对nagios的监控原理进行一下简单的说明: 1.nagios通过nsca进行被动监控.那么什么是被动监控呢?被动监测:就是指由被监测的服务器主动上传 ...
- Microsoft CRM 2013 设置默认组织 default organization
Microsoft CRM 2013 在部署管理器里没有设置默认组织的功能(以前4.0是有的),所以如果安装了多组织并且某些用户在多组织里同时存在这就涉及默认组织的设置问题,或者在安装outlook ...
- Debug模式下编译溢出问题
问题: 代码在Debug模式下编译报出内存溢出的错误,而Release模式下则没有. 由于Debug模式下包含调试信息,并且不作任何优化.而Release模式进行了各种优化,内存检测等操作均省去,使得 ...
- jQuery:提交表单前判断表单是否被修改过
表单加载完成后执行 : //表单中包含input(text,checkbox,hidden),select,radio, $("#editWithdrawAutoApprovedConf ...
- excel中的TEXT函数
TEXT 函数可将数值转换为文本,并可使用户通过使用特殊格式字符串来指定显示格式. TEXT(value, format_text) value 必需.数值.计算结果为数值的公式,或对包含数值的单元 ...