1. MyBatis數據輸入 1.1 Mybatis總體機制概括 1.2 概念說明 註意:這裡的簡單類型不是指的基本數據類型。 1.3 單個簡單類型參數 1.3.1 Mapper介面中的抽象方法 public interface EmpMapper { /** * 通過這個方法對應Mapper配置文 ...
1. MyBatis數據輸入
1.1 Mybatis總體機制概括
1.2 概念說明
註意:這裡的簡單類型不是指的基本數據類型。
1.3 單個簡單類型參數
1.3.1 Mapper介面中的抽象方法
public interface EmpMapper { /** * 通過這個方法對應Mapper配置文件中的SQL語句 * @param empId 當前方法的參數對應SQL語句中#{empId}聲明的參數 * @return 當前方法的返回值類型和resultType屬性指定的類型一致 */ abstract public Emp selectById(long empId); } |
1.3.2 SQL語句
<!-- resultType屬性:指定封裝查詢結果的Java實體類的全類名 Mybaits負責解析結果集,將解析得到的數據封裝到設置的JavaBean類中。 --> <select id="selectById" resultType="com.hy.bean.Emp"> <!-- Mybatis負責把SQL語句中的#{empId}部分替換成"?"占位符 在#{}內部還是要聲明一個見名知意的名稱,一般與JavaBean中屬性名保持一致 #{empId}這裡是為了方便接收Java程式傳過來的參數數據 --> select emp_id empId,emp_name empName,emp_pwd empPwd,emp_gender empGender , emp_salary empSalary from sys_emp where emp_id = #{empId} </select> |
1.4 複雜類型參數
1.4.1 實體類類型的參數
1) EmpMapper介面中抽象方法聲明
abstract public int insert(Emp emp);
2)SQL語句
<insert id=”insert”>
insert into sys_emp(emp_name,emp_pwd,emp_gender,emp_salary)
values(#{empName},#{empPwd},#{empGender},#{empSalary})
</insert>
如果是實體類類型的參數,此時,#{}中的名字就不能隨便寫了,此時表達式中的名字,就需要和Emp實體類中getXxx方法名,去掉get,然後剩下的單詞其首字母小寫後的名字相對應。
mybaits會根據#{}表達式中的名字,根據反射機制,找到Emp中的getXxx方法,獲取對應的數據。
1.4.2 對應關係如圖:
1.5 零散的簡單類型數據
1.6 Map類型參數
如果零散的簡單類型太多了,可以使用Map類型
create table sys_emp( emp_id bigint auto_increment, emp_name varchar(20), emp_pwd varchar(20), emp_gender enum('m','f'), emp_salary double(10,5), primary key(emp_id) );
INSERT INTO `sys_emp` VALUES (null, '範冰冰', 'fbb', 'f', 100.5); INSERT INTO `sys_emp` VALUES (null, '李冰冰', 'lbb', 'f', 300); INSERT INTO `sys_emp` VALUES (null, '張彬彬', 'zbb', 'm', 599); INSERT INTO `sys_emp` VALUES (null, '萬茜', 'wq', 'm', 4000); INSERT INTO `sys_emp` VALUES (null, '李若彤', 'lrt', 'm', 5000.8);
select * from `sys_emp`; |
2. Mybatis數據輸出
2.1 返回單個簡單類型
2.2 返回自增的主鍵
使用場景:保存訂單Order對象 和 訂單明細 List<OrderItem>。其中,OrderItem對應表t_order_item表,包含一個外鍵,指向t_order表中的主鍵。
insertWithKey,註意:返回值還是受影響的行數,它會將插入的主鍵,返回到傳遞過來對象指定的屬性裡面。
2.3 返回實體類型
假設我們沒有寫列的別名,則返回null,因為值無法註入,所以就算查詢出來,也沒意義,所以mybaits乾脆返回一個null給你。
2.3.1 資料庫表欄位和實體類屬性對應
給列的欄位起別名
2.3.2 如何自動的進行匹配呢?
資料庫表中欄位的命名是按照規範來進行設計的emp_name,java類中的屬性也是按規範設計的empName,那麼每次都寫別名感覺很麻煩,該如何處理???
2.4 返回Map類型
2.5 返回List類型
2.6 資料庫表的欄位和實體類屬性的對應關係
2.6.1 給表的欄位起別名
2.6.2 全局配置自動識別駝峰式命名規則
2.6.3 使用resultMap
使用resultMap標簽定義對應關係,再再後面的SQL語句中引用這個對應關係。