一、项目结构

二、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. 配置服务器(anaconda + jupyter + R)

    总结一下整体的流程: 1. 服务器安装anaconda 首先清华镜像站下载anaconda3. 2. 将下载好的文件用scp命令传入服务器 注意:指定端口用-P命令 p大写 本机地址 用户名@服务器I ...

  2. Windows下zookeeper安装及配置

    zookeeper有单机.伪集群.集群三种部署方式,可根据自己对可靠性的需求选择合适的部署方式.本章主要讲述单机部署方式. 系统要求 zookeeper可以运行在多种系统平台上面,表1展示了zk支持的 ...

  3. 大数据笔记(九)——Mapreduce的高级特性(B)

    二.排序 对象排序 员工数据 Employee.java  ----> 作为key2输出 需求:按照部门和薪水升序排列 Employee.java package mr.object; impo ...

  4. 最新版本的JDK安装和配置(Java SE 10.0.2)

    1.废话少说,要么百度JDK,要么直接点传送门http://www.oracle.com/technetwork/java/javase/downloads/index.html.这里需要说的JDK包 ...

  5. Linux内核调试方法总结之内核通知链

    Linux内核通知链notifier 1.内核通知链表简介(引用网络资料)    大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣.为了满足这个需求,也即是让某个子系统在 ...

  6. pycharm中添加python3 的环境变量

    i卡是HDKJHA{{sadfsdafdsafd.jpg(uploading...)}}S{{53ad37a938001.jpg(uploading...)}}

  7. linux设置开机启动程序?

    /etc/rc.d/init.d 是 /etc/init.d的目标链接. 如果/etc/rc.d下面没有 rc.local脚本文件, 则需要 手动创建: 而 /etc/bashrc 是在登陆bash ...

  8. 35 怎么优化join

    35 怎么优化join 上一篇介绍了join的两种算法:nlj和bnl create table t1(id int primary key, a int, b int, index(a)); cre ...

  9. C#线程中安全访问控件(重用委托,避免繁复的delegate,Invoke)总结

    1.第一种,不安全,当线程过多后,timer控件和线程中同时访问窗体控件时,有时会出现界面重绘出错. public frmMain() { InitializeComponent(); System. ...

  10. MIUI8改MAC

    1.手机Root 2.RE文件管理器复制:/data/nvram/APCFG/APRDEB/WIFI 到电脑上 3.如下图用UltraEdit打开WIFI文件修改MAC 4.拷贝修改后的WIFI文件到 ...