springboot整合mybatis,redis,代码(一)
一 搭建项目,代码工程结构
使用idea或者sts构建springboot项目

二 数据库sql语句
SQLyog Ultimate v12.08 (64 bit)
MySQL - 5.7.14-log
*********************************************************************
*/
/*!40101 SET NAMES utf8 */; create table `person` (
`id` int (11),
`name` varchar (60),
`age` int (11),
`address` varchar (300)
);
insert into `person` (`id`, `name`, `age`, `address`) values('1','feinik1','26','广州');
insert into `person` (`id`, `name`, `age`, `address`) values('2','feinik2','25','北京');
insert into `person` (`id`, `name`, `age`, `address`) values('3','feinik3','24','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('4','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('5','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('6','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('7','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('8','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('9','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('10','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('11','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('12','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('13','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('14','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('15','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('16','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('17','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('18','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('19','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('20','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('21','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('22','zhongguo','1','上海');
insert into `person` (`id`, `name`, `age`, `address`) values('23','zhongguo','1','上海');
三 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 http://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.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cxy</groupId>
<artifactId>springbootredis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springbootredis</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>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</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>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>mybatis generator</id>
<phase>package</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<!--允许移动生产的文件-->
<verbose>true</verbose>
<!--允许自动覆盖文件,在开发者不可以设置为true-->
<overwrite>true</overwrite>
<!--制定生产文件的位置-->
<configurationFile>
src/main/resources/mybatis_generator.xml
</configurationFile>
</configuration>
</plugin>
</plugins>
</build> </project>
四 mybatis-gengerator的xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC
"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
<!--驱动包的路径-->
<!--<classPathEntry location="F:\maven\repos\mysql\mysql-connector-java\5.1.34\mysql-connector-java-5.1.34.jar"/>-->
<context id="DB2Tables" targetRuntime="MyBatis3">
<!--注释-->
<commentGenerator>
<property name="suppressAllComments" value="true"/>
<property name="suppressDate" value="true"/>
</commentGenerator>
<!--数据库连接-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/fr_db?zeroDateTimeBehavior=convertToNull&
autoReconnect=true&useUnicode=true&characterEncoding=utf-8"
userId="root"
password="1234"/> <javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver> <!--生成Model类存放位置-->
<javaModelGenerator targetPackage="com.cxy.dataObject" targetProject="src/main/java">
<!--是否对model添加构造函数-->
<property name="constructorBased" value="false"/>
<!--是否允许子包-->
<property name="enableSubPackages" value="true"/>
<!--建立的model对象是否不可变,也就是生成的model没有setter方法-->
<property name="immutable" value="false"/>
<property name="trimStrings" value="false"/>
</javaModelGenerator> <!--生成映射文件存放位置-->
<sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator> <!--生成Mapper类存放位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.cxy.dao" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator> <!--生成与表对应的类名-->
<table tableName="person" domainObjectName="PersonDo" enableCountByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false" enableUpdateByExample="false" selectByExampleQueryId="false"></table> </context> </generatorConfiguration>
五代码生成

添加如图命令,然后执行,

或者参考springboot整合ssm和druid篇介绍
六 redis配置
package com.cxy.config; import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@EnableCaching
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory); //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(mapper); template.setValueSerializer(serializer);
//使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.afterPropertiesSet();
return template;
}
}
七application.properties文件
## 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/fr_db?useUnicode=true&characterEncoding=utf8&useSSL=true
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.jdbc.Driver ## Mybatis 配置
mybatis.typeAliasesPackage=org.spring.springboot.domain
mybatis.mapperLocations=classpath:mapping/*.xml ## Redis 配置
## Redis数据库索引(默认为0)
spring.redis.database=0
## Redis服务器地址
spring.redis.host=127.0.0.1
## Redis服务器连接端口
spring.redis.port=6379
## Redis服务器连接密码(默认为空)
spring.redis.password=
## 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
## 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
## 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
## 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
## 连接超时时间(毫秒)
spring.redis.timeout=0
八service.dao.controller代码
dao层:
package com.cxy.dao; import com.cxy.dataObject.PersonDo; import javax.validation.constraints.Size;
import java.util.List; public interface PersonDoMapper {
int deleteByPrimaryKey(Integer id); int insert(PersonDo record); int insertSelective(PersonDo record); PersonDo selectByPrimaryKey(Integer id); int updateByPrimaryKeySelective(PersonDo record); int updateByPrimaryKey(PersonDo record); List<PersonDo> selectAllPerson();
}
service层,接口在这里就不直接粘贴了
package com.cxy.service.impl; import ch.qos.logback.core.net.SyslogOutputStream;
import com.cxy.dao.PersonDoMapper;
import com.cxy.dataObject.PersonDo;
import com.cxy.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; @Service
public class PersonServiceImpl implements PersonService {
@Autowired
private PersonDoMapper personDoMapper;
@Cacheable(value = "person", key = "#id")
@Override
public PersonDo selectPersonByPrimaryKey(Integer id) {
System.out.println("查询数据库");
return personDoMapper.selectByPrimaryKey(id);
}
@CacheEvict(value = "person", key = "#personDo.id")
@Override
public Integer updatePersonByPrimaryKey(PersonDo personDo) {
return personDoMapper.updateByPrimaryKey(personDo);
}
@CacheEvict(value = "person", key = "#id")
@Override
public Integer deletePersonByPrimaryKey(Integer id) {
return personDoMapper.deleteByPrimaryKey(id);
}
@CachePut(value = "person", key = "#personDo.id")
@Override
public Integer savePersonDo(PersonDo personDo) {
return personDoMapper.insert(personDo);
}
}
controller层:
package com.cxy.controller; import com.cxy.dataObject.PersonDo;
import com.cxy.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; @RestController
@RequestMapping("/person")
public class PersonController {
@Autowired
private PersonService personService;
@RequestMapping(value = "/{id}",method = RequestMethod.GET)
public PersonDo selectPersonByPrimaryKey(@PathVariable Integer id){
return personService.selectPersonByPrimaryKey(id);
}
@RequestMapping(method = RequestMethod.PUT)
public Integer updatePersonByPrimaryKey(@RequestBody PersonDo personDo){
return personService.updatePersonByPrimaryKey(personDo);
}
@RequestMapping(value = "/{id}",method = RequestMethod.DELETE)
public Integer updatePersonByPrimaryKey(@PathVariable Integer id){
return personService.deletePersonByPrimaryKey(id);
}
@RequestMapping(method = RequestMethod.POST)
public Integer savePerson(@RequestBody PersonDo personDo){
return personService.savePersonDo(personDo);
}
}
九启动
package com.cxy; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
@MapperScan("com.cxy.dao")
public class SpringbootredisApplication { public static void main(String[] args) {
SpringApplication.run(SpringbootredisApplication.class, args);
} }
十运行查询:

控制台输出:

第一次不走缓存,直接查询数据库,第二次走缓存
springboot整合mybatis,redis,代码(一)的更多相关文章
- springboot整合mybatis,redis,代码(二)
一 说明: springboot整合mybatis,redis,代码(一) 这个开发代码的复制粘贴,可以让一些初学者直接拿过去使用,且没有什么bug 二 对上篇的说明 可以查看上图中文件: 整个工程包 ...
- springboot整合mybatis,redis,代码(五)
redis注解开发过程中包含许多注解 1.@Cacheable 可以标记在方法上,也可以标记在类上.当标记在方法上时表示该方法是支持缓存的,当标记在类上时则表示该类所有的方法都是支持缓存的.应用到读取 ...
- springboot整合mybatis,redis,代码(四)
一 说明 这是spring整合redis注解开发的系类: 二 正文 在注解开发时候,会有这几个注解需要注意: 具体含义: 1.@Cacheable 可以标记在方法上,也可以标记在类上.当标记在方法上时 ...
- springboot整合mybatis,redis,代码(三)
一 说明 接着上篇讲述redis缓存配置的用法: 二 正文 首先要使用缓存就必须要开开启缓存,第二步是需要开redis-server 下载redis包之后,点击图中两个都可以开启redis 怎么看是否 ...
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
1.前言 本文主要介绍使用SpringBoot与shiro实现基于数据库的细粒度动态权限管理系统实例. 使用技术:SpringBoot.mybatis.shiro.thymeleaf.pagehelp ...
- springboot学习随笔(四):Springboot整合mybatis(含generator自动生成代码)
这章我们将通过springboot整合mybatis来操作数据库 以下内容分为两部分,一部分主要介绍generator自动生成代码,生成model.dao层接口.dao接口对应的sql配置文件 第一部 ...
- SpringBoot从入门到精通二(SpringBoot整合myBatis的两种方式)
前言 通过上一章的学习,我们已经对SpringBoot有简单的入门,接下来我们深入学习一下SpringBoot,我们知道任何一个网站的数据大多数都是动态的,也就是说数据是从数据库提取出来的,而非静态数 ...
- SpringBoot整合Mybatis之项目结构、数据源
已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...
- SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)
1.概念:SpringBoot 整合 MyBatis 2.背景 SpringBoot 得到最终效果是一个简化到极致的 WEB 开发,但是只要牵扯到 WEB 开发,就绝对不可能缺少数据层操作,所有的开发 ...
随机推荐
- 查询sqlserver数据库视图、存储过程等包含特定的字符串
SELECT A.name , B.definition FROM SYS.objects A INNER JOIN sys.sql_modules B ON A.object_id = B.obje ...
- 深入剖析SolrCloud(一)
作者:洞庭散人 出处:http://phinecos.cnblogs.com/ 本博客遵从Creative Commons Attribution 3.0 License,若用于非商业目的,您可以自由 ...
- codeforce 461DIV2 F题
题意 题目给出n,k,要求找出一个1到n的子集,(a,b)的对数等于k:(a,b)满足a<b且b%a==0: 分析 还记不记得求素数的时候的欧拉筛!对就那样!如果把每个数字看作一个点的话,可以通 ...
- wangEditor富文本编辑器
设置好了是这样的, 有一个ID问content的编辑框,方便获取,这里的富文本编辑器的版本是2.2 官方文档说3就不支持textarea了 导入一下css 记得css文件夹下应该又3个文件,虽然没有直 ...
- selenium3加载浏览器
浏览器禁用更新: 因为selenium对浏览器的支持是有限制的.当浏览器更新到最新版本时,需要下载支持最新版本的插件.有时候selenium还没有更新到支持最新版本的插件,但本地已经更新到最新版本了. ...
- linux上搭建图片服务器
之前写过一个搭建图片服务器的随笔:https://www.cnblogs.com/xujingyang/p/7163290.html ,现在回头看看,我去,感觉写的好乱,现在再整一个吧.o(╯□╰ ...
- 面试题:Java开发中的23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- Docker ubuntu镜像更换apt-get源
在Dockerfile中添加 RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list RUN ap ...
- Office Web APP预览如何去掉顶部版权标志“Microsoft Office Web Apps”
在Office Web APP的预览会涉及4中类型的文 件:Word.Excel.PowerPoint.PDF,不同的类型在预览时调用的文件是不一样的,其中Word和 PDF调用的是同一个文件.每个预 ...
- TP5多入口设置
今天在用tp5做项目的时候发现,前台是可以绑定默认到index模块的,但是后台不好弄,于是查了一下手册,按照手册上说的,复制了index.php改为admin.php,作为后台的入口文件,于是域名/a ...