Mybatis單表自動對映;使用設定對映結果集;多表查詢
1. 自動對映【資料庫欄位名與實體類的屬性名一致】
<select id="selectList" resultType="cn.bjsxt.pojo.User"> select id,name,pwd,age from t_user </select> |
2. 使用resultMap設定對映結果集【資料庫欄位名與實體類的屬性名不一致】
<!-- resultMap:定義結果集對映 id:代表結果集的唯一標記 type:結果集的型別,類的全路徑名,或者別名 --> <resultMap type <!-- id:用於設定主鍵欄位於實體類屬性的對映關係 --> <id property="id" column="id" /> <!-- result:用於設定普通欄位與實體類屬性的對映關係--> <result property="uname" column="name" /> <result property="pwd" column="pwd" /> < </resultMap> <select id="selectList" resultMap="userone"> select id,name, pwd,age from t_user </select> |
3. Mybatis查詢方式
a) 一對一關係, 查詢學生所在的班級。
第一種方式
<?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"> <!-- namespace:SQL標籤名稱空間 --> <mapper namespace="cn.bjsxt.mapper.StudentMapper"> <select id="selectList" resultType="cn.bjsxt.pojo.Student"> SELECT s.id,s.name ,s.gender ,s.age ,c.id as 'classes.cid',c.name as 'classes.cname',c.beginTime as 'classes.beginTime' from t_student s LEFT JOIN t_classes c ON c.id = s.cid </select> </mapper> |
第二種方式
<resultMap type="cn.bjsxt.pojo.Student" id="stuMap"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="gender" column="gender"/> <result property="age" column="age"/> <!-- 對映的實體類 property:關係資料屬性名 javaType:關係資料屬性型別 --> <association property="classes" javaType="cn.bjsxt.pojo.Classes"> <id property="cid" column="id"/> <result property="cname" column="name"/> <result property="beginTime" column="beginTime"/> </association> </resultMap> <select id="selectList" resultMap="stuMap"> SELECT s.id,s.name ,s.gender ,s.age, c.id,c.name,c.beginTime from t_student s LEFT JOIN t_classes c ON c.id = s.cid </select> |
b) 一對多關係:查詢所有班級,並查詢班級中所有學生集合
i. 一次訪問資料庫的方式
<!-- 1對多關係 --> <resultMap type="cn.bjsxt.pojo.Classes" id="clsMap"> <id property="cid" column="cid"/> <result property="cname" column="cname"/> <result property="beginTime" column="beginTime"/> <!-- 定義集合關係 property:關係屬性名 javaType:關係物件屬性:list:ArrayList ofType:集合的泛型 --> <collection property="students" javaType="java.util.ArrayList" ofType="cn.bjsxt.pojo.Student"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="gender" column="gender"/> <result property="age" column="age"/> </collection> </resultMap> <select id="selectList" resultMap="clsMap"> SELECT s.id,s.name ,s.gender ,s.age, c.id as cid ,c.name as cname,c.beginTime from t_student s right JOIN t_classes c ON c.id = s.cid </select> 注意:id衝突問題 |
c) N+1次訪問資料方式
<!-- 多次訪問資料庫 --> <resultMap type="cn.bjsxt.pojo.Classes" id="clsMap1"> <id property="cid" column="id"/> <result property="cname" column="name"/> <result property="beginTime" column="beginTime"/> <!-- 定義集合關係 如何查詢班級中的學生 新增查詢id:select 新增id值:column --> <collection property="students" javaType="java.util.ArrayList" ofType="cn.bjsxt.pojo.Student" select="selStu" column="id"> </collection> </resultMap> <!-- 查詢班級資訊 --> <select id="selectList1" resultMap="clsMap1"> select id , name , begintime from t_classes </select> <!-- 查詢學生資訊 --> <select id="selStu" resultType="cn.bjsxt.pojo.Student"> select * from t_student where cid = #{id} </select> |