03——mybatis结果反射&使用

一、结果映射是什么?

ResultMap

1.使用场景一

当数据库的列名和实体类的属性名不一致时,无法直接通过resultType接收查询结果.

那么我们可以是用resultMap属性应用一个结果映射,在结果映射中指定每一个列使用哪一个属性接收.

2. 使用场景二

可以通过resultMap配置对一关系和对多关系

二、如何使用结果映射?

在关联外部属性时,外部属性是一个对象就使用Association

Association:用于配置对一的关系

Property:指定本类中的属性名

Column:将自己的某一个列作为参数传入查询中

Select:调用外部查询获得数据

JavaType:本属性属于哪一种java类型

resultMap:引用其他的映射

Collection:用于配置对多的关系

Property:指定本类中的属性名

Column:将自己的某一个列作为参数传入查询中

Select:调用外部查询获得数据

ofType:本集合属性中的元素属于哪一种java类型

resultMap:引用其他的映射

在关联外部属性时,外部属性是一个集合就使用Collection



三、结果映射的使用

Sql

/*

Navicat MySQL Data Transfer


Source Server        : Linux_mysql

Source Server Version : 50622

Source Host          : 192.168.188.130:3306

Source Database      : db_mybatis


Target Server Type    : MYSQL

Target Server Version : 50622

File Encoding        : 65001


Date: 2019-01-06 18:21:21

*/


SET FOREIGN_KEY_CHECKS=0;


-- ----------------------------

-- Table structure for dTable

-- ----------------------------

DROP TABLE IF EXISTS `dTable`;

CREATE TABLE `dTable` (

  `dId` int(11) NOT NULL,

  `dDate` datetime DEFAULT NULL,

  `tId` int(11) DEFAULT NULL,

  PRIMARY KEY (`dId`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- ----------------------------

-- Table structure for tTable

-- ----------------------------

DROP TABLE IF EXISTS `tTable`;

CREATE TABLE `tTable` (

  `tId` int(11) NOT NULL,

  `tName` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`tId`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;


项目结构




dTableMappers.java

package mappers;


import java.util.List;


import model.dTable;


public interface dTableMappers {

List<dTable> selectAll();

}



tTableMappers.java

package mappers;


import model.tTable;


public interface tTableMappers {

public tTable selectById(Integer tId);

}



dTableMappers.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="mappers.dTableMappers">


<!-- 结果映射 base -->

<resultMap id="dtableRM" type="dTable">

<id column="dId" property="dId"/>

<result column="dDate" property="dDate"/>

<result column="tId" property="tId"/>

</resultMap>


<!-- 结果映射 1-1 -->

<resultMap id="dtableRM_s" type="dTable" extends="dtableRM">

<!-- 1、点对点返回

<result column="tName" property="tTable.tname"/>

-->

<!-- 2、使用对方的 -->

<association property="tTable" resultMap="mappers.tTableMappers.tTableRM" ></association>

</resultMap>


<!-- 多表查询 -->

<select id="selectAll" resultMap="dtableRM_s">

select * from dTable t1,tTable t2 where t1.tId=t2.tId

</select>


</mapper>



tTableMappers.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="mappers.tTableMappers">

<!-- 结果映射 base -->

<resultMap id="tTableRM" type="tTable">

<id column="tId" property="tId"/>

<result column="tName" property="tName"/>

</resultMap>

<!-- 结果映射 1-n -->

<resultMap type="tTable" id="tTableRM_ds" extends="tTableRM">

<!-- 1 自己写

<collection property="dTableList" ofType="dTable">

<id column="dId" property="dId"/><result column="dDate" property="dDate"/>

</collection>

-->

<!--2  使用对方的 -->

<collection property="dTableList" resultMap="mappers.dTableMappers.dtableRM"></collection>

</resultMap>


<!-- 根据ID查询(顺带,1-n) -->

<select id="selectById" parameterType="Integer" resultMap="tTableRM_ds">

select * from tTable t1 left join dTable t2 on t1.tId=t2.tId where t1.tId=#{tId}

</select>

</mapper>



dTable.java

package model;


public class dTable {

private Integer dId;

private String dDate;

private Integer tId;

private tTable tTable;


public dTable(Integer dId, String dDate, Integer tId) {

super();

this.dId = dId;

this.dDate = dDate;

this.tId = tId;

}


public dTable(String dDate, Integer tId) {

super();

this.dDate = dDate;

this.tId = tId;

}


public dTable() {

super();

}


public Integer getdId() {

return dId;

}


public void setdId(Integer dId) {

this.dId = dId;

}


public String getdDate() {

return dDate;

}


public void setdDate(String dDate) {

this.dDate = dDate;

}


public Integer gettId() {

return tId;

}


public void settId(Integer tId) {

this.tId = tId;

}


public tTable gettTable() {

return tTable;

}


public void settTable(tTable tTable) {

this.tTable = tTable;

}


@Override

public String toString() {

return "dTable [" +

"dId=" + dId + ", dDate=" + dDate +

", tId=" + tId +

", tname="+ tTable.gettName() +

" ]";

}

}



tTable.java

package model;


import java.util.List;


public class tTable {

private Integer tId;

private String tName;

private List<dTable> dTableList;


public tTable() {

super();

}

public tTable(String tname) {

super();

this.tName = tname;

}


public tTable(Integer tId, String tname) {

super();

this.tId = tId;

this.tName = tname;

}

public String gettName() {

return tName;

}

public void settName(String tName) {

this.tName = tName;

}


public Integer gettId() {

return tId;

}


public void settId(Integer tId) {

this.tId = tId;

}


public List<dTable> getdTableList() {

return dTableList;

}


public void setdTableList(List<dTable> dTableList) {

this.dTableList = dTableList;

}


@Override

public String toString() {

return "tTable ["

+ "tId=" + tId +

", tname=" + tName +

"]";

}

}



dTableTest.java

package service;


import java.util.ArrayList;

import java.util.HashMap;

import org.apache.ibatis.session.SqlSession;


import mappers.dTableMappers;

import mappers.tTableMappers;

import model.dTable;

import model.tTable;

import util.SqlSessionFactoryUtil;


public class dTableTest {


public static void main(String[] args) {

SqlSession sqlSession = SqlSessionFactoryUtil.openSession();


/** 1-n*/

// tTableMappers tTableMp = sqlSession.getMapper(tTableMappers.class);

// tTable tTable = tTableMp.selectById(1);

// System.out.println("id = "+tTable.gettId());

// System.out.println("name = "+tTable.gettName());

//

// if(tTable.getdTableList() != null)

// for (dTable d : tTable.getdTableList() ) {

// System.out.println("did = "+d.getdId());

// System.out.println("dDate = "+d.getdDate());

// }


/** 1-1*/

// dTableMappers studentMapper = sqlSession.getMapper(dTableMappers.class);

//

// for (dTable s : studentMapper.selectAll()) {

// System.out.println(s);

// }

sqlSession.commit();

}


}



SqlSessionFactoryUtil.java

package util;


import java.io.InputStream;


import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;


public class SqlSessionFactoryUtil {


private static SqlSessionFactory sqlSessionFactory;

public static SqlSessionFactory getSqlSessionFactory(){

if(sqlSessionFactory==null){

InputStream inputStream=null;

try{

inputStream=Resources.getResourceAsStream("mybatis-config.xml");

sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);

}catch(Exception e){

e.printStackTrace();

}

}

return sqlSessionFactory;

}

public static SqlSession openSession(){

return getSqlSessionFactory().openSession();

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342