Mybatis實(shí)現(xiàn)關(guān)聯(lián)關(guān)系映射的方法示例
類和類有關(guān)聯(lián),將查詢的結(jié)果注入到對(duì)象和對(duì)象的關(guān)聯(lián)關(guān)系中
Mybatis處理的關(guān)聯(lián)關(guān)系 包括一對(duì)一關(guān)聯(lián) 和 一對(duì)多關(guān)聯(lián) ,例如學(xué)生關(guān)聯(lián)班級(jí)是一對(duì)一 ;班級(jí)關(guān)聯(lián)學(xué)生是一對(duì)多。
Mybatis實(shí)現(xiàn)關(guān)聯(lián)關(guān)系映射,有兩種方式:多表連接 和 子查詢
數(shù)據(jù)庫表結(jié)構(gòu)
tb_project

tb_cmpany

一、實(shí)現(xiàn)Project關(guān)聯(lián)Company一對(duì)一關(guān)聯(lián)
Company.java
package com.hyxy.po;
import java.util.List;
public class Company {
private int cId;
private String cName;
public int getcId() {
return cId;
}
public void setcId(int cId) {
this.cId = cId;
}
public String getcName() {
return cName;
}
public void setcName(String cName) {
this.cName = cName;
}
}Project.java
Project中聲明Company類型的屬性
package com.hyxy.po;
public class Project {
private int pId;
private String projectName;
private int cId;
private int empId;
private int amt;
private Company company;
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
public int getpId() {
return pId;
}
public void setpId(int pId) {
this.pId = pId;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public int getcId() {
return cId;
}
public void setcId(int cId) {
this.cId = cId;
}
public int getEmpId() {
return empId;
}
public void setEmpId(int empId) {
this.empId = empId;
}
public int getAmt() {
return amt;
}
public void setAmt(int amt) {
this.amt = amt;
}
}ProjectDao.java
package com.hyxy.dao;
import com.hyxy.po.Project;
import java.util.List;
public interface ProjectDao {
public List<Project> select();
}ProjectMapper.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">
<!--所有映射文件中的sql語句,為了區(qū)分多個(gè)映射文件,使用命名空間+id進(jìn)行區(qū)分。namespace命名空間-->
<mapper namespace="com.hyxy.dao.CompanyDao">
<!--自定義結(jié)果映射-->
<resultMap id="resultMap" type="com.hyxy.po.Company">
<!--如果數(shù)據(jù)庫中有主鍵,寫id映射-->
<id column="companyid" property="cId"></id>
<result column="companyname" property="cName"></result>
<!--一對(duì)多關(guān)系映射 (全類名.resultMap)-->
<collection property="list" resultMap="com.hyxy.dao.ProjectDao.resultMap">
</collection>
</resultMap>
<!--
查詢所有的項(xiàng)目信息,多表連接查詢關(guān)聯(lián)的客戶信息,
把項(xiàng)目信息注入到Project對(duì)象中,把客戶信息注入到Company對(duì)象中
Company對(duì)象注入到Project對(duì)象的company屬性中
-->
<select id="select" resultMap="resultMap">
select * from tb_company c
inner join tb_project p on p.companyid=c.companyid
</select>
</mapper>Test1.java
package com.hyxy;
import com.hyxy.dao.ProjectDao;
import com.hyxy.po.Project;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
//接口綁定,動(dòng)態(tài)查詢,關(guān)聯(lián)關(guān)系查詢
public class Test1 {
public static void main(String[] args) {
Reader reader=null;
try{
reader= Resources.getResourceAsReader("configuration.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession=sqlSessionFactory.openSession();
//一對(duì)一
ProjectDao projectDao=sqlSession.getMapper(ProjectDao.class);
List<Project> list =projectDao.select();
for(Project p:list){
System.out.println(p.getcId()+","+p.getProjectName()+","+p.getCompany().getcName());
}
}catch (IOException e){
e.printStackTrace();
}
}
}運(yùn)行結(jié)果:

或者
ProjectMapper.xml
<!-- 使用已經(jīng)定義好的一個(gè) resultMap --> <association property="company" resultMap="com.hyxy.dao.CompanyDao.resultMap"> </association>
CompanyMapper.xml
<mapper namespace="com.hyxy.dao.CompanyDao">
<resultMap id="resultMap" type="com.hyxy.po.Company">
<id column="companyid" property="cId"></id>
<result column="companyname" property="cname"></result>
</resultMap>
</mapper>二、實(shí)現(xiàn)Company關(guān)聯(lián)Project一對(duì)多關(guān)系
Company類中聲明 List<Project> 屬性
Company.java
package com.hyxy.po;
import java.util.List;
public class Company {
private int cId;
private String cName;
private List<Project> list;//實(shí)現(xiàn)Company關(guān)聯(lián)Project 一對(duì)多
public List<Project> getList() {
return list;
}
public void setList(List<Project> list) {
this.list = list;
}
public int getcId() {
return cId;
}
public void setcId(int cId) {
this.cId = cId;
}
public String getcName() {
return cName;
}
public void setcName(String cName) {
this.cName = cName;
}
}CompanyDao.java
package com.hyxy.dao;
import com.hyxy.po.Company;
import java.util.List;
public interface CompanyDao {
public List<Company> select();
}CompanyMapper.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">
<!--所有映射文件中的sql語句,為了區(qū)分多個(gè)映射文件,使用命名空間+id進(jìn)行區(qū)分。namespace命名空間-->
<mapper namespace="com.hyxy.dao.CompanyDao">
<!--自定義結(jié)果映射-->
<resultMap id="resultMap" type="com.hyxy.po.Company">
<!--如果數(shù)據(jù)庫中有主鍵,寫id映射-->
<id column="companyid" property="cId"></id>
<result column="companyname" property="cName"></result>
<!--一對(duì)多關(guān)系映射 (全類名.resultMap)-->
<collection property="list" resultMap="com.hyxy.dao.ProjectDao.resultMap">
</collection>
</resultMap>
<select id="select" resultMap="resultMap">
select * from tb_company c
inner join tb_project p on p.companyid=c.companyid
</select>
</mapper>Test2.java
package com.hyxy;
import com.hyxy.dao.CompanyDao;
import com.hyxy.po.Company;
import com.hyxy.po.Project;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
//接口綁定,動(dòng)態(tài)查詢,關(guān)聯(lián)關(guān)系查詢
public class Test2 {
public static void main(String[] args) {
Reader reader=null;
try{
reader= Resources.getResourceAsReader("configuration.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession=sqlSessionFactory.openSession();
//一對(duì)多
CompanyDao companyDao=sqlSession.getMapper(CompanyDao.class);
List<Company> list= companyDao.select();
for(Company c:list){
System.out.println(c.getcName());
for(Project p:c.getList()){
System.out.println(p.getProjectName());
}
System.out.println("--------------------");
}
}catch (IOException e){
e.printStackTrace();
}
}
}運(yùn)行結(jié)果:

一對(duì)一關(guān)聯(lián)使用<association>,一對(duì)多關(guān)聯(lián)使用<collection>
三、Mybatis子查詢方式實(shí)現(xiàn)關(guān)聯(lián)關(guān)系查詢
ProjectMapper.xml
<association property="company" javaType="com.hyxy.po.Company" column="companyid" select="com.hyxy.dao.CompanyDao.selectById"> </association>
<select id="select" resultMap="resultMap">
select * from tb_project
</select>CompanyMapper.xml
<mapper namespace="com.hyxy.dao.CompanyDao">
<resultMap id="resultMap" type="com.hyxy.po.Company">
<id column="companyid" property="companyId"></id>
<result column="companyname" property="companyName"></result>
<collection property="list" resultMap="com.hyxy.dao.ProjectDao.resultMap">
</collection>
</resultMap>
<select id="select" resultMap="resultMap">
select * from tb_company c inner join tb_project p on c.companyid = p.companyid
</select>
<select id="selectById" resultMap="resultMap" parameterType="int">
select * from tb_company where companyid = #{id}
</select>
</mapper>到此這篇關(guān)于Mybatis實(shí)現(xiàn)關(guān)聯(lián)關(guān)系映射的方法示例的文章就介紹到這了,更多相關(guān)Mybatis 關(guān)聯(lián)關(guān)系映射內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
struts升級(jí)到2.5.2遇到的問題及解決方案(推薦)
原來的版本是2.3.x,由于安全原因需要升級(jí)到2.5.2。但是在升級(jí)過程中遇到各種各樣的問題,下面小編給大家?guī)砹藄truts升級(jí)到2.5.2遇到的問題及解決方案,需要的朋友參考下吧2016-11-11
Java去掉小數(shù)點(diǎn)后面無效0的方案與建議
當(dāng)前小數(shù)點(diǎn)后面的位數(shù)過多的時(shí)候,多余的0沒有實(shí)際意義,下面這篇文章主要給大家介紹了關(guān)于Java去掉小數(shù)點(diǎn)后面無效0的方案與建議,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
淺析Java?NIO?直接緩沖區(qū)和非直接緩沖區(qū)
本篇文章主要為大家介紹了Java?NIO?中直接緩沖區(qū)和非直接緩沖區(qū)的定義以及使用流程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11
JavaWeb Spring依賴注入深入學(xué)習(xí)
這篇文章主要為大家詳細(xì)介紹了JavaWeb Spring依賴注入,深入學(xué)習(xí)Spring依賴注入,感興趣的小伙伴們可以參考一下2016-09-09
Spring實(shí)戰(zhàn)之屬性覆蓋占位符配置器用法示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之屬性覆蓋占位符配置器用法,結(jié)合實(shí)例形式分析了Spring屬性覆蓋占位符配置器相關(guān)原理、配置與使用技巧,需要的朋友可以參考下2019-12-12
Spring?Security放行的接口Knife4j靜態(tài)資源的問題小結(jié)
這篇文章主要介紹了Spring?Security使用Knife4j靜態(tài)資源的問題小結(jié),項(xiàng)目中使用?Spring?Security?做身份認(rèn)證和授權(quán),使用?Knife4j?做接口調(diào)試,需要?Spring?Security?放行的接口記錄在?RequestMatcherConstant?類中,感興趣的朋友跟隨小編一起看看吧2024-02-02
Java 獲取本機(jī)的IP與MAC地址實(shí)現(xiàn)詳解
這篇文章主要介紹了Java 獲取本機(jī)的IP與MAC地址實(shí)現(xiàn)詳解的相關(guān)資料,需要的朋友可以參考下2016-09-09

