Mybatis學習二(字段名與實體類屬性名不相同/關聯查詢)


1.在寫項目的時候會遇到數據庫字段名與實體類屬性名不同的情況,可能是為了方便也可能是其他要求,whatever,我們現在來解決這個問題

准備一個數據庫表如下

1 CREATE TABLE orders(
2   order_id INT PRIMARY KEY AUTO_INCREMENT,
3   order_no VARCHAR(20),
4   order_price FLOAT
5 );

接下類定義一個實體類

1 public class Order {
2     private int id;
3     private String orderNo;
4     private float price;
5 }

可見我們定義的實體類與數據庫表字段名不一致,對於此有兩種解決方法

方法一:在 sql 語句中定義別名

1 <select id="selectOrder" parameterType="int" resultType="_Order">
2     select order_id id, order_no orderNo,order_price price from orders where order_id=#{id}
3 </select>

方法二:通過<resultMap>解決

<select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap">
     select * from orders where order_id=#{id}
</select>
<resultMap type="_Order" id="orderResultMap">
    <id property="id" column="order_id"/>
    <result property="orderNo" column="order_no"/>
    <result property="price" column="order_price"/>
</resultMap>

例如(其中涉及到了嵌套(association)結果的關聯查詢,接下來會解釋它)

 

 2.實現聯表查詢

定義實體類

teacher實體類

private int tId;
private String tName;

student實體類

private int sId;
private String sName;
private int ClassId;

clazz實體類

private int cId;
private String cName;
private int tId;
private Teacher teacher;
private List<Student> students;

其中clazz實體類中,一個班級對應一個老師,一個班級對應多個學生

此時的ClazzMapper.xml映射文件如下

 

 對於一對多,多對一問題我們可以有兩種解決方法

方法一:二次查詢

方法二:聯表查詢

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 4 <!-- namespace:表示名稱空間。現在的目的是區分id的. -->
 5 <mapper namespace="com.zhiyou100.zhl.dao.ClazzDao">
 6     <resultMap type="com.zhiyou100.zhl.bean.Clazz" id="mymap">
 7         <id column="c_id" property="cId"/>
 8         <result column="c_name" property="cName"/>
 9         <result column="teacher_id" property="tId"/>
10         <association property="teacher" javaType="com.zhiyou100.zhl.bean.Teacher">
11             <id column="t_id" property="tId"/>
12             <result column="t_name" property="tName"/>
13         </association>
14         <collection property="students" ofType="com.zhiyou100.zhl.bean.Student">
15             <id column="s_id" property="sId"/>
16             <result column="s_name" property="sName"/>
17         </collection>
18     </resultMap>
19     
20     <select id="selectById" resultMap="mymap">
21         select * from class c join teacher t join student s on c.teacher_id=t.t_id and s.class_id=c.c_id where c_id=#{cId};
22     </select>
23     
24 </mapper>

進行單元測試

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM