最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TKMybatis的介紹和使用詳解

 更新時(shí)間:2021年12月01日 10:41:53   作者:AldarLin  
TKMybatis 是基于 Mybatis 框架開發(fā)的一個(gè)工具,本文主要介紹了TKMybatis的介紹和使用詳解,內(nèi)部實(shí)現(xiàn)了對單表的基本數(shù)據(jù)操作,只需要簡單繼承 TKMybatis 提供的接口,就能夠?qū)崿F(xiàn)無需編寫任何 sql 即能完成單表操作,感興趣的可以了解一下

一、什么是 TKMybatis

TKMybatis 是基于 Mybatis 框架開發(fā)的一個(gè)工具,內(nèi)部實(shí)現(xiàn)了對單表的基本數(shù)據(jù)操作,只需要簡單繼承 TKMybatis 提供的接口,就能夠?qū)崿F(xiàn)無需編寫任何 sql 即能完成單表操作。

二、TKMybatis 使用

2.1 Springboot 項(xiàng)目中加入依賴

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

在 POJO 類中加入依賴

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

在啟動(dòng)類中配置 @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 實(shí)體類中使用

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

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

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

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

@ColumnType:描述數(shù)據(jù)庫字段類型,可對一些特殊類型作配置,進(jìn)行特殊處理,主要屬性有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> {
}

查看具體使用:內(nèi)部都已經(jīng)封裝了基本的單表操作

?2.2.3 Service 層中使用

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

根據(jù)實(shí)體中的屬性進(jìn)行查詢,只能有一個(gè)返回值,有多個(gè)結(jié)果是拋出異常,查詢條件使用等號(hào)。

但是如果存在某個(gè)屬性為int,則會(huì)初始化為0??赡苡绊懙綄?shí)際使用

2.3 實(shí)際案例

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(); //條件構(gòu)造器
 
        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  當(dāng)前頁
     * @param size  每頁顯示的條數(shù)
     * @return
     */
    @Override
    public PageInfo<Brand> pageSearch(Integer page, Integer size) {
        // 分頁實(shí)現(xiàn)
        // 后面的查詢必須是緊跟集合查詢
        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);
        // 搜索數(shù)據(jù)
        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就會(huì)忽略空值
        int i = brandMapper.insertSelective(brand);
    }
 
    /**
     * 根據(jù)id修改品牌
     * @param brand
     */
    @Override
    public void update(Brand brand) {
        // 使用通用mapper.update();
        brandMapper.updateByPrimaryKeySelective(brand);
    }
 
    /**
     * 根據(jù)id刪除
     * @param id
     */
    @Override
    public void del(Integer id) {
        brandMapper.deleteByPrimaryKey(id);
    }
}

三、擴(kuò)展介紹

使用

public interface BaseMapper<T> extends tk.mybatis.mapper.common.BaseMapper<T>, IdsMapper<T>, MySqlMapper<T>, OracleMapper<T> {
}

pom.xml引入
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.5</version>
</dependency>

注:為了演示所以同時(shí)引用了MySqlMapper和OracleMapper 正常情況是只能引用一種因?yàn)樗麄冇幸粋€(gè)相同的方法insertList(List list)

泛型(實(shí)體類)的類型必須符合要求

實(shí)體類按照如下規(guī)則和數(shù)據(jù)庫表進(jìn)行轉(zhuǎn)換,注解全部是JPA中的注解:

  • 表名默認(rèn)使用類名,駝峰轉(zhuǎn)下劃線(只對大寫字母進(jìn)行處理),如UserInfo默認(rèn)對應(yīng)的表名為user_info。
  • 表名可以使用@Table(name = “tableName”)進(jìn)行指定,對不符合第一條默認(rèn)規(guī)則的可以通過這種方式指定表名。
  • 字段默認(rèn)和@Column一樣,都會(huì)作為表字段,表字段默認(rèn)為Java對象的Field名字駝峰轉(zhuǎn)下劃線形式。
  • 可以使用@Column(name = “fieldName”)指定不符合第3條規(guī)則的字段名。
  • 使用@Transient注解可以忽略字段,添加該注解的字段不會(huì)作為表字段使用。
  • 建議一定是有一個(gè)@Id注解作為主鍵的字段,可以有多個(gè)@Id注解的字段作為聯(lián)合主鍵。

所有的mapper繼承此類將具有以下通用方法

查詢方法

BaseSelectMapper下的通用方法

方法名稱 作用
List selectAll(); 查詢?nèi)繑?shù)據(jù)
T selectByPrimaryKey(Object key); 通過主鍵查詢
T selectOne(T record); 通過實(shí)體查詢單個(gè)數(shù)據(jù)
List select(T record); 通過實(shí)體查詢多個(gè)數(shù)據(jù)
int selectCount(T record); 通過實(shí)體查詢實(shí)體數(shù)量
boolean existsWithPrimaryKey(Object key); 通過主鍵查詢此主鍵是否存在

SelectByIdsMapper下的通用方法

方法名稱 作用
List selectByIds(String var1); 通過多個(gè)主鍵查詢數(shù)據(jù)

添加方法
BaseInsertMapper下的通用方法

?

方法名稱 作用
int insert(T record); 全部添加
int insertSelective(T record); 選擇性(不為null)的添加

MySqlMapper下的通用方法

方法名稱 作用
int insertList(List list); 批量插入
int insertUseGeneratedKeys(T record); 如果主鍵為自增可使用此方法獲取添加成功的主鍵

OracleMapper下的通用方法

方法名稱 作用
int insertList(List list); 批量插入

修改方法

BaseUpdateMapper下的通用方法

方法名稱 作用
int updateByPrimaryKey(T record); 按照實(shí)體進(jìn)行修改
int updateByPrimaryKeySelective(T record); 按照實(shí)體進(jìn)行有選擇的修改

刪除方法
BaseDeleteMapper下的通用方法

方法名稱 作用
int delete(T record); 按照實(shí)體進(jìn)行刪除
int deleteByPrimaryKey(Object o); 按照主鍵進(jìn)行刪除

IdsMapper下的通用方法

方法名稱 作用
int deleteByIds(String var1); 按照主鍵批量刪除

到此這篇關(guān)于TKMybatis的介紹和使用詳解的文章就介紹到這了,更多相關(guān)TKMybatis 使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java通俗易懂系列設(shè)計(jì)模式之策略模式

    Java通俗易懂系列設(shè)計(jì)模式之策略模式

    這篇文章主要介紹了Java通俗易懂系列設(shè)計(jì)模式之策略模式,對設(shè)計(jì)模式感興趣的同學(xué),一定要看一下
    2021-04-04
  • Spring Security的簡單使用

    Spring Security的簡單使用

    這篇文章主要介紹了Spring Security的簡單使用,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot,感興趣的朋友可以了解下
    2021-04-04
  • Java購物系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    Java購物系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Java購物系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Springboot2.0自適應(yīng)效果錯(cuò)誤響應(yīng)過程解析

    Springboot2.0自適應(yīng)效果錯(cuò)誤響應(yīng)過程解析

    這篇文章主要介紹了Springboot2.0自適應(yīng)效果錯(cuò)誤響應(yīng)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java基礎(chǔ)知識(shí)之ByteArrayInputStream流的使用

    Java基礎(chǔ)知識(shí)之ByteArrayInputStream流的使用

    這篇文章主要介紹了Java基礎(chǔ)知識(shí)之ByteArrayInputStream流的使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • CountDownLatch同步工具類使用詳解

    CountDownLatch同步工具類使用詳解

    這篇文章主要為大家詳細(xì)介紹了CountDownLatch的使用說明,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • mybatis3.4.6 批量更新 foreach 遍歷map 的正確姿勢詳解

    mybatis3.4.6 批量更新 foreach 遍歷map 的正確姿勢詳解

    這篇文章主要介紹了mybatis3.4.6 批量更新 foreach 遍歷map 的正確姿勢詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Java+opencv3.2.0之直方圖均衡詳解

    Java+opencv3.2.0之直方圖均衡詳解

    這篇文章主要為大家詳細(xì)介紹了Java+opencv3.2.0之直方圖均衡的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 淺析Java中Future接口的使用方法

    淺析Java中Future接口的使用方法

    在Java開發(fā)中,異步編程是提高系統(tǒng)性能和響應(yīng)能力的重要手段之一。本文將深入探討Future接口的原理和源碼解讀,幫助讀者更好地理解Future接口的工作機(jī)制和使用方法
    2023-05-05
  • Java中Swing類實(shí)例講解

    Java中Swing類實(shí)例講解

    這篇文章主要介紹了Java中Swing類實(shí)例講解,文中用代碼實(shí)例講解的很清楚,有需要的同學(xué)可以研究下
    2021-02-02

最新評論

武陟县| 伊川县| 阿拉善左旗| 大关县| 弋阳县| 临夏市| 铜山县| 龙州县| 和田市| 买车| 石台县| 屯昌县| 新闻| 原平市| 蛟河市| 扬州市| 大庆市| 翼城县| 米泉市| 平遥县| 金平| 沙田区| 大港区| 河北省| 子长县| 旺苍县| 隆回县| 长岭县| 泸州市| 海林市| 凤冈县| 龙南县| 尼玛县| 吉安县| 广安市| 宣武区| 寻乌县| 三原县| 盐城市| 商城县| 措美县|