目錄
一、什么是 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博客文章一鍵轉載插件