javaweb各种框架组合案例(九):springboot+tk.mybatis+通用service
一、项目结构
二、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的更多相关文章
- javaweb各种框架组合案例(八):springboot+mybatis-plus+restful
一.介绍 1. springboot是spring项目的总结+整合 当我们搭smm,ssh,ssjdbc等组合框架时,各种配置不胜其烦,不仅是配置问题,在添加各种依赖时也是让人头疼,关键有些jar包之 ...
- javaweb各种框架组合案例(七):springboot+jdbcTemplete+通用dao+restful
一.介绍 1.springboot是spring项目的总结+整合 当我们搭smm,ssh,ssjdbc等组合框架时,各种配置不胜其烦,不仅是配置问题,在添加各种依赖时也是让人头疼,关键有些jar包之间 ...
- javaweb各种框架组合案例(六):springboot+spring data jpa(hibernate)+restful
一.介绍 1.springboot是spring项目的总结+整合 当我们搭smm,ssh,ssjdbc等组合框架时,各种配置不胜其烦,不仅是配置问题,在添加各种依赖时也是让人头疼,关键有些jar包之间 ...
- javaweb各种框架组合案例(五):springboot+mybatis+generator
一.介绍 1.springboot是spring项目的总结+整合 当我们搭smm,ssh,ssjdbc等组合框架时,各种配置不胜其烦,不仅是配置问题,在添加各种依赖时也是让人头疼,关键有些jar包之间 ...
- javaweb各种框架组合案例(三):maven+spring+springMVC+hibernate
1.hibernate译为"越冬",指的是给java程序员带来春天,因为java程序员无需再关心各种sql了: 2.hibernate通过java类生成数据库表,通过操作对象来映射 ...
- javaweb各种框架组合案例(二):maven+spring+springMVC+mybatis
1.mybatis是比较新的半自动orm框架,效率也比较高,优点是sql语句的定制,管理与维护,包括优化,缺点是对开发人员的sql功底要求较高,如果比较复杂的查询,表与表之间的关系映射到对象与对象之间 ...
- javaweb各种框架组合案例(四):maven+spring+springMVC+spring data jpa(hibernate)【失败案例】
一.失败案例 1. 控制台报错信息 严重: Exception sending context initialized event to listener instance of class org. ...
- javaweb各种框架组合案例(一):maven+spring+springMVC+jdbcTemplate
为了体现spring jdbc对于单表操作的优势,我专门对dao层做了一个抽离,使得抽离出的核心dao具有通用性.主要技术难点是对于泛型的反射.注意:单表操作中,数据库表的字段要和实体类的属性名保持高 ...
- Spring Boot2 系列教程 (九) | SpringBoot 整合 Mybatis
前言 如题,今天介绍 SpringBoot 与 Mybatis 的整合以及 Mybatis 的使用,本文通过注解的形式实现. 什么是 Mybatis MyBatis 是支持定制化 SQL.存储过程以及 ...
随机推荐
- warp(图像仿射变换)
仿射变换是一种二维坐标(x,y)到二维坐标(u,v)的线性变换. 对应的齐次坐标矩阵表示形式为: 仿射变换特点: 直线经仿射变换后依然为直线: ’直线之间的相对位置关系保持不变,平行线经仿射变换后依然 ...
- SpringCloud 教程 (四) docker部署spring cloud项目
一.docker简介 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机). ...
- [design pattern](1) Strategy
引言 最近,在学习设计模式相关的知识.本博客主要想讲一讲策略模式,这也是我学习的第一个模式.写下这篇博客,主要想记录下个人的一点理解,也是想通过写博客的方式来加深对与Strategy的一点理解.以下的 ...
- SQL 基本查询语句
--使用数据库 use date go --创建表班级表 create table classInfo ( classNo ,),--主键约束使用primary key identity classN ...
- CTEX WinEdt 改变默认 pdf viewer
CTEX 2.9.2, WinEdt 7.0 "Options" -> "Excution Modes..." -> "PDF viewe ...
- (selenium+python)_UI自动化01_Mac下selenium环境搭建
前言 Selenium 是一个用于Web网页UI自动化测试的开源框架,可以驱动浏览器模拟用户操作.支持多种平台(Windows.Mac OS.Linux)和多种浏览器(IE.Firefox.Chrom ...
- Java JDK安装教程以及JDK多版本间快速切换配置
原本想自己写一篇,结果在网上发现一篇写的特别好的博文,大家可以去原网址围观浏览加点赞, 只是搬运工+迷弟. 原文地址:https://blog.csdn.net/qq_38916130/article ...
- django配置mysql报错 no model named "MySQLdb"
官网上面连接mysql数据库的参数很少,入了不少坑,一直排错和检查参数都没有问题,只能manage.py mirgrate 更新数据库的信息创建数据库的表. 很是郁闷.报了一大堆的错误,大概意思就是说 ...
- debian下使用shell脚本时出现了 declare:not found 解决方法
问题:出现declare:not found的提示 解决:原来,UBUNTU用的是dash(后来证明这个其实这个不是错误的原因:从#!/bin/bash到#!/bin/dash,依旧无法运行,在这写出 ...
- 编码总结一:Java默认字符集
(一)JVM默认字符集——Charset.defaultCharset() 获取Java虚拟机默认字符集,该字符集默认跟操作系统字符集一致,也可以通过-Dfile.encoding="GBK ...