Springboot整合通用mapper插件(tk.mybatis)及与(自定义xml文件)或(注解方式)一块用

通用mapper插件(tk.mybatis),是在mybatis基础上,提供各种高效的工具,不必再为简单的单表查询写sql语句。

目录

Springboot整合tk.mybatis

Springboot整合tk.mybatis与自定义xml文件共用

Springboot整合tk.mybatis与注解方式共用


Springboot整合tk.mybatis

1.首先在pom文件中引入依赖 (tk.mybatis基础为mybatis,所以自然就包含了mybatis依赖)



    tk.mybatis
    mapper-spring-boot-starter
    2.0.3

 tk.mybatis在application.yml中配置与mybatis一样,先默认就行,可以先不用配置。

与数据库进行交互时,默认自动支持 字段下划线 与 属性驼峰 之间转换。

2.创建实体类

package com.leyou.item.pojo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import tk.mybatis.mapper.annotation.KeySql;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.Date;

@Data
@Table(name = "tb_spu") // 与数据库对应的表名
public class Spu {

    @Id
    @KeySql(useGeneratedKeys = true)
    private Long id;
    private Long brandId;
    private Long cid1; // 1级类目
    private String title;  // 标题
    private String subTitle; // 子标题

    // 下面是特殊情况时,才用到
    @JsonIgnore // 返回json时,会忽略该属性,不返回该属性,需要引入jackson-databind依赖
    private Date lastUpdateTime; // 最后修改时间

    @Transient // 数据库中没有该字段
    private String bname;
    @Transient // 数据库中没有该字段
    private String cname;
}

 上面如果想要使用 @JsonIgnore 需要引入jackson-databind依赖,单独一个依赖即可


    com.fasterxml.jackson.core
    jackson-databind
    2.9.6

3.编写mapper文件

继承 Mapper接口,便有增删改查,一些单表操作方法

package com.leyou.item.mapper;

import com.leyou.item.pojo.SpecGroup;
import tk.mybatis.mapper.common.Mapper;

public interface SpecGroupMapper extends Mapper {

}

 批量处理  IdListMapper     InsertListMapper

继承 InsertListMapper,T为实体类,支持批量新增插入。需要注意有两个包

import tk.mybatis.mapper.additional.insert.InsertListMapper; 该类中的实体类主键可以自定义
import tk.mybatis.mapper.common.special.InsertListMapper;该类中的实体类主键,必须写成id,否则批量插入时报错

继承 IdListMapper接口,第一个泛型是实体类,第二个是实体类主键类型,提供select和delete操作ids

该接口提供 selectByIdList 方法,即参数是 主键id集合,返回值是 实体类集合。

package com.leyou.item.mapper;

import com.leyou.item.pojo.Category;
import tk.mybatis.mapper.additional.idlist.IdListMapper;
import tk.mybatis.mapper.common.Mapper;

public interface CategoryMapper extends Mapper, IdListMapper {
}

// ----------------------------------------------------------------------------------------
// 使用方法
public List queryByIds(List ids){
    List list = categoryMapper.selectByIdList(ids);
    if (CollectionUtils.isEmpty(list)){
        throw new LyException(ExceptionEnum.CATEGORY_NOT_FOUND);
    }
    return list;
}

批量操作时,可以自定义一个通用BaseMapper,如以下接口,再让编写的mapper继承这个BaseMapper,达到提取优化

需要注意的是:自定义的通用mapper,想要生效,必须要加上@RegisterMapper注解。

package com.leyou.common.mapper;
import tk.mybatis.mapper.additional.idlist.IdListMapper;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
import tk.mybatis.mapper.annotation.RegisterMapper;
import tk.mybatis.mapper.common.Mapper;

@RegisterMapper // 让BaseMapper生效,必须加上该注解
public interface BaseMapper extends Mapper, IdListMapper, InsertListMapper {
}

4.配置扫描文件

第一种:在自己的Mapper类上添加 @Mapper注解

第二种:在springboot启动类上,配置 @MapperScan("com.leyou.item.mapper")  推荐第二种

5. service直接导入mapper,启动时,会自动生成mapper代理对象,包含了select等方法

@Service
public class SpecificationService {
    @Autowired
    private SpecGroupMapper specGroupMapper;
    
    public List queryGroupByCid(Long cid) {
        SpecGroup group = new SpecGroup();
        group.setCid(cid);
        List list = specGroupMapper.select(group);// 根据实体类的非空属性查询
        if (CollectionUtils.isEmpty(list)){
            // 没查到
            throw new LyException(ExceptionEnum.SPEC_GROUP_NOT_FOUND);
        }
        return list;
    }
}

// 带条件查询方式
Example example = new Example(实体类.class);
example.createCriteria().orLike("name", "%"+ key + "%").orEqualTo("letter", key.toUpperCase());
String orderByClause = sortBy + (desc ? " DESC" : " ASC");
example.setOrderByClause(orderByClause);
List list = brandMapper.selectByExample(example);

Springboot整合tk.mybatis与自定义xml文件共用

1、mapper文件:

package com.leyou.item.mapper;

import com.leyou.item.pojo.Brand;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;

public interface BrandMapper extends Mapper {

    List queryByCategoryId(Long cid);
}

2、 xml文件:




    


3、 application.yml文件中配置xml路径: (我的xml文件放在了src/main/java下面,没有放在resources下面)

如果你们也是放在了src/main/java下面,yml配置xml路径使用classpath时,还需要在pom中添加个build,否则不能正确加载

配置build请访问下面这个链接 (点开后,直接滑到最下面,复制那个build就行)

解决springboot配置文件yml中classpath找不到src/main/java下的xml文件:https://blog.csdn.net/qq_41357211/article/details/99855643

server:
  port: 8081
spring:
  datasource:
    username: root
    password: root
    #使用 MySQL连接驱动是8.0以上,需要在Url后面加上时区, GMT%2B8代表中国时区,不然报时区错误
    url: jdbc:mysql://localhost:3306/leyou?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF8
    # 注意: 新版本驱动包,要使用以下类作为驱动类
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  mapper-locations: classpath:com/leyou/item/mapper/xml/*Mapper.xml

即可正确使用

Springboot整合tk.mybatis与注解方式共用

直接在Mapper中写就行

package com.leyou.item.mapper;

import com.leyou.item.pojo.Brand;
import org.apache.ibatis.annotations.Insert;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;

public interface BrandMapper extends Mapper {

    @Insert("INSERT INTO tb_category_brand (category_id, brand_id) VALUES (#{cid}, #{id})")
    int insertCategoryBrand(Long cid, Long id);
}

 

你可能感兴趣的:(Springboot整合通用mapper插件(tk.mybatis)及与(自定义xml文件)或(注解方式)一块用)