1. 程式人生 > >Mybatis單表自動對映;使用設定對映結果集;多表查詢

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

="cn.bjsxt.pojo.User" id="userone">

         <!-- id:用於設定主鍵欄位於實體類屬性的對映關係 -->

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

         <!-- result:用於設定普通欄位與實體類屬性的對映關係-->

         <result property="uname" column="name" />

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

         <

result property="age" column="age" />

     </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"/>

         <!-- 定義集合關係

如何查詢班級中的學生

新增查詢idselect

新增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>