激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - 詳解Mybatis通用Mapper介紹與使用

詳解Mybatis通用Mapper介紹與使用

2021-05-07 11:08Cipher''s Blog Java教程

目前通用mapper只支持對單表的操作,對單表的增刪改查,無需在mapper.xml寫對應的sql語句,只需要我們調用相應的接口,對于快速開發極為方便,感興趣的小伙伴們可以參考一下

使用mybatis的開發者,大多數都會遇到一個問題,就是要寫大量的sql在xml文件中,除了特殊的業務邏輯sql之外,還有大量結構類似的增刪改查sql。而且,當數據庫表結構改動時,對應的所有sql以及實體類都需要更改。這工作量和效率的影響或許就是區別增刪改查程序員和真正程序員的屏障。這時,通用mapper便應運而生……

什么是通用mapper

通用mapper就是為了解決單表增刪改查,基于mybatis的插件。開發人員不需要編寫sql,不需要在dao中增加方法,只要寫好實體類,就能支持相應的增刪改查方法。

如何使用

以mysql為例,假設存在這樣一張表:

?
1
2
3
4
5
6
7
8
9
10
create table `test_table` (
 `id` bigint(20) not null auto_increment,
 `name` varchar(255) default '',
 `create_time` datetime default null,
 `create_user_id` varchar(32) default null,
 `update_time` datetime default null,
 `update_user_id` varchar(32) default null,
 `is_delete` int(8) default null,
 primary key (`id`)
) engine=innodb auto_increment=1 default charset=utf8;

主鍵是 id ,自增。下面以這張表為例介紹如何使用通用mapper。

maven依賴

?
1
2
3
4
5
6
<!-- 通用mapper -->
<dependency>
  <groupid>tk.mybatis</groupid>
  <artifactid>mapper</artifactid>
  <version>3.3.9</version>
</dependency>

springmvc配置

?
1
2
3
4
5
6
7
8
9
<!-- 通用 mapper -->
<beanclass="tk.mybatis.spring.mapper.mapperscannerconfigurer">
  <propertyname="basepackage"value="cn.com.bluemoon.bd.service.spider.dao"/>
  <propertyname="properties">
    <value>
      mappers=tk.mybatis.mapper.common.mapper
    </value>
  </property>
</bean>

注意這里使用 tk.mybatis.spring.mapper.mapperscannerconfigure 替換原來mybatis的 org.mybatis.spring.mapper.mapperscannerconfigurer

可配參數介紹:

  1. uuid :設置生成uuid的方法,需要用ognl方式配置,不限制返回值,但是必須和字段類型匹配
  2. identity :取回主鍵的方式,可以配置的內容看下一篇如何使用中的介紹
  3. order : <seletkey> 中的order屬性,可選值為before和after
  4. catalog :數據庫的catalog,如果設置該值,查詢的時候表名會帶catalog設置的前綴
  5. schema :同catalog,catalog優先級高于schema
  6. seqformat :序列的獲取規則,使用{num}格式化參數,默認值為{0}.nextval,針對oracle,可選參數一共4個,對應0,1,2,3分別為sequencename,columnname, propertyname,tablename
  7. notempty :insert和update中,是否判斷字符串類型!='',少數方法會用到
  8. style :實體和表轉換時的規則,默認駝峰轉下劃線,可選值為normal用實體名和字段名;camelhump是默認值,駝峰轉下劃線;uppercase轉換為大寫;lowercase轉換為小寫
  9. enablemethodannotation :可以控制是否支持方法上的jpa注解,默認false。

大多數情況下不會用到這些參數,有特殊情況可以自行研究。

實體類的寫法

記住一個原則:實體類的字段數量 >= 數據庫表中需要操作的字段數量。默認情況下,實體類中的所有字段都會作為表中的字段來操作,如果有額外的字段,必須加上 @transient 注解。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@table(name = "test_table")
public class testtablevoimplements serializable{
  private static final long serialversionuid = 1l;
  @id
  @generatedvalue(generator = "jdbc")
  private long id;
 
  @transient
  private string userid;
  private string name;
  private timestamp createtime;
  private string createuserid;
  private timestamp updatetime;
  private string updateuserid;
  private integer isdelete; 
  // 省略get、set... 
}

說明:

  1. 表名默認使用類名,駝峰轉下劃線(只對大寫字母進行處理),如 userinfo 默認對應的表名為 user_info 。
  2. 表名可以使用 @table(name = "tablename") 進行指定,對不符合第一條默認規則的可以通過這種方式指定表名.
  3. 字段默認和 @column 一樣,都會作為表字段,表字段默認為java對象的field名字駝峰轉下劃線形式.
  4. 可以使用 @column(name = "fieldname") 指定不符合第3條規則的字段名
  5. 使用 @transient 注解可以忽略字段,添加該注解的字段不會作為表字段使用.
  6. 建議一定是有一個 @id 注解作為主鍵的字段,可以有多個 @id 注解的字段作為聯合主鍵.
  7. 如果是mysql的自增字段,加上 @generatedvalue(generator = "jdbc") 即可。

dao 的寫法

在傳統的mybatis寫法中, dao 接口需要與 mapper 文件關聯,即需要編寫 sql 來實現 dao 接口中的方法。而在通用mapper中, dao 只需要繼承一個通用接口,即可擁有豐富的方法:

繼承通用的mapper ,必須指定泛型

?
1
2
public interface testtabledaoextends mapper<testtablevo>{
}

一旦繼承了mapper ,繼承的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條件刪除數據

代碼中使用

在 service 中注入 dao ,即可使用。

?
1
2
@autowired
private testtabledao testtabledao;

下面演示大概的寫法:

新增

?
1
2
3
testtablevo vo = new testtablevo();
// 省略為vo設置屬性...
int row = testtabledao.insertselective(vo);

修改

?
1
2
3
testtablevo vo = new testtablevo();
// 省略為vo設置屬性...
int row = testtabledao.updatebyprimarykeyselective(vo);

查詢單個

?
1
2
3
testtablevo vo = new testtablevo();
vo.setid(123l);
testtablevo result = testtabledao.selectone(vo);

條件查詢

?
1
2
3
4
5
6
7
8
// 創建example
example example = new example(testtablevo.class);
// 創建criteria
example.criteria criteria = example.createcriteria();
// 添加條件
criteria.andequalto("isdelete", 0);
criteria.andlike("name", "%abc123%");
list<testtablevo> list = testtabledao.selectbyexample(example);

總結

通用mapper的原理是通過反射獲取實體類的信息,構造出相應的sql,因此我們只需要維護好實體類即可,對于應付復雜多變的需求提供了很大的便利。上文敘述的只是通用mapper的簡單用法,在實際項目中,還是要根據業務,在通用mapper的基礎上封裝出粒度更大、更通用、更好用的方法。

附 spring boot 配置

maven

?
1
2
3
4
5
6
7
8
9
10
11
12
<!--mybatis-->
<dependency>
  <groupid>org.mybatis.spring.boot</groupid>
  <artifactid>mybatis-spring-boot-starter</artifactid>
  <version>1.3.1</version>
</dependency>
<!--mapper-->
<dependency>
  <groupid>tk.mybatis</groupid>
  <artifactid>mapper-spring-boot-starter</artifactid>
  <version>1.1.4</version>
</dependency>

application.properties 配置

?
1
2
3
4
5
#mapper
#mappers 多個接口時逗號隔開
mapper.mappers=tk.mybatis.mapper.common.mapper
mapper.not-empty=false
mapper.identity=mysql

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.ciphermagic.cn/mybatis-mapper.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 老女人碰碰在线碰碰视频 | 黄网站在线免费看 | 久久国产精品网 | 成人黄视频在线观看 | 中文字幕欧美一区二区三区 | 亚洲国产视频在线 | 日本中文字幕久久 | 免费毛片小视频 | 看免费的毛片 | 亚洲99 | 狠狠ri| 日产精品一区二区三区在线观看 | 成年免费大片黄在线观看岛国 | 欧美一级高清免费 | 成人毛片100部 | 亚洲日本欧美 | 精品久久久久久久久久中出 | 乱淫67194 | 蜜桃网在线 | 800av凹凸| 在线中文字幕观看 | 国产在线播放一区二区 | 色骚综合 | 日日操夜夜操狠狠操 | 外国一级黄色片 | 久久精品国产久精国产 | 黄色网战在线观看 | 成人免费福利视频 | 男女生羞羞视频网站在线观看 | 欧美激情综合在线 | 国产精品久久久久久影院8一贰佰 | 欧美性受xxxx人人本视频 | 高潮激情aaaaa免费看 | 亚洲综合91| www.精品一区 | 青草视频在线观看视频 | 久久久一区二区三区视频 | 5xsq在线视频| 一本到免费视频 | 一级黄色播放 | 久久人人爽人人爽人人片av免费 |