91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

TKMybatis的使用方法是什么

發布時間:2021-12-01 13:34:18 來源:億速云 閱讀:241 作者:iii 欄目:開發技術

本篇內容介紹了“TKMybatis的使用方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、什么是 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> {
}

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

TKMybatis的使用方法是什么TKMybatis的使用方法是什么

 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);
    }
}

三、擴展介紹

使用

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>

注:為了演示所以同時引用了MySqlMapper和OracleMapper 正常情況是只能引用一種因為他們有一個相同的方法insertList(List list)

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

實體類按照如下規則和數據庫表進行轉換,注解全部是JPA中的注解:

  • 表名默認使用類名,駝峰轉下劃線(只對大寫字母進行處理),如UserInfo默認對應的表名為user_info。

  • 表名可以使用@Table(name = “tableName”)進行指定,對不符合第一條默認規則的可以通過這種方式指定表名。

  • 字段默認和@Column一樣,都會作為表字段,表字段默認為Java對象的Field名字駝峰轉下劃線形式。

  • 可以使用@Column(name = “fieldName”)指定不符合第3條規則的字段名。

  • 使用@Transient注解可以忽略字段,添加該注解的字段不會作為表字段使用。

  • 建議一定是有一個@Id注解作為主鍵的字段,可以有多個@Id注解的字段作為聯合主鍵。

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

查詢方法

BaseSelectMapper下的通用方法

方法名稱作用
List selectAll();查詢全部數據
T selectByPrimaryKey(Object key);通過主鍵查詢
T selectOne(T record);通過實體查詢單個數據
List select(T record);通過實體查詢多個數據
int selectCount(T record);通過實體查詢實體數量
boolean existsWithPrimaryKey(Object key);通過主鍵查詢此主鍵是否存在

SelectByIdsMapper下的通用方法

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

添加方法
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);按照實體進行修改
int updateByPrimaryKeySelective(T record);按照實體進行有選擇的修改

刪除方法
BaseDeleteMapper下的通用方法

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

IdsMapper下的通用方法

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

“TKMybatis的使用方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉林市| 伊宁市| 阜城县| 霍山县| 胶州市| 香河县| 阳西县| 修武县| 阿拉尔市| 阿坝县| 彭泽县| 吉水县| 藁城市| 余江县| 南阳市| 眉山市| 资讯| 永济市| 凤城市| 东乡县| 合山市| 祁连县| 玉门市| 宽甸| 阿合奇县| 三原县| 台江县| 卢氏县| 义马市| 阜城县| 华蓥市| 朝阳县| 乌恰县| 石门县| 元氏县| 渝北区| 景谷| 中方县| 呼玛县| 贡嘎县| 五寨县|