mybatis 之三:多對多關聯查詢
阿新 • • 發佈:2018-12-18
MyBatis 本是apache的一個開源專案iBatis,它 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。
學完hibernate關聯關係再來學mybatis關聯關係你會發現mybatis的關聯關係比hibernate的容易很多,今天就給大家分享一些關於mybatis的關聯查詢。
1.首先resources下面建一個mybatis-config.xml
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--錯誤日誌--> <settings> <setting name="logImpl" value="LOG4J"/> </settings> <typeAliases> <!--批量別名定義 --> <package name="com.zking.pojo"></package> </typeAliases> <!--jdbc資料連線池--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/t204?characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="sasa"/> </dataSource> </environment> </environments> <!--新增mapper的依賴--> <mappers> <mapper resource="com/zking/mapper/PersonMapper.xml"></mapper> </mappers> </configuration>
2.在資料庫分別建person,city,card三張表,表自己可以隨便建。
person人的類
Create Table |
CREATE TABLE `person` ( `pid` varchar(50) NOT NULL, `pname` varchar(50) DEFAULT NULL, PRIMARY KEY (`pid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
city城市類
Create Table |
CREATE TABLE `city` ( `cid` varchar(50) NOT NULL, `cname` varchar(50) DEFAULT NULL, `pid` varchar(50) DEFAULT NULL, PRIMARY KEY (`cid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
card中間表
Create Table |
CREATE TABLE `card` ( `cid` varchar(50) DEFAULT NULL, `cno` varchar(50) DEFAULT NULL, `pid` varchar(50) NOT NULL, PRIMARY KEY (`pid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
3.在idea裡面建立實體類
package com.zking.pojo;
import java.util.List;
/**
* 人的類
*/
public class person {
public person() {
}
//人對應城市
private List<city> cityList;
public List<city> getCityList() {
return cityList;
}
public void setCityList(List<city> cityList) {
this.cityList = cityList;
}
public person(String pid, String pname) {
this.pid = pid;
this.pname = pname;
}
private String pid;
private String pname;
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
}
package com.zking.pojo;
import java.util.List;
/**
* 城市的類
*/
public class city {
public city() {
}
//城市對應人
private List<person> personList;
public List<person> getPersonList() {
return personList;
}
public void setPersonList(List<person> personList) {
this.personList = personList;
}
public city(String cid, String cname, String pid) {
this.cid = cid;
this.cname = cname;
this.pid = pid;
}
private String cid;
private String cname;
private String pid;
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
}
package com.zking.pojo;
/**
* 中間表
*/
public class card {
public card() {
}
//人的物件
private person person;
//城市的物件
private city city;
public com.zking.pojo.person getPerson() {
return person;
}
public void setPerson(com.zking.pojo.person person) {
this.person = person;
}
public com.zking.pojo.city getCity() {
return city;
}
public void setCity(com.zking.pojo.city city) {
this.city = city;
}
public card(String cid, String cno, String pid) {
this.cid = cid;
this.cno = cno;
this.pid = pid;
}
private String cid;
private String cno;
private String pid;
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getCno() {
return cno;
}
public void setCno(String cno) {
this.cno = cno;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
}
4.建立查詢介面
package com.zking.mapper;
import com.zking.pojo.person;
import java.util.List;
/**
*人的類的介面
*/
public interface IPerson {
/**
* 查詢所有人及他們的選擇城市的資訊
*/
public List<person> selectPerson();
}
5.對映實體類對應關係,及語句
<?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.zking.mapper.IPerson">
<!-- resultMap:對映實體類和欄位之間的一一對應的關係 -->
<resultMap id="selectPersonList" type="person">
<id column="pid" property="pid"></id>
<result column="pname" property="pname"></result>
<!-- 多對多關聯對映:collection -->
<collection property="cityList" ofType="city">
<id column="cid" property="cid"></id>
<result column="cname" property="cname"></result>
</collection>
</resultMap>
<select id="selectPerson" resultMap="selectPersonList">
SELECT p.*,ci.*,ca.`cno` FROM person p, city ci, card ca
WHERE p.`pid`=ca.`pid` AND ci.`cid`=ca.`cid`
</select>
</mapper>
6.測試類
package com.zking.temp;
import com.zking.mapper.IPerson;
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 org.junit.Test;
/**
* 測試類
*/
public class PersonTemp {
@Test
public void selectPerson() throws Exception {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
IPerson ipm = sqlSession.getMapper(IPerson.class);
ipm.selectPerson();
sqlSession.close();
}
}