第三天

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中表与表之间的关联的更多相关文章

  1. Hibernate中表与表之间的关联多对多,级联保存,级联删除

    第一步:创建两个实体类:用户和角色实体类,多对多关系,并让两个实体类之间互相关联: 用户实体类: package com.yinfu.entity; import java.util.HashSet; ...

  2. Hibernate中表与表之间的关联一对多,级联保存和级联删除

    1:Hibernate的一对多操作(重点) 一对多映射配置 第一步:创建两个实体类:客户和联系人(例)以客户为一,联系人为多: package com.yinfu.entity; public cla ...

  3. 【CoreData】表之间的关联

    这次是表之间怎么进行关联,要求如下: // 建立学生与班级表之间的联系 既然是表与表之间的关联,那肯定是要先创建表: // 1.创建模型文件 (相当于一个数据库里的表) // New File ——— ...

  4. PowerDesigner如何设计表之间的关联

    PowerDesigner如何设计表之间的关联   步骤/方法 在工具箱中找到参照关系工具:   由地区表到省份表之间拉参照关系,箭头指向父表,然后双击参照关系线,打开参照关系的属性:   在这里检查 ...

  5. [MySQL数据库之表的约束条件:primary key、auto_increment、not null与default、unique、foreign key:表与表之间建立关联]

    [MySQL数据库之表的约束条件:primary key.auto_increment.not null与default.unique.foreign key:表与表之间建立关联] 表的约束条件 约束 ...

  6. mysql 中表与表之间的关系

    如何找出两张表的对应关系 分析步骤: 1.先找出左表的角度去找 ​ 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段 (通常是id) 2.再站 ...

  7. SAP 透明表之间的关联字段

    VTTK-TPLST=TTDST-TPLST(装运点的关联表及描述表字段TTDST-BEZEI) VTTK-ROUTE=TVROT-ROUTE(装运线路关联表及描述表字段TVROT-BEZEI) VT ...

  8. CodeFirst 表之间的关联

    多重性关系可以是Optional(一个属性可拥有一个单个实例或没有) Required(一个属性必须拥有一个单个实例) Many很多的(一个属性可以拥有一个集合或一个单个实例). Has方法包括如下几 ...

  9. MyBatis学习(二)---数据表之间关联

    想要了解MyBatis基础的朋友可以通过传送门: MyBatis学习(一)---配置文件,Mapper接口和动态SQL http://www.cnblogs.com/ghq120/p/8322302. ...

随机推荐

  1. Mac PHP 环境配置+渗透环境

    /* 最近购入一台mac pro 配置自己的php环境以及渗透环境 留个笔记 */ Mac 自带的PHP 加 apache 所以就不需要install 咯.只需要down个mysql 就好了. 0x1 ...

  2. 使用github参与开源项目

    github上有很多非常优秀的开源项目,作为开源项目的受益者,你否想过为开源项目贡献自己的代码?

  3. vim使用命令

    * 向前搜索当前单词 # 向后搜索当前单词 n 和 shift n(N) 向后向前跳到所匹配的单词处 C-f  page down;  C-b page up C-o 回到上次位置 C-i   &qu ...

  4. HTML5 canvas beginPath() 方法

    beginPath() 方法开始一条路径,或重置当前的路径.w3school上的解释! 路径是canvas里很重要的一个概念,刚开始学canvas的人对路径理解不是很深,他们在用canvas的时候会乱 ...

  5. 详解收发不畅原因及U-Mail邮件中继解决之道

    邮件在商务往来中扮演着信息交流的重要角色,假如传输受阻,必将造成沟通不畅:可能三五封邮件的投递你意识不到其重要性,但假如长期需和客户保持沟 通,则需要保证其一贯的稳定性,这就很考验相关软件平台的性能是 ...

  6. Win7与Mint双系统安装体验

    双系统安装前的准备 1.安装前的准备 安装双系统可能会对磁盘文件带来一些影响,为了避免在安装过程中由于系统瘫痪造成不必要的损失,所以我们在准备安装双系统之前,要对PC机中的重要文件进行备份,对资料要做 ...

  7. error-2016-2-15

    错误:该请求包含双重转义序列,而 Web 服务器上配置的请求筛选拒绝双重转义序列原因:一些URL中可能会包含+号等符号,然后IIS7以上的版本会默认拒绝请求此URL,需要进行如下的修改. 解决PHP中 ...

  8. oricle数据库关于定时

  9. 编码UTF-8

    ☯,首先,这并不是图片,这是一个unicode字符,Yin Yang,即阴阳符,码点为U+262F.如果你的浏览器无法显示,可以查看这个链接http://www.fileformat.info/inf ...

  10. javascript中 for循环的应用

    1.有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量是0.00001kg,第二个里面放2粒,第三个里面放4,棋盘上放的所有芝麻的重量 <script> var sum=0; //一 ...