1.地址:https://github.com/heidaodageshiwo/springbootredis
2.sql
/*
Navicat MySQL Data Transfer
Source Server : 张强本机mysql
Source Server Version : 50720
Source Host : localhost:3306
Source Database : zqmybatisplus
Target Server Type : MYSQL
Target Server Version : 50720
File Encoding : 65001
Date: 2020-11-17 11:05:52
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for t_users
-- ----------------------------
DROP TABLE IF EXISTS `t_users`;
CREATE TABLE `t_users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(10) DEFAULT NULL,
`bir` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_users
-- ----------------------------
INSERT INTO `t_users` VALUES ('1', '1', '1', '2020-11-16 20:36:07');
INSERT INTO `t_users` VALUES ('2', 'ffff反反复复付付付付付付付付', '2', '2020-11-16 13:04:53');
INSERT INTO `t_users` VALUES ('3', 'ffff反反复复付付付付付付付付', '2', '2020-11-16 13:04:53');
INSERT INTO `t_users` VALUES ('4', 'bbbb', '3223', '2020-11-16 13:47:06');
INSERT INTO `t_users` VALUES ('5', 'bbbb', '3223', '2020-11-16 13:47:50');
3.yml
spring:
redis:
host: 127.0.0.1
port: 6379
password:
jedis:
pool:
max-active: 8
max-wait: -1ms
max-idle: 500
min-idle: 0
lettuce:
shutdown-timeout: 0ms
datasource:
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
datasource:
master:
url: jdbc:mysql://localhost:3306/zqmybatisplus?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: zhangqiang
driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
slave_1:
url: jdbc:mysql://localhost:3306/zq?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: zhangqiang
driver-class-name: com.mysql.cj.jdbc.Driver
# type: com.alibaba.druid.pool.DruidDataSource
# driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://localhost:3306/zqmybatisplus?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
# username: root
# password: zhangqiang
logging:
level:
root: info
com:
zhangqiangredis:
redistest:
mybatisplus:
dao: debug
4.dao
package com.zhangqiangredis.redistest.mybatisplus.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zhangqiangredis.redistest.mybatisplus.entity.Users;
/**
* java类简单作用描述
*
* @ProjectName: redistest
* @Package: com.zhangqiangredis.redistest.dao
* @ClassName: testdao
* @Description: java类作用描述
* @Author: zhangq
* @CreateDate: 2020-11-16 20:07
* @UpdateUser: zhangq
* @UpdateDate: 2020-11-16 20:07
* @UpdateRemark: The modified content
* @Version: 1.0 *
*/
public interface UsersDao extends BaseMapper<Users> {
}
5.entity
package com.zhangqiangredis.redistest.mybatisplus.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
/**
* java类简单作用描述
*
* @ProjectName: redistest
* @Package: com.zhangqiangredis.redistest.mybatisplus.entity
* @ClassName: users
* @Description: java类作用描述
* @Author: zhangq
* @CreateDate: 2020-11-16 20:19
* @UpdateUser: zhangq
* @UpdateDate: 2020-11-16 20:19
* @UpdateRemark: The modified content
* @Version: 1.0 *
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Accessors(chain = true)
@TableName(value = "t_users")
public class Users {
@TableId(value = "id",type = IdType.AUTO)
private String id;
@TableField(value = "name")
private String name;
private Integer age;
private Date bir;
@TableField(exist = false)
private String aa;
}
6.service
package com.zhangqiangredis.redistest.mybatisplus.service;
import com.zhangqiangredis.redistest.mybatisplus.entity.Users;
import java.util.List;
/**
* java类简单作用描述
*
* @ProjectName: redistest
* @Package: com.zhangqiangredis.redistest.mybatisplus.service
* @ClassName: UsersService
* @Description: java类作用描述
* @Author: zhangq
* @CreateDate: 2020-11-16 21:34
* @UpdateUser: zhangq
* @UpdateDate: 2020-11-16 21:34
* @UpdateRemark: The modified content
* @Version: 1.0 *
*/
public interface UsersService {
List<Users> findAll();
void save(Users users);
}
package com.zhangqiangredis.redistest.mybatisplus.service;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.zhangqiangredis.redistest.mybatisplus.dao.UsersDao;
import com.zhangqiangredis.redistest.mybatisplus.entity.Users;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* java类简单作用描述
*
* @ProjectName: redistest
* @Package: com.zhangqiangredis.redistest.mybatisplus.service
* @ClassName: UsersServiceImpl
* @Description: java类作用描述
* @Author: zhangq
* @CreateDate: 2020-11-16 21:34
* @UpdateUser: zhangq
* @UpdateDate: 2020-11-16 21:34
* @UpdateRemark: The modified content
* @Version: 1.0 *
*/
@Service
@Transactional
public class UsersServiceImpl implements UsersService{
@Autowired
private UsersDao usersDao;
@Override
@DS("master")
public List<Users> findAll() {
return usersDao.selectList(null);
}
@Override
@DS("slave_1")
public void save(Users users) {
usersDao.insert(users);
}
}
7.test
package com.zhangqiangredis.redistest;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhangqiangredis.redistest.mybatisplus.dao.UsersDao;
import com.zhangqiangredis.redistest.mybatisplus.entity.Users;
import com.zhangqiangredis.redistest.mybatisplus.service.UsersService;
import java.util.Date;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
@SpringBootTest
class ServiceTests {
@Autowired
private UsersService usersService;
//查询所有主库
@Test
public void testFindAllList(){
List<Users> all = usersService.findAll();
all.forEach(usersa->{
System.out.println("usersa = " + usersa);
});
}
//保存单个到从库
@Test
public void testFindone(){
Users users=new Users();
users.setName("bbbb").setAge(3223).setBir(new Date());
usersService.save(users);
}
}
8.pom
<?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.3.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.zhangqiangredis</groupId>
<artifactId>redistest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>redistest</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-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
<!--多数据源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
9.Application 涉及分页 ,需要注入bean PaginationInterceptor
package com.zhangqiangredis.redistest;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@SpringBootApplication
@MapperScan("com.zhangqiangredis.redistest.mybatisplus.dao")
@Configuration
public class RedistestApplication {
public static void main(String[] args) {
SpringApplication.run(RedistestApplication.class, args);
}
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
// paginationInterceptor.setLimit(500);
// 开启 count 的 join 优化,只针对部分 left join
// paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
}