TKMybatis 介紹和使用

目錄

一、什么是 TKMybatis

二、TKMybatis 使用

2.1 Springboot 項目中加入依賴

2.2?使用講解

2.2.1 實體類中使用

2.2.2 dao中使用

2.2.3 Service 層中使用

2.3 實際案例

2.3.1 dao 層使用

2.3.2 service 層使用


一、什么是 TKMybatis

TKMybatis 是基于 Mybatis 框架開發的一個工具,內部實現了對單表的基本數據操作,只需要簡單繼承 TKMybatis 提供的接口,就能夠實現無需編寫任何 sql 即能完成單表操作。

?

二、TKMybatis 使用

2.1 Springboot 項目中加入依賴

<!--通用mapper起步依賴-->
<dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.0.4</version>
</dependency>

在 POJO 類中加入依賴

<!--每個工程都有Pojo,都需要用到該包對應的注解-->
<dependency><groupId>javax.persistence</groupId><artifactId>persistence-api</artifactId><version>1.0</version><scope>compile</scope>
</dependency>

在啟動類中配置 @MapperScan 掃描

@SpringBootApplication
@MapperScan(basePackages = {"com.tom.order.mapper"})
public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}
}

?

2.2?使用講解

2.2.1 實體類中使用

在實體類中,常用的注解和意義為:

@Table:描述數據庫表信息,主要屬性有name(表名)、schema、catalog、uniqueConstraints等。

@Id:指定表主鍵字段,無屬性值。

@Column:描述數據庫字段信息,主要屬性有name(字段名)、columnDefinition、insertable、length、nullable(是否可為空)、precision、scale、table、unique、updatable等。

@ColumnType:描述數據庫字段類型,可對一些特殊類型作配置,進行特殊處理,主要屬性有jdbcType、column、typeHandler等。

其他注解如:@Transient、@ColumnResult、@JoinColumn、@OrderBy、@Embeddable等暫不描述

?

2.2.2 dao中使用

單表操作,只需要繼承 tk.mybatis 下的 Mapper 接口即可使用

import tk.mybatis.mapper.common.Mapper;@Repository
public interface BrandMapper extends Mapper<Brand> {
}

查看具體使用:內部都已經封裝了基本的單表操作

?

2.2.3 Service 層中使用

操作類型介紹
增加Mapper.insert(record);保存一個實體,null的屬性也會保存,不會使用數據庫默認值
Mapper.insertSelective(record);保存一個實體,忽略空值,即沒提交的值會使用使用數據庫默認值
?
刪除Mapper.delete(record);根據實體屬性作為條件進行刪除,查詢條件使用等號
Mapper.deleteByExample(example)根據Example條件刪除數據
Mapper.deleteByPrimaryKey(key)根據主鍵字段進行刪除,方法參數必須包含完整的主鍵屬性
?
修改Mapper.updateByExample(record,example)根據Example條件更新實體`record`包含的全部屬性,null值會被更新
Mapper.updateByExampleSelective(record, example)根據Example條件更新實體`record`包含的不是null的屬性值
Mapper.updateByPrimaryKey(record)根據主鍵更新實體全部字段,null值會被更新
Mapper.updateByPrimaryKeySelective(record)根據主鍵更新屬性不為null的值
?
查詢Mapper.select(record)根據實體中的屬性值進行查詢,查詢條件使用等號
Mapper.selectAll()查詢全部結果
Mapper.selectByExample(example)根據Example條件進行查詢
Mapper.selectByPrimaryKey(key)根據主鍵字段進行查詢,方法參數必須包含完整的主鍵屬性,查詢條件使用等號
Mapper.selectCount(record)根據實體中的屬性查詢總數,查詢條件使用等號
Mapper.selectCountByExample(example)根據Example條件進行查詢總數
Mapper.selectOne(record)

根據實體中的屬性進行查詢,只能有一個返回值,有多個結果是拋出異常,查詢條件使用等號。

但是如果存在某個屬性為int,則會初始化為0。可能影響到實際使用

?

2.3 實際案例

2.3.1 dao 層使用

 
import tk.mybatis.mapper.common.Mapper;/*** DAO 使用通用Mapper* DSO接口需要繼承 tk.mybatis.mapper.common.Mapper*/
@Repository
public interface BrandMapper extends Mapper<Brand> {}

?

2.3.2 service 層使用

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;import java.util.List;@Service
public class BrandServiceImpl implements BrandService {@Autowiredprivate BrandMapper brandMapper;public Example createExample(Brand brand) {// 自定義條件搜索對象 ExampleExample example = new Example(Brand.class);Example.Criteria criteria = example.createCriteria(); //條件構造器if (brand != null) {if (!StringUtils.isEmpty(brand.getName())) {criteria.andLike("name", '%' + brand.getName() + '%');}if (!StringUtils.isEmpty(brand.getLetter())) {criteria.andEqualTo("letter", brand.getLetter());}}return example;}@Overridepublic List<Brand> findAll() {return brandMapper.selectAll();}@Overridepublic List<Brand> findList(Brand brand) {Example example = createExample(brand);return brandMapper.selectByExample(example);}@Overridepublic Brand findById(Integer id) {return brandMapper.selectByPrimaryKey(id);}/*** 分頁查詢* @param page  當前頁* @param size  每頁顯示的條數* @return*/@Overridepublic PageInfo<Brand> pageSearch(Integer page, Integer size) {// 分頁實現// 后面的查詢必須是緊跟集合查詢PageHelper.startPage(page, size);// 查詢集合List<Brand> brands = brandMapper.selectAll();return new PageInfo<Brand>(brands);}@Overridepublic PageInfo<Brand> pageSearchAndCondition(Brand brand, Integer page, Integer size) {// 開始分頁PageHelper.startPage(page, size);// 搜索數據Example example = createExample(brand);List<Brand> list = brandMapper.selectByExample(example);return new PageInfo<Brand>(list);}/*** 增加品牌* @param brand*/@Overridepublic void add(Brand brand) {// 使用通用 Mapper.insertSelective// 方法中但凡帶有selective就會忽略空值int i = brandMapper.insertSelective(brand);}/*** 根據id修改品牌* @param brand*/@Overridepublic void update(Brand brand) {// 使用通用mapper.update();brandMapper.updateByPrimaryKeySelective(brand);}/*** 根據id刪除* @param id*/@Overridepublic void del(Integer id) {brandMapper.deleteByPrimaryKey(id);}
}

?

三、擴展介紹

https://juejin.im/post/5cbfd158f265da038860b82f

?

?

?


---------------------
作者:AldarLin
來源:CSDN
原文:https://blog.csdn.net/qq_34416331/article/details/106322596
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!
內容解析By:CSDN,CNBLOG博客文章一鍵轉載插件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284008.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284008.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284008.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

angularjs的ng-repeat回調

首先html代碼是這樣的&#xff1a; <label>Name des Leiters:</label><select name"leaderID" id"selectLeaderID"><option ng-repeat"manager in managers" value"leader_id{{manager.id}}&leader_name{{manager…

sed和vim練習

1、刪除/etc/grub2.conf文件中所有以空白開頭的行行首的空白字符sed s^[[:space:]]\ /etc/grub2.conf2、刪除/etc/fstab文件中所有以#開頭&#xff0c;后面至少跟一個空白字符的行的行首的#和空白字符sed -n s^#[[:space:]]\p /etc/fstab3、在/root/install.log每一行行首增加#…

WinForm(三)揭開可視化控件的面紗

WinForm所見即所得的UI設計框架&#xff0c;開發效率確實有所提升&#xff0c;同時降低了編程門檻&#xff0c;讓WinForm更普及。拖拖拽拽就能設計出一個界面&#xff0c;那么我們拖拽的這些東西是什么&#xff1f;它們是什么原理&#xff1f;。WinForm我覺得很好的一點是&…

淺談 maxMemory , totalMemory , freeMemory 和 OOM 與 native Heap

作者&#xff1a;林冠宏 / 指尖下的幽靈 掘金&#xff1a;https://juejin.im/user/587f0dfe128fe100570ce2d8 博客&#xff1a;http://www.cnblogs.com/linguanh/ GitHub &#xff1a; https://github.com/af913337456/ 騰訊云專欄&#xff1a; https://cloud.tencent.com/deve…

RestTemplate 詳解

在項目中&#xff0c;當我們需要遠程調用一個 HTTP 接口時&#xff0c;我們經常會用到 RestTemplate 這個類。這個類是 Spring 框架提供的一個工具類。Spring 官網對它的介紹如下&#xff1a; RestTemplate: The original Spring REST client with a synchronous, template met…

初識Spark2.0之Spark SQL

內存計算平臺Spark在今年6月份的時候正式發布了spark2.0&#xff0c;相比上一版本的spark1.6版本&#xff0c;在內存優化&#xff0c;數據組織&#xff0c;流計算等方面都做出了較大的改變&#xff0c;同時更加注重基于DataFrame數據組織的MLlib&#xff0c;更加注重機器學習整…

webpack開發Vue配置

一直以來使用webpack都是用的別人的配置&#xff0c;這幾天自己學習了一下。 項目地址&#xff1a;https://github.com/donghaohao... 新建整個工程 npm init安裝依賴&#xff0c;這里我們開發vue項目&#xff0c;npm install vue --save&#xff0c;然后是開發時的依賴npm ins…

ABP詳細教程——模塊類

概述模塊化是ABP vNext的最大亮點&#xff0c;也是ABP vNext框架的核心&#xff0c;而模塊類是ABP vNext框架模塊化的核心要素。這一章節&#xff0c;我就從模塊類的用法、運行機制、源代碼等層面&#xff0c;帶大家詳細了解ABP vNext的模塊類。用法在ABP的約定中&#xff0c;每…

[轉]Eureka工作原理

目錄 Eureka 工作原理 Eureka 核心概念 自我保護機制 Eureka 集群原理 Eurka 工作流程 總結 Eureka 工作原理 上節內容為大家介紹了&#xff0c;注冊中心 Eureka 產品的使用&#xff0c;以及如何利用 Eureka 搭建單臺和集群的注冊中心。這節課我們來繼續學習 Eureka&…

centos7下別名(alias)的特殊用法

版權聲明&#xff1a;轉載請注明出處:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79438200 參考&#xff1a;https://www.cyberciti.biz/faq/bash-bypass-alias-command-on-linux-macos-unix/ 正常情況下&#xff0c;定義過的別名&a…

解決WDCP3環境gbk網站編碼程序亂碼問題

因為默認WDCP V3版本環境編碼格式是UTF-8版本&#xff0c;如果我們程序采用的是GBK編碼肯定都會有亂碼問題。 我們到WDCP后臺&#xff0c;"網站管理"-"PHP設置"&#xff0c;看到上圖所示&#xff0c;準備直接在線編輯PHP.INI文件。 這里我們找到"defa…

重談聯想5G編碼投票事件

此前&#xff0c;司馬南談了聯想好幾個問題&#xff0c;其中最尖銳的要屬國有資產流失&#xff0c;這是聯想管理層無法回避的死穴。不過&#xff0c;司馬南批判聯想5G投票背刺H公司&#xff0c;這基本就是造謠了。當年&#xff0c;媒體把編碼投票炒作的很厲害&#xff0c;抨擊聯…

JStorm2.1.1集群的安裝和使用

為什么80%的碼農都做不了架構師&#xff1f;>>> JStorm2.1.1集群的安裝和使用 Storm是一個免費開源、分布式、高容錯的實時計算系統&#xff0c;而JStorm是阿里巴巴開源的基于Storm采用Java重寫的一套分布式實時流計算框架&#xff0c;在性能和支持的集群規模上做了…

Hystrix 原理

Hystrix是什么&#xff1f; Hystrix是Netflix開源庫&#xff0c;這是一個針對分布式系統的延遲和容錯庫。 Hystrix 供分布式系統使用&#xff0c;提供延遲和容錯功能&#xff0c;隔離遠程系統、訪問和第三方程序庫的訪問點&#xff0c;防止級聯失敗&#xff0c;保證復雜的分布…

「深度」無人機實名制政策特稿|市場看好、資本關注,“反黑飛”正在崛起

從政策和需求來看&#xff0c;“反黑飛”越來越重要&#xff0c;市場也正在不斷崛起。 對于大多數人來說&#xff0c;今天是最適合明目張膽“裝嫩”的六一兒童節。不過&#xff0c;在無人機廠商和無人機玩家的眼里&#xff0c;今天是無人機實名制政策正式實施的日子。 近年來&…

在navicat中新建數據庫

前言&#xff1a; 在本地新建一個名為editor的數據庫&#xff1b; 過程&#xff1a; 1.&#xff1b; 2.選擇&#xff1a;utf8mb4 -- UTF-8 Unicode字符集&#xff0c;原因在于&#xff1a;utf8mb4兼容utf8&#xff0c;且比utf8能表示更多的字符。&#xff0c;而且它支持表情符號…

MASA Stack 第三期社區例會

MASA Blazor 0.5.0發版內容功能Autocomplete&#xff1a;支持通過設置AutoSelectFirst參數開啟自動選擇第一項的功能&#xff0c;支持CacheItems參數&#xff0c;增強使用上下鍵的用戶體驗。BottomNavigation&#xff1a;&#xff1a;一個替代側邊欄的新組件。它主要用于移動應…

MySQL添加用戶、刪除用戶與授權

MySql中添加用戶,新建數據庫,用戶授權,刪除用戶,修改密碼(注意每行后邊都跟個;表示一個命令語句結束): 1.新建用戶 1.1 登錄MYSQL&#xff1a; >mysql -u root -p >密碼 1.2 創建用戶&#xff1a; mysql> insert into mysql.user(Host,User,Password) values("lo…

[轉]高并發架構設計之--「服務降級」、「服務限流」與「服務熔斷」

目錄 服務降級 1 、簡介 2 、使用場景 3 、核心設計 3.1 分布式開關 3.2 自動降級分類 3.3 配置中心 3.4 處理策略 3.5 降級分類 3.6 服務降級要考慮的問題 4 、高級特性 4.1 分級降級 4.2 降級權值 5 、總結與展望 服務限流 一、為什么要做服務限流設計&…

【Linux】【Services】【nfs】nfs安裝與配置

1. 概念 1.1. NFS&#xff1a;Network File System&#xff0c;傳統意義上&#xff0c;文件系統在內核中實現。 1.2. RPC&#xff1a;Remote Procedure Call protocol&#xff0c;遠程過程調用&#xff0c;函數調用&#xff08;遠程主機上的函數&#xff09; 1.3. 端口&#xf…