TKMybatis

TKMybatis

一、什么是 TKMybatis

TKMybatis 是基于 Mybatis 框架开发的一个工具,内部实现了对单表的基本数据操作,只需要简单继承 TKMybatis 提供的接口,就能够实现无需编写任何 sql 即能完成单表操作。TkMyBatis是一个MyBatis的通用Mapper工具。

二、TKMybatis 使用

2.1 Springboot 项目中加入依赖

tk.mybatis mapper-spring-boot-starter 2.0.4

在 POJO 类中加入依赖

<!--每个工程都有Pojo,都需要用到该包对应的注解-->
<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>persistence-api</artifactId>
    <version>1.0</version>
    <scope>compile</scope>
</dependency>

在启动类中配置 @MapperScan 扫描

​ @MapperScan的作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类

​ 添加位置:是在Springboot启动类上面添加

@SpringBootApplication
@MapperScan(basePackages = {"com.qf.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:指定表主键字段,无属性值。建议一定是有一个@Id 注解作为主键的字段,可以有多个 @Id 注解的字段作为联合主键

​ 默认情况下,实体类中如果不存在包含@Id 注解的字段,所有的字段都会作为主键字段进行使用(但是这种效率极低)

@Column:描述数据库字段信息,主要属性有name(字段名)、columnDefinition、insertable、length、nullable(是否可为空)、precision、scale、table、unique、updatable等。

@ColumnType:描述数据库字段类型,可对一些特殊类型作配置,进行特殊处理,主要属性有jdbcType、column、typeHandler等。

@Transient注解:

​ 如果你的实体类中包含了不是数据库中的字段,你需要给这个字段加上 @Transient注解,这样通用Mapper在处理单表操作时就不会将标注的属性当成表字段处理!

@Table(name = "db_car")
public class TbBrand implements Serializable {
    @Id
    @GeneratedValue(Strategy = GenerationType.IDENTITY)
    private Long id;
    //@GeneratedValue注解存在的意义主要就是为一个实体生成一个唯一标识的主键,适用于主键自增的情况
    
    private String name;
    //@Column(name = "name")
    //private String sdafagioam;
    
    @Transient
    private String password22;
}
2.2.2 dao中使用

单表操作,只需要继承 tk.mybatis 下的 Mapper 接口即可使用

import tk.mybatis.mapper.common.Mapper;

@Repository
public interface BrandMapper extends Mapper<Brand> {
}

img

img

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)根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号。

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

2.4分页助手&通用Mapper说明

分析:

​ 在使用了Mybatis的情况下:

  • 分页助手 PageHelper :可以方便、快捷地进行数据查询的分页

  • 通用Mapper:可以自动拼接要查询的 sql 语句,可以提高开发效率; 与jpa类似

    小结:在使用了 Mybatis的情况下使用上述的两个组件可以提高开发效率。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员子衿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值