參考:
https://blog.csdn.net/x18707731829/article/details/82814095
https://www.jianshu.com/p/6d2103451dcb
SpringBoot整合MyBatis Generator可以幫助我們快速生成實體類、接口、mapper.xml文件,可以提高開發的效率,但是每次新增表都要執行一次Generator生成相應的代碼,這樣重復的操作生成增刪查改重復的的代碼,有沒有一種通用的接口,不用生成mapper.xml文件,就可以調用通用接口的方法,實現單表的增刪改查操作呢,這就是tk.mybatis.mapper 支持單表操作,不支持通用的多表聯合查詢。
通用mapper的作用:調用通用接口的方法,實現單表的增刪改查操作,不需要寫大量的sql語句在xml文件中
開發人員不需要編寫sql語句,不需要在dao中增加方法,只要寫好實體類,就能支持相應的增刪改查方法
通用mapper詳解
使用通用mapper,默認繼承了如下方法
Select
方法:List<T> select(T record);
說明:根據實體中的屬性值進行查詢,查詢條件使用等號
方法:T selectByPrimaryKey(Object key);
說明:根據主鍵字段進行查詢,方法參數必須包含完整的主鍵屬性,查詢條件使用等號
方法:List<T> selectAll();
說明:查詢全部結果,select(null)方法能達到同樣的效果
方法:T selectOne(T record);
說明:根據實體中的屬性進行查詢,只能有一個返回值,有多個結果是拋出異常,查詢條件使用等號
方法:int selectCount(T record);
說明:根據實體中的屬性查詢總數,查詢條件使用等號
Insert
方法:int insert(T record);
說明:保存一個實體,null的屬性也會保存,不會使用數據庫默認值
方法:int insertSelective(T record);
說明:保存一個實體,null的屬性不會保存,會使用數據庫默認值
Update
方法:int updateByPrimaryKey(T record);
說明:根據主鍵更新實體全部字段,null值會被更新
方法:int updateByPrimaryKeySelective(T record);
說明:根據主鍵更新屬性不為null的值
Delete
方法:int delete(T record);
說明:根據實體屬性作為條件進行刪除,查詢條件使用等號
方法:int deleteByPrimaryKey(Object key);
說明:根據主鍵字段進行刪除,方法參數必須包含完整的主鍵屬性
Example方法
方法:List<T> selectByExample(Object example);
說明:根據Example條件進行查詢
重點:這個查詢支持通過Example類指定查詢列,通過selectProperties方法指定查詢列
方法:int selectCountByExample(Object example);
說明:根據Example條件進行查詢總數
方法:int updateByExample(@Param("record") T record, @Param("example") Object example);
說明:根據Example條件更新實體record包含的全部屬性,null值會被更新
方法:int updateByExampleSelective(@Param("record") T record, @Param("example") Object example);
說明:根據Example條件更新實體record包含的不是null的屬性值
方法:int deleteByExample(Object example);
說明:根據Example條件刪除數據
注解:
轉載:cnblogs.com/yirgaMonkey/p/9392412.html
1.1@Table 注解 注解
作用:建立實體類和數據庫表之間的對應關系。
默認規則:實體類類名首字母小寫作為表名。Employee 類→employee 表。
用法:在@Table 注解的 name 屬性中指定目標數據庫表的表名
1.2@Column 注解 注解
作用:建立實體類字段和數據庫表字段之間的對應關系。
默認規則:
實體類字段:駝峰式命名
數據庫表字段:使用“_”區分各個單詞
用法:在@Column 注解的 name 屬性中指定目標字段的字段名 用來解決和數據庫字段不對應的情況 @Column (" 數據庫實際字段名 ")
1.3@Id 注解 注解
通用 Mapper 在執行 xxxByPrimaryKey(key)方法時,有兩種情況。
情況 1:沒有使用@Id 注解明確指定主鍵字段
SELECT emp_id,emp_name,emp_salary_apple,emp_age FROM tabple_emp WHERE emp_id = ?
AND emp_name = ? AND emp_salary_apple = ? AND emp_age = ?
之所以會生成上面這樣的 WHERE 子句是因為通用 Mapper 將實體類中的所有
字段都拿來放在一起作為聯合主鍵。
情況 2:使用@Id 主鍵明確標記和數據庫表中主鍵字段對應的實體類字段
1.4@GeneratedValue 注解 注解
作用:讓通用 Mapper 在執行 insert 操作之后將數據庫自動生成的主鍵值回寫到實
體類對象中。
自增主鍵用法:
序列主鍵用法:
應用場景:購物車結賬
增加商品銷量...
減少商品庫存...
生成訂單數據→封裝到 Order 對象中→保存 Order 對象→數據庫自動生成主鍵
值→回寫到實體類對象 Order 中
生成一系列訂單詳情數據→List<OrderItem>→在每一個 OrderItem 中設置
Order 對象的主鍵值作為外鍵→批量保存 List<OrderItem>
@GeneratedValue(strategy = GenerationType.IDENTITY)
- 根據底層數據庫自動選擇方式,需要底層數據庫的設置
- 如MySQL,會使用自增字段,需要將主鍵設置成auto_increment。
1.5@Transient 主鍵 主鍵
用於標記不與數據庫表字段對應的實體類字段。
@Transient
private String otherThings; //非數據庫表中字段
