美文网首页
03——mybatis结果反射&使用

03——mybatis结果反射&使用

作者: huishao | 来源:发表于2019-01-08 19:34 被阅读0次

一、结果映射是什么?

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();

}

}

相关文章

网友评论

      本文标题:03——mybatis结果反射&使用

      本文链接:https://www.haomeiwen.com/subject/gbwbrqtx.html