文档章节

Springboot整合mybatis并配置redis缓存

viakiba
 viakiba
发布于 2017/07/23 21:35
字数 777
阅读 186
收藏 0

代码位置:

https://github.com/viakiba/springboot/tree/master/springbootredis

引入依赖查看pom文件不再贴出来。

首先,配置application.properties

#server.port = 8080
spring.debug = true
# DATASOURCE
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot
spring.datasource.username = root
spring.datasource.password = 951357qaz
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource

# mybatis
mybatis.configLocation: classpath:mybatis-config.xml

# REDIS (RedisProperties)  
spring.redis.host=127.0.0.1 
spring.redis.port=6379

#thymeleaf
spring.thymeleaf.suffix=.html  
spring.thymeleaf.content-type=text/html
#spring.thymeleaf.prefix=classpath:/templates/
#spring.thymeleaf.mode=HTML5
# ;charset=<encoding> is added
#spring.thymeleaf.encoding=UTF-8
# set to false for hot refresh
spring.thymeleaf.cache=false

然后设置mybatis配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <settings>
    <setting name="logImpl" value="LOG4J"/>
  </settings>
</configuration>

最后设置logback:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- 引用顶级配置 -->
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <!-- 属性: 
            1)name:用来指定受此logger约束的某一个包或者具体的某一个类 
            2)level:用来设置打印级别,大小写无关(最常用的几种):DEBUG, INFO, WARN, ERROR 
    -->
    <!-- 这一句至关重要如果没有,就无法输出sql语句 -->
    <logger name="com.example.demo.dao" level="DEBUG"></logger>
 </configuration>

配置文件配置完毕,代码方面:

第一个设置key的生成原则,在config包下:

package com.example.demo.config;

import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.cache.interceptor.SimpleKey;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.cache.RedisCacheManager;  
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;  
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.lang.reflect.Method; 
@Configuration  
@EnableCaching  
public class CacheRedisConfig extends CachingConfigurerSupport{  
  
	@Autowired
    private JedisConnectionFactory jedisConnectionFactory;
	
	@Bean(name = "SimpleKey")
	public KeyGenerator getKeyGenerator(){
		return new KeyGenerator() {  
          @Override  
          public Object generate(Object target, Method method, Object... params) {  
              StringBuilder sb = new StringBuilder();  
              sb.append(target.getClass().getName());  
              sb.append(method.getName());  
              for (Object obj : params) {  
                  sb.append(obj.toString());  
              }
              System.out.println(sb.toString());
              return sb.toString();  
          }  
      }; 
	}
    @Bean
    public RedisCacheManager cacheManager() {
        RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate());
        return redisCacheManager;
    }

    @Bean
    public RedisTemplate<Object, Object> redisTemplate() {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
       
        redisTemplate.setConnectionFactory(jedisConnectionFactory);
        // 开启事务支持
        redisTemplate.setEnableTransactionSupport(true);
        // 使用String格式序列化缓存键
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        
        redisTemplate.setValueSerializer(stringRedisSerializer);
        redisTemplate.setHashValueSerializer(stringRedisSerializer);
        
        return redisTemplate;
    } 
}  

设置数据库连接池,也是在config包下:

package com.example.demo.config;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import com.alibaba.druid.pool.DruidDataSource;

/** 
 * @description: 
 * @author viakiba
 * @date 2017年7月12日
 */
@Configuration
@MapperScan(basePackages = DruidDataSourceConfig.PACKAGE,sqlSessionFactoryRef = "sqlSessionFactory")
public class DruidDataSourceConfig {
	static final String PACKAGE = "com.example.demo.dao";
	static final String MAPPER_LOCATION = "classpath:mapper/*.xml";
	
	//接下来使用的value注解获取application.properties拿到值进行初始化  spring-EL表达式
	@Value("${spring.datasource.url}")
	private String url ;
	@Value("${spring.datasource.username}")
	private String user ;
	@Value("${spring.datasource.password}")
	private String password ;
	@Value("${spring.datasource.driver-class-name}")
	private String driverClass ;
	
	//数据源
	//Bean明确地指示产生一个bean的方法,并且交给Spring容器管理;
	@Bean(name="dataSource")
	//标志这个 Bean 如果在多个同类 Bean 候选时,该 Bean 优先被考虑。「多数据源配置的时候注意,必须要有一个主数据源,用 @Primary 标志该 Bean
	@Primary
	public DataSource dataSource(){
		DruidDataSource druidDataSource = new DruidDataSource();
		druidDataSource.setUrl(url);
		druidDataSource.setUsername(user);
		druidDataSource.setPassword(password);
		druidDataSource.setDriverClassName(driverClass);
		return druidDataSource;
		
	}
	//主库事务
	@Bean(name = "transactionManager")
    @Primary
    public DataSourceTransactionManager masterTransactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }
	//主库sqlSessionFactory   @Qualifier("XXX") 中的 XX是 Bean 的名称,所以 @Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了。
	@Bean(name = "sqlSessionFactory")
	@Primary
	public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception{
		final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		sqlSessionFactoryBean.setDataSource(dataSource);
		sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(DruidDataSourceConfig.MAPPER_LOCATION));
		return sqlSessionFactoryBean.getObject();
	}
}

其中的注解作用,不在详细解释。

然后,在dao包下,如下写法:

package com.example.demo.dao;

import org.springframework.cache.annotation.Cacheable;

/** 
 * @description: 
 * @author viakiba
 * @date 2017年7月13日
 */

public interface UserinfoDao {
	
	@Cacheable(value = "usercache",keyGenerator="SimpleKey")  
	public String selectUser();
}

注意simplekey就是config包下,CacheRedisConfig 里面通过@Bean指定名字载入的。

其他关于mybatis的mapper查看application.properties即可。

© 著作权归作者所有

共有 人打赏支持
viakiba
粉丝 4
博文 113
码字总数 67168
作品 0
昌平
后端工程师
私信 提问
【SpringBoot2.0系列08】SpringBoot之redis数据缓存管理

【SpringBoot2.0系列01】初识SpringBoot 【SpringBoot2.0系列02】SpringBoot之使用Thymeleaf视图模板 【SpringBoot2.0系列03】SpringBoot之使用freemark视图模板 【SpringBoot2.0系列04】Spr...

余空啊
08/20
0
0
SpringBoot 学习二:操作数据库

本文将从以下几个方面介绍: 前言 配置数据源 SpringBoot 整合 Mybatis SpringBoot 整合 JdbcTemplate SpringBoot 整合 Redis 前言 在上篇文章 SpringBoot 学习一 中已经学习了 SpringBoot的...

tsmyk0715
09/26
0
0
SpringBoot整合Redis、ApacheSolr和SpringSession

一、简介 SpringBoot自从问世以来,以其方便的配置受到了广大开发者的青睐。它提供了各种starter简化很多繁琐的配置。SpringBoot整合Druid、Mybatis已经司空见惯,在这里就不详细介绍了。今天...

小忽悠
07/19
0
0
Spring Boot学习笔记

RabbitMQ RabbitMQ 安装 linux安装RabbitMQ详细教程 Ubuntu 16.04 RabbitMq 安装与运行(安装篇) ubantu安装rabbitMQ步骤 多线程 Spring @transactional注解和synchronized同步锁同时使用不...

OSC_fly
07/26
0
0
SpringBootBucket 1.0.0 发布,SprintBoot 全家桶

Spring Boot 现在已经成为Java 开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通过“一...

一刀
03/05
7.3K
17

没有更多内容

加载失败,请刷新页面

加载更多

[Spring4.x]基于spring4.x纯注解的Web工程搭建

在前文中已经说明了如何基于 Spring4.x+ 版本开发纯注解的非web项目,链接如下: https://my.oschina.net/morpheusWB/blog/2985600 本文则主要说明,如何在Web项目中,"基于spring纯注解方式...

morpheusWB
16分钟前
1
0
基础编程题目集-7-13 日K蜡烛图

股票价格涨跌趋势,常用蜡烛图技术中的K线图来表示,分为按日的日K线、按周的周K线、按月的月K线等。以日K线为例,每天股票价格从开盘到收盘走完一天,对应一根蜡烛小图,要表示四个价格:开...

niithub
32分钟前
3
0
Jenkins window 下的安装使用

1.下载:https://jenkins.io/download/ 双击安装完毕,将自动打开浏览器: http://localhost:8080 打开对应位置的文件,将初始密钥粘贴至输入框。 第一个是 安装默认的软件;第二个是 自定义...

狼王黄师傅
34分钟前
1
0
深入解析react关于事件绑定this的四种方式

这篇文章主要介绍了详解react关于事件绑定this的四种方式,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 在react组件中,每个方...

前端攻城小牛
42分钟前
2
0
JS正则表达式

url的正则表达式:包括IP,域名(domain),ftp,二级域名,域名中的文件,域名加上端口!用户名等等信息 `function` `IsURL(str_url) {``var` `strRegex =``"^((https|http|ftp|rtsp|mm...

前端小攻略
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部