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>
進行單元測試