一、项目结构

二、pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>club.xcreeper</groupId>
<artifactId>general-mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>general-mybatis</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

POM

三、数据库

一张用户表

CREATE TABLE `user` (
`id` bigint(20) NOT NULL,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`create_date_time` datetime DEFAULT NULL,
`update_date_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

四、通用dao,不能放在dao层,否则扫描后报错,专门建一个包core放通用dao和通用service

package club.xcreeper.generalmybatis.core.dao;

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper; public interface BaseDao<T> extends Mapper<T> , MySqlMapper<T> {
}

通用dao接口只需继承 tk.mybatis 中的 Mapper<T> 和 MysqlMapper<T>

五、通用service接口

package club.xcreeper.generalmybatis.core.service;

import club.xcreeper.generalmybatis.core.service.impl.BaseServiceImpl;
import org.apache.ibatis.session.RowBounds; import java.util.List; public interface BaseService<T> { int deleteByPrimaryKey(Object o); int delete(T t); int insert(T t); int insertSelective(T t); boolean existsWithPrimaryKey(Object o); List<T> selectAll(); T selectByPrimaryKey(Object o); int selectCount(T t); List<T> select(T t); T selectOne(T t); int updateByPrimaryKey(T t); int updateByPrimaryKeySelective(T t); int deleteByExample(Object o); List<T> selectByExample(Object o); int selectCountByExample(Object o); T selectOneByExample(Object o); int updateByExample(T t, Object o); int updateByExampleSelective(T t, Object o); List<T> selectByExampleAndRowBounds(Object o, RowBounds rowBounds); List<T> selectByRowBounds(T t, RowBounds rowBounds); int insertList(List<? extends T> list); int insertUseGeneratedKeys(T t); BaseServiceImpl<T> page(int page, int rows); int total();
}

六、通用service实现

package club.xcreeper.generalmybatis.core.service.impl;

import club.xcreeper.generalmybatis.core.dao.BaseDao;
import club.xcreeper.generalmybatis.core.service.BaseService;
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.session.RowBounds; import java.util.List; public abstract class BaseServiceImpl<T> implements BaseService<T> { private BaseDao<T> dao; // private int page;
//
// private int rows; public void setBaseDao(BaseDao<T> baseDao) {
this.dao = baseDao;
} @Override
public int deleteByPrimaryKey(Object o) {
return dao.deleteByPrimaryKey(o);
} @Override
public int delete(T t) {
return dao.delete(t);
} @Override
public int insert(T t) {
return dao.insert(t);
} @Override
public int insertSelective(T t) {
return dao.insertSelective(t);
} @Override
public boolean existsWithPrimaryKey(Object o) {
return dao.existsWithPrimaryKey(o);
} @Override
public List<T> selectAll() {
// if (rows>0){
// PageHelper.startPage(page,rows);
// }
List<T> list = dao.selectAll();
// this.rows = 0;
return list;
} @Override
public T selectByPrimaryKey(Object o) {
return dao.selectByPrimaryKey(o);
} @Override
public int selectCount(T t) {
return dao.selectCount(t);
} @Override
public List<T> select(T t) {
// if (rows>0){
// PageHelper.startPage(page,rows);
// }
List<T> list = dao.select(t);
// this.rows = 0;
return list;
} @Override
public T selectOne(T t) {
return dao.selectOne(t);
} @Override
public int updateByPrimaryKey(T t) {
return dao.updateByPrimaryKey(t);
} @Override
public int updateByPrimaryKeySelective(T t) {
return dao.updateByPrimaryKeySelective(t);
} @Override
public int deleteByExample(Object o) {
return dao.deleteByExample(o);
} @Override
public List<T> selectByExample(Object o) {
// if (rows>0){
// PageHelper.startPage(page,rows);
// }
List<T> list = dao.selectByExample(o);
// this.rows = 0;
return list;
} @Override
public int selectCountByExample(Object o) {
return dao.selectCountByExample(o);
} @Override
public T selectOneByExample(Object o) {
return dao.selectOneByExample(o);
} @Override
public int updateByExample(T t, Object o) {
return dao.updateByExample(t,o);
} @Override
public int updateByExampleSelective(T t, Object o) {
return dao.updateByExampleSelective(t,o);
} @Override
public List<T> selectByExampleAndRowBounds(Object o, RowBounds rowBounds) {
// if (rows>0){
// PageHelper.startPage(page,rows);
// }
List<T> list = dao.selectByExampleAndRowBounds(o,rowBounds);
// this.rows = 0;
return list;
} @Override
public List<T> selectByRowBounds(T t, RowBounds rowBounds) {
// if (rows>0){
// PageHelper.startPage(page,rows);
// }
List<T> list = dao.selectByRowBounds(t,rowBounds);
// this.rows = 0;
return list;
} @Override
public int insertList(List<? extends T> list) {
int result = 0;
for (T t : list) {
result += dao.insertSelective(t);
}
return result;
} @Override
public int insertUseGeneratedKeys(T t) {
return dao.insertUseGeneratedKeys(t);
} @Override
public BaseServiceImpl<T> page(int page,int rows) {
// this.page = page;
// this.rows = rows;
if (rows>0 && page>0) PageHelper.startPage(page,rows);
return this;
} @Override
public int total(){
return this.selectCount(null);
} }

七、User 持久化对象

package club.xcreeper.generalmybatis.domain.po;

import lombok.Data;

import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date; @Data
public class User implements Serializable { @Id
private Long id; private String username; private String password; private Date createDateTime; private Date updateDateTime; }

八、UserDao

package club.xcreeper.generalmybatis.dao;

import club.xcreeper.generalmybatis.core.dao.BaseDao;
import club.xcreeper.generalmybatis.domain.po.User;
import org.springframework.stereotype.Component; @Component
public interface UserDao extends BaseDao<User> { }

九、UserService

package club.xcreeper.generalmybatis.service;

import club.xcreeper.generalmybatis.core.service.BaseService;
import club.xcreeper.generalmybatis.domain.po.User; public interface UserService extends BaseService<User> {
}

十、UserServiceImpl

package club.xcreeper.generalmybatis.service.impl;

import club.xcreeper.generalmybatis.core.service.impl.BaseServiceImpl;
import club.xcreeper.generalmybatis.dao.UserDao;
import club.xcreeper.generalmybatis.domain.po.User;
import club.xcreeper.generalmybatis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; @Service
@Transactional
public class UserServiceImpl extends BaseServiceImpl<User> implements UserService { @Autowired
public void setUserDao(UserDao userDao) {
super.setBaseDao(userDao);
}
}

十一、Application

package club.xcreeper.generalmybatis;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan; @SpringBootApplication
@MapperScan("club.xcreeper.generalmybatis.dao")
public class GeneralMybatisApplication { public static void main(String[] args) {
SpringApplication.run(GeneralMybatisApplication.class, args);
} }

十二、Test

package club.xcreeper.generalmybatis;

import club.xcreeper.generalmybatis.domain.po.User;
import club.xcreeper.generalmybatis.service.UserService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import tk.mybatis.mapper.entity.Example; import java.util.ArrayList;
import java.util.Date;
import java.util.List; @SpringBootTest
@RunWith(SpringRunner.class)
public class GeneralMybatisApplicationTests { @Autowired
private UserService userService; @Autowired
private ObjectMapper objectMapper; @Test
public void contextLoads() {
} @Test
public void insertSelective(){
User user = new User();
user.setId(System.currentTimeMillis());
user.setUsername("张三");
user.setPassword("123");
Date date = new Date();
user.setCreateDateTime(date);
user.setUpdateDateTime(date);
userService.insertSelective(user);
} @Test
public void insertList(){
List<User> userList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setId(System.currentTimeMillis()+i);
user.setUsername(i+""+i);
user.setPassword("abc"+i+i);
Date date = new Date();
user.setCreateDateTime(date);
user.setUpdateDateTime(date);
userList.add(user);
}
userService.insertList(userList);
} @Test
public void updateByExampleSelective(){
Example example = new Example(User.class);
example.createCriteria().andEqualTo("username","张三");
User user = new User();
user.setPassword("456");
userService.updateByExampleSelective(user,example);
} @Test
public void updateByPrimaryKeySelective(){
User user = new User();
user.setId(1571807197078L);
user.setPassword("789");
userService.updateByPrimaryKeySelective(user);
} @Test
public void select() throws JsonProcessingException {
User user = new User();
// user.setId(1571812813795L);
// user.setPassword("abc11");
user.setUsername("22");
System.out.println(objectMapper.writeValueAsString(userService.select(user)));
} @Test
public void selectPage() throws JsonProcessingException {
// User user = new User();
//// user.setId(1571812813795L);
//// user.setPassword("abc11");
// user.setUsername("22");
System.out.println(objectMapper.writeValueAsString(userService.page(0,3).selectAll()));
System.out.println(userService.total());
} }

javaweb各种框架组合案例(九):springboot+tk.mybatis+通用service的更多相关文章

  1. javaweb各种框架组合案例(八):springboot+mybatis-plus+restful

    一.介绍 1. springboot是spring项目的总结+整合 当我们搭smm,ssh,ssjdbc等组合框架时,各种配置不胜其烦,不仅是配置问题,在添加各种依赖时也是让人头疼,关键有些jar包之 ...

  2. javaweb各种框架组合案例(七):springboot+jdbcTemplete+通用dao+restful

    一.介绍 1.springboot是spring项目的总结+整合 当我们搭smm,ssh,ssjdbc等组合框架时,各种配置不胜其烦,不仅是配置问题,在添加各种依赖时也是让人头疼,关键有些jar包之间 ...

  3. javaweb各种框架组合案例(六):springboot+spring data jpa(hibernate)+restful

    一.介绍 1.springboot是spring项目的总结+整合 当我们搭smm,ssh,ssjdbc等组合框架时,各种配置不胜其烦,不仅是配置问题,在添加各种依赖时也是让人头疼,关键有些jar包之间 ...

  4. javaweb各种框架组合案例(五):springboot+mybatis+generator

    一.介绍 1.springboot是spring项目的总结+整合 当我们搭smm,ssh,ssjdbc等组合框架时,各种配置不胜其烦,不仅是配置问题,在添加各种依赖时也是让人头疼,关键有些jar包之间 ...

  5. javaweb各种框架组合案例(三):maven+spring+springMVC+hibernate

    1.hibernate译为"越冬",指的是给java程序员带来春天,因为java程序员无需再关心各种sql了: 2.hibernate通过java类生成数据库表,通过操作对象来映射 ...

  6. javaweb各种框架组合案例(二):maven+spring+springMVC+mybatis

    1.mybatis是比较新的半自动orm框架,效率也比较高,优点是sql语句的定制,管理与维护,包括优化,缺点是对开发人员的sql功底要求较高,如果比较复杂的查询,表与表之间的关系映射到对象与对象之间 ...

  7. javaweb各种框架组合案例(四):maven+spring+springMVC+spring data jpa(hibernate)【失败案例】

    一.失败案例 1. 控制台报错信息 严重: Exception sending context initialized event to listener instance of class org. ...

  8. javaweb各种框架组合案例(一):maven+spring+springMVC+jdbcTemplate

    为了体现spring jdbc对于单表操作的优势,我专门对dao层做了一个抽离,使得抽离出的核心dao具有通用性.主要技术难点是对于泛型的反射.注意:单表操作中,数据库表的字段要和实体类的属性名保持高 ...

  9. Spring Boot2 系列教程 (九) | SpringBoot 整合 Mybatis

    前言 如题,今天介绍 SpringBoot 与 Mybatis 的整合以及 Mybatis 的使用,本文通过注解的形式实现. 什么是 Mybatis MyBatis 是支持定制化 SQL.存储过程以及 ...

随机推荐

  1. Swift hash & hashValue区别

    最后更新: 2017-07-22 在Swift标准库中,NSObjectProtocol协议 public var hash: Int { get } Equatable协议: extension N ...

  2. Python 元组遍历排序操作方法

    在Python不可变数据类型中,有一个比较重要的角色那就是元组( tuple ).如果某个对像被定义为元组类型,那么就意味着它的值不能被修改,除非重新定义一个新的对像.元组和List列表常被放在一起进 ...

  3. GPG(pgp)加解密中文完整教程

    一.介绍 我们都知道,互联网是不安全的,但其上所使用的大部分应用,如Web.Email等一般都只提供明文传输方式(用https.smtps等例外).所以,当我们需要传输重要文件时,应该对当中的信息加密 ...

  4. WCF - Home

    https://www.tutorialspoint.com/wcf/index.htm WCF Tutorial WCF stands for Windows Communication Found ...

  5. 关于MonoBehaviour的单例通用规则

    长久以来,对于基于MonoBehaviour的单例总是心有梗结,总觉得用得很忐忑,今天,终于有时间思考和总结了下,理清了想通了.代码和注释如下: 其中GameLogic是我们自己的控制游戏生命周期的管 ...

  6. kafka 和 rocketMQ 的数据存储

    kafka 版本:1.1.1 一个分区对应一个文件夹,数据以 segment 文件存储,segment 默认 1G. 分区文件夹: segment 文件: segment 的命名规则是怎样的? kaf ...

  7. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_2_File类的静态成员变量

    四个静态方法 打印的是一个分号 我们在配置java的环境变量的时候,路径就是以分号分隔开的 windows重视分好.linux是冒号 输出反斜线 选中这两个和上面的是一样的 只不过返回的是char类型 ...

  8. Vue+Java实现在页面树形展示文件目录

    getInfo.class /** * @author Sue * @create 2019-07-16 15:06 **/ @RestController public class getInfo ...

  9. Leaflet

    https://leafletjs.com/ https://github.com/Leaflet/Leaflet

  10. 实验报告一 &第三周课程总结

    实验报告 1.打印输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其中各位数字立方和等于该数本身.例如,153是一个“水仙花数”. 实验代码: public class wdnmd{ publ ...