一、项目结构

二、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. formdata方式上传文件,支持大文件分割上传

    1.upload.html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/html"> <h ...

  2. 大数据与mysql

    mysql优化:……

  3. BootStrap 用法

    1 下载bootstrap组件 2  在jsp页面中加入bootstrap <link rel="stylesheet" type="text/css" ...

  4. Java 中如何使用clone()方法克隆对象?

    java为什么要 对象克隆: 在程序开发时,有时可能会遇到以下情况:已经存在一个对象A,现在需要一个与A对象完全相同的B 对象,并对B 对象的属性值进行修改,但是A 对象原有的属性值不能改变.这时,如 ...

  5. C#异常日志

    代码比较简单,仅提供一种思路 /// <summary> /// 将异常打印到LOG文件 /// </summary> /// <param name="ex& ...

  6. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第2节 匿名对象_6-匿名对象的说明

    没有名字的对象,叫做匿名对象 新建一个Person类 把赵又廷赋值交给匿名对象Person里面的成员变量name 想调用里面的ShowName的话 还需要再定义一个匿名对象. 第三个对象是一个全新的. ...

  7. Caffe::Snapshot的运行过程

    Snapshot的存储 概述 Snapshot的存储格式有两种,分别是BINARYPROTO格式和hdf5格式.BINARYPROTO是一种二进制文件,并且可以通过修改shapshot_format来 ...

  8. 获取当前进程当前runtime加载的appdomain

    using System.Runtime.InteropServices; // Add the following as a COM reference - C:\WINDOWS\Microsoft ...

  9. postgresql集群的搭建

    目录 架构图 部署详情 postgresql的安装与配置 pgpool的安装与配置 写在安装前 postgresql是一款很强大的数据库,具体有多强大呢,请谷歌... 网上的相关资料不是很多,参考了大 ...

  10. Bootstrap 学习笔记 项目实战 响应式轮播图

    左右两个箭头可以随浏览器缩放进行移动 保持在图片中间 Html代码: <!DOCTYPE html> <html lang="zh-cn"> <hea ...