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 开发,就绝对不可能缺少数据层操作,所有的开发 ...
随机推荐
- Python基本数据类型之字符串、数字、布尔
一.数据类型种类 Python中基本数据类型主要有以下几类: Number(数字) String(字符串) Bool (布尔) List(列表) Tuple(元组) Sets(集合) Diction ...
- CSV Format
[CSV Format] The comma separated values format (CSV) has been used for exchanging and converting dat ...
- tomcat报503 或者无法启动应用
一般都是配置文件有问题,或者路径问题,或者jvm的参数路径问题.... 总之,报错实在是不清楚!这点比resin差远了!!
- js弹出窗口
function openModalDialog(url, height, width) { var t_height = 400; var t_width = 600; if (!isNaN(hei ...
- Ubuntu 查看软件版本
Boost dpkg -S /usr/include/boost/version.hpp OpenCV pkg-config --modversion opencv
- boost 时间与日期处理
博客转载自: 类 特点 缺点 说明 timer 计时基类 不适合大跨度时间 适用大部分的普通计时 progress_timer 继承自timer 可以自动写入流中 只精确到0.01s 如果需要更精确, ...
- 正则表达式复习 (?<=) (?=)
1.首先值得一说的是"<" 和">" 不是元字符 "."是元字符 ,连接字符"-",即使在字符组内部也不一定 ...
- C# 世界坐标 页面坐标 PageUnit PageScale
PageScale: 获取或设置此 Graphics 的世界单位和页单位之间的比例.PageUnit: 获取或设置用于此 Graphics 中的页坐标的度量单位. 话不多说,上代码: privat ...
- mvc全局过滤器和httpmodule的执行顺序
根据http管线模型,请求先通过httpmodule,再通过httphandler,之后再进入mvc的过滤器 另外参考:MVC如何在Pipeline中接管请求的? http://www.cnblogs ...
- wpf path语法
http://www.cnblogs.com/HQFZ/p/4452548.html WPF系列 Path表示语法详解(Path之Data属性语法)