一、项目结构

二、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. 手写Tomcat源码

    http://search.bilibili.com/all?keyword=%E6%89%8B%E5%86%99Tomcat%E6%BA%90%E7%A0%81 tomcat源码分析一:https: ...

  2. 170830-关于JdbcTemplate的知识点

    1.Spring提供的一个操作数据库的技术JdbcTemplate,是对Jdbc的封装.语法风格非常接近DBUtils. JdbcTemplate可以直接操作数据库,加快效率,而且学这个JdbcTem ...

  3. ES6 模板语法和分隔符

    let user = 'Barret'; console.log(`Hi ${user}!`); // Hi Barret!

  4. fedora18 [linux]Error: failure: repodata/repomd.xml from fedora: [Errno 256] No more mirrors to try.

    在使用fedora17 系统的yum源的时候出现了如下错误: Error: failure: repodata/repomd.xml from fedora: [Errno 256] No more ...

  5. Oracle Flashback Drop

    Ensure that the prerequisites described in Prerequisites of Flashback Drop are met. The following li ...

  6. 002-localStorage和sessionStorage操作

    一.概述 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 一直存在除非用户手动清除缓存;是基于域的,任何该域下的所有页面都可访问localSto ...

  7. Tensorflow | 基本函数介绍 简单详细的教程。 有用, 很棒

     http://blog.csdn.net/xxzhangx/article/details/54606040 Tensorflow | 基本函数介绍 2017-01-18 23:04 1404人阅读 ...

  8. 解决旋转屏幕闪退在androidManifest.template.xml里,activity项添加:

     解决旋转屏幕闪退在androidManifest.template.xml里,activity项添加:android:configChanges="orientation|keyboard ...

  9. vue复合组件----注册表单

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. Python解决NameError: name 'reload' is not defined的问题

    遇到这个问题,对于 Python 2.X: import sys reload(sys) sys.setdefaultencoding("utf-8") 对于 Python 3.3 ...