Springboot 整合tk-mybatis , 妈妈,我再也不想敲CRUD的代码了!

3.根据主键该表查询该表单个数据

4.根据条件查询该表单个数据

5.检测数据是否存在

6.统计该表数据条数

7.根据主键删除数据

8.根据条件删除数据

9.根据主键修改数据

10.根据条件修改数据

11.新增数据

12.分页查询

13.当然还有挺多,不一一列举了

创建一个springboot项目,在pom.xml里导入用到的依赖:

org.springframework.boot

spring-boot-starter-jdbc

org.mybatis.spring.boot

mybatis-spring-boot-starter

1.3.2

mysql

mysql-connector-java

runtime

com.alibaba

druid-spring-boot-starter

1.1.10

tk.mybatis

mapper-spring-boot-starter

2.1.2

org.projectlombok

lombok

1.16.10

true

com.alibaba

fastjson

1.2.58

org.springframework.boot

spring-boot-starter-web

2.1.4.RELEASE

数据库表,简单一张表:

对于的User.java实体类:

import lombok.Data;

import javax.persistence.*;

/**

  • @Author : JCccc

  • @CreateTime : 2020/8/13

  • @Description :

**/

@Data

@Table(name=“user”)

public class User {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY,generator = “JDBC”)

private Integer id;

@Column(name = “name”)

private String name;

@Column(name = “age”)

private Integer age;

}

然后是UserMapper.java(注意看细节,继承了Mapper  来自于tk-mybatis),只要继承了这个Mapper,那么文章前头提到的那些代码和sql,我们都不用再去写了,我们只需要写一些多表的,业务复杂的需要额外扩展的就行。:

import tk.mybatis.mapper.common.Mapper;

import java.util.List;

import java.util.Map;

/**

  • @Author : JCccc

  • @CreateTime : 2020/8/13

  • @Description :

**/

public interface UserMapper extends Mapper {

//额外扩展的方法,如一些复杂的查询语句等

List getMyCustom(int age);

}

细心的人发现了,我们这次的mapper上面没有写@Mapper。

是的,我们现在进行一个关键的操作,在启动类上,使用tk-mybatis的扫描mapper注解:

pojo和mapper 两层已经完毕了,那么对接持久层需要做的我们已经完毕了。

service层,我们在这层为了方面项目的扩展,后期能省掉更多的接口复写代码(是不是很多人很烦service层里面的代码跟mapper层对于一些普通的crud操作,基本代码没什么区别),

我们需要做一个base层,也就是后续其他业务的表扩展,都同一继承和实现base层即可。

BaseService.java :

import org.apache.ibatis.session.RowBounds;

import tk.mybatis.mapper.common.Mapper;

import java.util.List;

/**

  • @Author : JCccc

  • @CreateTime : 2020/8/13

  • @Description :

**/

public interface BaseService extends Mapper {

@Override

int deleteByPrimaryKey(Object o);

@Override

int delete(T o);

@Override

int insert(T o);

@Override

int insertSelective(T o);

@Override

List selectAll();

@Override

T selectByPrimaryKey(Object o);

@Override

public int selectCount(T o);

@Override

public List select(T o);

@Override

public T selectOne(T o);

@Override

public int updateByPrimaryKey(T o);

@Override

public int updateByPrimaryKeySelective(T o);

@Override

public int deleteByExample(Object o);

@Override

public List selectByExample(Object o);

@Override

public int selectCountByExample(Object o);

@Override

public T selectOneByExample(Object o);

@Override

public int updateByExample(T o, Object o2);

@Override

public int updateByExampleSelective(T o, Object o2);

@Override

public List selectByExampleAndRowBounds(Object o, RowBounds rowBounds);

@Override

public List selectByRowBounds(T o, RowBounds rowBounds);

}

BaseServiceImpl.java:

import org.apache.ibatis.session.RowBounds;

import org.springframework.beans.factory.annotation.Autowired;

import tk.mybatis.mapper.common.Mapper;

import java.util.List;

/**

  • @Author : JCccc

  • @CreateTime : 2020/8/13

  • @Description :

**/

public abstract class BaseServiceImpl implements BaseService {

@Autowired

private Mapper mapper;

@Override

public int deleteByPrimaryKey(Object o) {

return mapper.deleteByPrimaryKey(o);

}

@Override

public int delete(T t) {

return mapper.delete(t);

}

@Override

public int insert(T t) {

return mapper.insert(t);

}

@Override

public int insertSelective(T t) {

return mapper.insertSelective(t);

}

@Override

public List selectAll() {

return mapper.selectAll();

}

@Override

public int selectCount(T t) {

return mapper.selectCount(t);

}

@Override

public List select(T t) {

return mapper.select(t);

}

@Override

public T selectOne(T t) {

return mapper.selectOne(t);

}

@Override

public int updateByPrimaryKey(T t) {

return mapper.updateByPrimaryKey(t);

}

@Override

public int updateByPrimaryKeySelective(T t) {

return mapper.updateByPrimaryKeySelective(t);

}

@Override

public int deleteByExample(Object t) {

return mapper.deleteByExample(t);

}

@Override

public List selectByExample(Object t) {

return mapper.selectByExample(t);

}

@Override

public int selectCountByExample(Object t) {

return mapper.selectCountByExample(t);

}

@Override

public T selectOneByExample(Object o) {

return mapper.selectOneByExample(o);

}

@Override

public int updateByExample(T t, Object o) {

return mapper.updateByExample(t, o);

}

@Override

public int updateByExampleSelective(T t, Object o) {

return mapper.updateByExampleSelective(t, o);

}

@Override

public List selectByExampleAndRowBounds(Object o, RowBounds rowBounds) {

return mapper.selectByExampleAndRowBounds(o, rowBounds);

}

@Override

public List selectByRowBounds(T t, RowBounds rowBounds) {

return mapper.selectByRowBounds(t, rowBounds);

}

@Override

public boolean existsWithPrimaryKey(Object o) {

return mapper.existsWithPrimaryKey(o);

}

@Override

public T selectByPrimaryKey(Object o) {

return mapper.selectByPrimaryKey(o);

}

}

ok,业务层的base层已经完成,回归业务,

UserService.java:

import com.jc.tkmybatis.base.BaseService;

import com.jc.tkmybatis.pojo.User;

import java.util.List;

import java.util.Map;

/**

  • @Author : JCccc

  • @CreateTime : 2020/8/13

  • @Description :

**/

public interface UserService extends BaseService {

//仅仅需要编写额外扩展的业务方法

List getMyCustom(int age);

}

UserServiceImpl.java:

import com.jc.tkmybatis.base.BaseServiceImpl;

import com.jc.tkmybatis.mapper.UserMapper;

import com.jc.tkmybatis.pojo.User;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.List;

import java.util.Map;

/**

  • @Author : JCccc

  • @CreateTime : 2020/8/13

  • @Description :

**/

@Service

public class UserServiceImpl extends BaseServiceImpl implements UserService {

//UserMapper需要继承tk-myabtis的Mapper,这样才能顺利使用到tk-mybatis帮我们写好的N多mapper层方法和sql语句

@Autowired

UserMapper userMapper;

//仅仅需要编写额外扩展的业务方法

@Override

public List getMyCustom(int age) {

return userMapper.getMyCustom(age);

}

}

到这里,我们其实整合tk-mybatis已经完毕了!(后面有controller层来演示怎么使用)

因为我们为了确保可以额外扩展,我们还是建了mapper.xml的,所以我们在yml加上对于的mapper.xml文件扫描配置:

mybatis:

config-location: classpath:mybatis/mybatis-config.xml

mapper-locations: classpath:mybatis/mapper/*.xml

对于userMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>

SELECT *

FROM user

WHERE age>=#{age}

mybatis-config.xml:

<?xml version="1.0" encoding="UTF-8" ?>

controller层,我们写一些curd的接口来进行使用测试:

UserController.java

PS: 我们在controller层注入 UserService后,我们就可以使用tk-mybatis帮我们实现的那一堆方法了。

import com.jc.tkmybatis.pojo.User;

import com.jc.tkmybatis.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RestController;

import java.util.List;

import java.util.Map;

/**

  • @Author : JCccc

  • @CreateTime : 2020/8/13

  • @Description :

**/

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

分享一些资料给大家,我觉得这些都是很有用的东西,大家也可以跟着来学习,查漏补缺。

《Java高级面试》

《Java高级架构知识》

《算法知识》

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-TchiVXj9-1713306075108)]

[外链图片转存中…(img-OwAmZu8q-1713306075108)]

[外链图片转存中…(img-IbKZ9VQU-1713306075109)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

分享一些资料给大家,我觉得这些都是很有用的东西,大家也可以跟着来学习,查漏补缺。

《Java高级面试》

[外链图片转存中…(img-HaFMcqNs-1713306075109)]

《Java高级架构知识》

[外链图片转存中…(img-TnO66KOE-1713306075109)]

《算法知识》

[外链图片转存中…(img-d8syzGqE-1713306075109)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 27
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值