【Mybatis】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>

 

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 {

    @Autowired
    private BrandMapper brandMapper;

    public Example createExample(Brand brand) {
        // 自定義條件搜索對象 Example
        Example 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;
    }

    @Override
    public List<Brand> findAll() {
        return brandMapper.selectAll();
    }

    @Override
    public List<Brand> findList(Brand brand) {
        Example example = createExample(brand);
        return brandMapper.selectByExample(example);
    }

    @Override
    public Brand findById(Integer id) {
        return brandMapper.selectByPrimaryKey(id);
    }

    /**
     * 分頁查詢
     * @param page  當前頁
     * @param size  每頁顯示的條數
     * @return
     */
    @Override
    public PageInfo<Brand> pageSearch(Integer page, Integer size) {
        // 分頁實現
        // 後面的查詢必須是緊跟集合查詢
        PageHelper.startPage(page, size);
        // 查詢集合
        List<Brand> brands = brandMapper.selectAll();
        return new PageInfo<Brand>(brands);
    }

    @Override
    public 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
     */
    @Override
    public void add(Brand brand) {
        // 使用通用 Mapper.insertSelective
        // 方法中但凡帶有selective就會忽略空值
        int i = brandMapper.insertSelective(brand);
    }

    /**
     * 根據id修改品牌
     * @param brand
     */
    @Override
    public void update(Brand brand) {
        // 使用通用mapper.update();
        brandMapper.updateByPrimaryKeySelective(brand);
    }

    /**
     * 根據id刪除
     * @param id
     */
    @Override
    public void del(Integer id) {
        brandMapper.deleteByPrimaryKey(id);
    }
}

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章