一 搭建项目,代码工程结构

使用idea或者sts构建springboot项目

二  数据库sql语句

  1. SQLyog Ultimate v12.08 (64 bit)
  2. MySQL - 5.7.14-log
  3. *********************************************************************
  4. */
  5. /*!40101 SET NAMES utf8 */;
  6.  
  7. create table `person` (
  8. `id` int (11),
  9. `name` varchar (60),
  10. `age` int (11),
  11. `address` varchar (300)
  12. );
  13. insert into `person` (`id`, `name`, `age`, `address`) values('1','feinik1','26','广州');
  14. insert into `person` (`id`, `name`, `age`, `address`) values('2','feinik2','25','北京');
  15. insert into `person` (`id`, `name`, `age`, `address`) values('3','feinik3','24','上海');
  16. insert into `person` (`id`, `name`, `age`, `address`) values('4','zhongguo','1','上海');
  17. insert into `person` (`id`, `name`, `age`, `address`) values('5','zhongguo','1','上海');
  18. insert into `person` (`id`, `name`, `age`, `address`) values('6','zhongguo','1','上海');
  19. insert into `person` (`id`, `name`, `age`, `address`) values('7','zhongguo','1','上海');
  20. insert into `person` (`id`, `name`, `age`, `address`) values('8','zhongguo','1','上海');
  21. insert into `person` (`id`, `name`, `age`, `address`) values('9','zhongguo','1','上海');
  22. insert into `person` (`id`, `name`, `age`, `address`) values('10','zhongguo','1','上海');
  23. insert into `person` (`id`, `name`, `age`, `address`) values('11','zhongguo','1','上海');
  24. insert into `person` (`id`, `name`, `age`, `address`) values('12','zhongguo','1','上海');
  25. insert into `person` (`id`, `name`, `age`, `address`) values('13','zhongguo','1','上海');
  26. insert into `person` (`id`, `name`, `age`, `address`) values('14','zhongguo','1','上海');
  27. insert into `person` (`id`, `name`, `age`, `address`) values('15','zhongguo','1','上海');
  28. insert into `person` (`id`, `name`, `age`, `address`) values('16','zhongguo','1','上海');
  29. insert into `person` (`id`, `name`, `age`, `address`) values('17','zhongguo','1','上海');
  30. insert into `person` (`id`, `name`, `age`, `address`) values('18','zhongguo','1','上海');
  31. insert into `person` (`id`, `name`, `age`, `address`) values('19','zhongguo','1','上海');
  32. insert into `person` (`id`, `name`, `age`, `address`) values('20','zhongguo','1','上海');
  33. insert into `person` (`id`, `name`, `age`, `address`) values('21','zhongguo','1','上海');
  34. insert into `person` (`id`, `name`, `age`, `address`) values('22','zhongguo','1','上海');
  35. insert into `person` (`id`, `name`, `age`, `address`) values('23','zhongguo','1','上海');

三 pom.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.2.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.cxy</groupId>
  12. <artifactId>springbootredis</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>springbootredis</name>
  15. <description>Demo project for Spring Boot</description>
  16.  
  17. <properties>
  18. <java.version>1.8</java.version>
  19. </properties>
  20.  
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter-web</artifactId>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.mybatis.spring.boot</groupId>
  28. <artifactId>mybatis-spring-boot-starter</artifactId>
  29. <version>2.0.0</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-starter-redis</artifactId>
  34. <version>1.4.7.RELEASE</version>
  35. </dependency>
  36. <dependency>
  37. <groupId>mysql</groupId>
  38. <artifactId>mysql-connector-java</artifactId>
  39. <version>5.1.41</version>
  40. </dependency>
  41. <dependency>
  42. <groupId>org.springframework.boot</groupId>
  43. <artifactId>spring-boot-starter-test</artifactId>
  44. <scope>test</scope>
  45. </dependency>
  46. </dependencies>
  47.  
  48. <build>
  49. <plugins>
  50. <plugin>
  51. <groupId>org.springframework.boot</groupId>
  52. <artifactId>spring-boot-maven-plugin</artifactId>
  53. </plugin>
  54. <plugin>
  55. <groupId>org.mybatis.generator</groupId>
  56. <artifactId>mybatis-generator-maven-plugin</artifactId>
  57. <version>1.3.5</version>
  58. <dependencies>
  59. <dependency>
  60. <groupId>org.mybatis.generator</groupId>
  61. <artifactId>mybatis-generator-core</artifactId>
  62. <version>1.3.5</version>
  63. </dependency>
  64. <dependency>
  65. <groupId>mysql</groupId>
  66. <artifactId>mysql-connector-java</artifactId>
  67. <version>5.1.41</version>
  68. </dependency>
  69. </dependencies>
  70. <executions>
  71. <execution>
  72. <id>mybatis generator</id>
  73. <phase>package</phase>
  74. <goals>
  75. <goal>generate</goal>
  76. </goals>
  77. </execution>
  78. </executions>
  79. <configuration>
  80. <!--允许移动生产的文件-->
  81. <verbose>true</verbose>
  82. <!--允许自动覆盖文件,在开发者不可以设置为true-->
  83. <overwrite>true</overwrite>
  84. <!--制定生产文件的位置-->
  85. <configurationFile>
  86. src/main/resources/mybatis_generator.xml
  87. </configurationFile>
  88. </configuration>
  89. </plugin>
  90. </plugins>
  91. </build>
  92.  
  93. </project>

四 mybatis-gengerator的xml文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE generatorConfiguration PUBLIC
  3. "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
  5. <generatorConfiguration>
  6. <!--驱动包的路径-->
  7. <!--<classPathEntry location="F:\maven\repos\mysql\mysql-connector-java\5.1.34\mysql-connector-java-5.1.34.jar"/>-->
  8. <context id="DB2Tables" targetRuntime="MyBatis3">
  9. <!--注释-->
  10. <commentGenerator>
  11. <property name="suppressAllComments" value="true"/>
  12. <property name="suppressDate" value="true"/>
  13. </commentGenerator>
  14. <!--数据库连接-->
  15. <jdbcConnection driverClass="com.mysql.jdbc.Driver"
  16. connectionURL="jdbc:mysql://127.0.0.1:3306/fr_db?zeroDateTimeBehavior=convertToNull&amp;
  17.                         autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8"
  18. userId="root"
  19. password="1234"/>
  20.  
  21. <javaTypeResolver>
  22. <property name="forceBigDecimals" value="false"/>
  23. </javaTypeResolver>
  24.  
  25. <!--生成Model类存放位置-->
  26. <javaModelGenerator targetPackage="com.cxy.dataObject" targetProject="src/main/java">
  27. <!--是否对model添加构造函数-->
  28. <property name="constructorBased" value="false"/>
  29. <!--是否允许子包-->
  30. <property name="enableSubPackages" value="true"/>
  31. <!--建立的model对象是否不可变,也就是生成的model没有setter方法-->
  32. <property name="immutable" value="false"/>
  33. <property name="trimStrings" value="false"/>
  34. </javaModelGenerator>
  35.  
  36. <!--生成映射文件存放位置-->
  37. <sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
  38. <property name="enableSubPackages" value="true"/>
  39. </sqlMapGenerator>
  40.  
  41. <!--生成Mapper类存放位置-->
  42. <javaClientGenerator type="XMLMAPPER" targetPackage="com.cxy.dao" targetProject="src/main/java">
  43. <property name="enableSubPackages" value="true"/>
  44. </javaClientGenerator>
  45.  
  46. <!--生成与表对应的类名-->
  47. <table tableName="person" domainObjectName="PersonDo" enableCountByExample="false"
  48. enableDeleteByExample="false"
  49. enableSelectByExample="false" enableUpdateByExample="false" selectByExampleQueryId="false"></table>
  50.  
  51. </context>
  52.  
  53. </generatorConfiguration>

五代码生成

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

或者参考springboot整合ssm和druid篇介绍

六 redis配置

  1. package com.cxy.config;
  2.  
  3. import com.fasterxml.jackson.annotation.JsonAutoDetect;
  4. import com.fasterxml.jackson.annotation.PropertyAccessor;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import org.springframework.cache.annotation.EnableCaching;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. import org.springframework.data.redis.connection.RedisConnectionFactory;
  10. import org.springframework.data.redis.core.RedisTemplate;
  11. import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
  12. import org.springframework.data.redis.serializer.StringRedisSerializer;
  13. @EnableCaching
  14. @Configuration
  15. public class RedisConfig {
  16. @Bean
  17. public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
  18. RedisTemplate<Object, Object> template = new RedisTemplate<>();
  19. template.setConnectionFactory(connectionFactory);
  20.  
  21. //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
  22. Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
  23.  
  24. ObjectMapper mapper = new ObjectMapper();
  25. mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  26. mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  27. serializer.setObjectMapper(mapper);
  28.  
  29. template.setValueSerializer(serializer);
  30. //使用StringRedisSerializer来序列化和反序列化redis的key值
  31. template.setKeySerializer(new StringRedisSerializer());
  32. template.afterPropertiesSet();
  33. return template;
  34. }
  35. }

七application.properties文件

  1. ## 数据源配置
  2. spring.datasource.url=jdbc:mysql://localhost:3306/fr_db?useUnicode=true&characterEncoding=utf8&useSSL=true
  3. spring.datasource.username=root
  4. spring.datasource.password=1234
  5. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  6.  
  7. ## Mybatis 配置
  8. mybatis.typeAliasesPackage=org.spring.springboot.domain
  9. mybatis.mapperLocations=classpath:mapping/*.xml
  10.  
  11. ## Redis 配置
  12. ## Redis数据库索引(默认为0)
  13. spring.redis.database=0
  14. ## Redis服务器地址
  15. spring.redis.host=127.0.0.1
  16. ## Redis服务器连接端口
  17. spring.redis.port=6379
  18. ## Redis服务器连接密码(默认为空)
  19. spring.redis.password=
  20. ## 连接池最大连接数(使用负值表示没有限制)
  21. spring.redis.pool.max-active=8
  22. ## 连接池最大阻塞等待时间(使用负值表示没有限制)
  23. spring.redis.pool.max-wait=-1
  24. ## 连接池中的最大空闲连接
  25. spring.redis.pool.max-idle=8
  26. ## 连接池中的最小空闲连接
  27. spring.redis.pool.min-idle=0
  28. ## 连接超时时间(毫秒)
  29. spring.redis.timeout=0

八service.dao.controller代码

dao层:

  1. package com.cxy.dao;
  2.  
  3. import com.cxy.dataObject.PersonDo;
  4.  
  5. import javax.validation.constraints.Size;
  6. import java.util.List;
  7.  
  8. public interface PersonDoMapper {
  9. int deleteByPrimaryKey(Integer id);
  10.  
  11. int insert(PersonDo record);
  12.  
  13. int insertSelective(PersonDo record);
  14.  
  15. PersonDo selectByPrimaryKey(Integer id);
  16.  
  17. int updateByPrimaryKeySelective(PersonDo record);
  18.  
  19. int updateByPrimaryKey(PersonDo record);
  20.  
  21. List<PersonDo> selectAllPerson();
  22. }

service层,接口在这里就不直接粘贴了

  1. package com.cxy.service.impl;
  2.  
  3. import ch.qos.logback.core.net.SyslogOutputStream;
  4. import com.cxy.dao.PersonDoMapper;
  5. import com.cxy.dataObject.PersonDo;
  6. import com.cxy.service.PersonService;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.cache.annotation.CacheEvict;
  9. import org.springframework.cache.annotation.CachePut;
  10. import org.springframework.cache.annotation.Cacheable;
  11. import org.springframework.stereotype.Service;
  12.  
  13. @Service
  14. public class PersonServiceImpl implements PersonService {
  15. @Autowired
  16. private PersonDoMapper personDoMapper;
  17. @Cacheable(value = "person", key = "#id")
  18. @Override
  19. public PersonDo selectPersonByPrimaryKey(Integer id) {
  20. System.out.println("查询数据库");
  21. return personDoMapper.selectByPrimaryKey(id);
  22. }
  23. @CacheEvict(value = "person", key = "#personDo.id")
  24. @Override
  25. public Integer updatePersonByPrimaryKey(PersonDo personDo) {
  26. return personDoMapper.updateByPrimaryKey(personDo);
  27. }
  28. @CacheEvict(value = "person", key = "#id")
  29. @Override
  30. public Integer deletePersonByPrimaryKey(Integer id) {
  31. return personDoMapper.deleteByPrimaryKey(id);
  32. }
  33. @CachePut(value = "person", key = "#personDo.id")
  34. @Override
  35. public Integer savePersonDo(PersonDo personDo) {
  36. return personDoMapper.insert(personDo);
  37. }
  38. }

controller层:

  1. package com.cxy.controller;
  2.  
  3. import com.cxy.dataObject.PersonDo;
  4. import com.cxy.service.PersonService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.web.bind.annotation.*;
  7.  
  8. @RestController
  9. @RequestMapping("/person")
  10. public class PersonController {
  11. @Autowired
  12. private PersonService personService;
  13. @RequestMapping(value = "/{id}",method = RequestMethod.GET)
  14. public PersonDo selectPersonByPrimaryKey(@PathVariable Integer id){
  15. return personService.selectPersonByPrimaryKey(id);
  16. }
  17. @RequestMapping(method = RequestMethod.PUT)
  18. public Integer updatePersonByPrimaryKey(@RequestBody PersonDo personDo){
  19. return personService.updatePersonByPrimaryKey(personDo);
  20. }
  21. @RequestMapping(value = "/{id}",method = RequestMethod.DELETE)
  22. public Integer updatePersonByPrimaryKey(@PathVariable Integer id){
  23. return personService.deletePersonByPrimaryKey(id);
  24. }
  25. @RequestMapping(method = RequestMethod.POST)
  26. public Integer savePerson(@RequestBody PersonDo personDo){
  27. return personService.savePersonDo(personDo);
  28. }
  29. }

九启动

  1. package com.cxy;
  2.  
  3. import org.mybatis.spring.annotation.MapperScan;
  4. import org.springframework.boot.SpringApplication;
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;
  6.  
  7. @SpringBootApplication
  8. @MapperScan("com.cxy.dao")
  9. public class SpringbootredisApplication {
  10.  
  11. public static void main(String[] args) {
  12. SpringApplication.run(SpringbootredisApplication.class, args);
  13. }
  14.  
  15. }

十运行查询:

控制台输出:

第一次不走缓存,直接查询数据库,第二次走缓存

springboot整合mybatis,redis,代码(一)的更多相关文章

  1. springboot整合mybatis,redis,代码(二)

    一 说明: springboot整合mybatis,redis,代码(一) 这个开发代码的复制粘贴,可以让一些初学者直接拿过去使用,且没有什么bug 二 对上篇的说明 可以查看上图中文件: 整个工程包 ...

  2. springboot整合mybatis,redis,代码(五)

    redis注解开发过程中包含许多注解 1.@Cacheable 可以标记在方法上,也可以标记在类上.当标记在方法上时表示该方法是支持缓存的,当标记在类上时则表示该类所有的方法都是支持缓存的.应用到读取 ...

  3. springboot整合mybatis,redis,代码(四)

    一 说明 这是spring整合redis注解开发的系类: 二 正文 在注解开发时候,会有这几个注解需要注意: 具体含义: 1.@Cacheable 可以标记在方法上,也可以标记在类上.当标记在方法上时 ...

  4. springboot整合mybatis,redis,代码(三)

    一 说明 接着上篇讲述redis缓存配置的用法: 二 正文 首先要使用缓存就必须要开开启缓存,第二步是需要开redis-server 下载redis包之后,点击图中两个都可以开启redis 怎么看是否 ...

  5. SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例

    1.前言 本文主要介绍使用SpringBoot与shiro实现基于数据库的细粒度动态权限管理系统实例. 使用技术:SpringBoot.mybatis.shiro.thymeleaf.pagehelp ...

  6. springboot学习随笔(四):Springboot整合mybatis(含generator自动生成代码)

    这章我们将通过springboot整合mybatis来操作数据库 以下内容分为两部分,一部分主要介绍generator自动生成代码,生成model.dao层接口.dao接口对应的sql配置文件 第一部 ...

  7. SpringBoot从入门到精通二(SpringBoot整合myBatis的两种方式)

    前言 通过上一章的学习,我们已经对SpringBoot有简单的入门,接下来我们深入学习一下SpringBoot,我们知道任何一个网站的数据大多数都是动态的,也就是说数据是从数据库提取出来的,而非静态数 ...

  8. SpringBoot整合Mybatis之项目结构、数据源

    已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...

  9. SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)

    1.概念:SpringBoot 整合 MyBatis 2.背景 SpringBoot 得到最终效果是一个简化到极致的 WEB 开发,但是只要牵扯到 WEB 开发,就绝对不可能缺少数据层操作,所有的开发 ...

随机推荐

  1. Python基本数据类型之字符串、数字、布尔

     一.数据类型种类 Python中基本数据类型主要有以下几类: Number(数字) String(字符串) Bool (布尔) List(列表) Tuple(元组) Sets(集合) Diction ...

  2. CSV Format

    [CSV Format] The comma separated values format (CSV) has been used for exchanging and converting dat ...

  3. tomcat报503 或者无法启动应用

    一般都是配置文件有问题,或者路径问题,或者jvm的参数路径问题.... 总之,报错实在是不清楚!这点比resin差远了!!

  4. js弹出窗口

    function openModalDialog(url, height, width) { var t_height = 400; var t_width = 600; if (!isNaN(hei ...

  5. Ubuntu 查看软件版本

    Boost dpkg -S /usr/include/boost/version.hpp OpenCV pkg-config --modversion opencv

  6. boost 时间与日期处理

    博客转载自: 类 特点 缺点 说明 timer 计时基类 不适合大跨度时间 适用大部分的普通计时 progress_timer 继承自timer 可以自动写入流中 只精确到0.01s 如果需要更精确, ...

  7. 正则表达式复习 (?<=) (?=)

    1.首先值得一说的是"<" 和">" 不是元字符 "."是元字符 ,连接字符"-",即使在字符组内部也不一定 ...

  8. C# 世界坐标 页面坐标 PageUnit PageScale

    PageScale:  获取或设置此 Graphics 的世界单位和页单位之间的比例.PageUnit:  获取或设置用于此 Graphics 中的页坐标的度量单位. 话不多说,上代码: privat ...

  9. mvc全局过滤器和httpmodule的执行顺序

    根据http管线模型,请求先通过httpmodule,再通过httphandler,之后再进入mvc的过滤器 另外参考:MVC如何在Pipeline中接管请求的? http://www.cnblogs ...

  10. wpf path语法

    http://www.cnblogs.com/HQFZ/p/4452548.html WPF系列 Path表示语法详解(Path之Data属性语法)