SpringBoot--整合Mybatis和Redis

1 SpringBoot并没有提供整合Mybatis的工具包
第一种:使用mybatis官方提供的Spring Boot整合包实现,下载地址:https://github.com/mybatis/spring-boot-starter
第二种:自己整合,与Spring整合Mybatis类似。

2 配置JDBC,将数据源添加到容器中。

/**
 * JDBC配置
 * @author Tang 
 * 2017年11月18日
 */
@Configuration
@PropertySource(value = { "jdbc.properties" })//读取外部配置文件
public class JdbcConfig {

	// 数据库配置开始
	@Value("${driverClassName}")
	private String driverClassName;

	@Value("${url}")
	private String url;

	@Value("${username}")
	private String username;

	@Value("${password}")
	private String password;

	@Bean(destroyMethod = "close")
	public BasicDataSource dataSource() {
		BasicDataSource basicDataSource = new BasicDataSource();
		basicDataSource.setDriverClassName(driverClassName);
		basicDataSource.setUrl(url);
		basicDataSource.setUsername(username);
		basicDataSource.setPassword(password);
		return basicDataSource;
	}
}

需要读取外部的配置文件:
jdbc.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=true
username=root
password=123123

3 整合Mybatis

/**
 * Mybatis的配置
 * @author Tang
 * 2017年11月18日
 */
@Configuration
@AutoConfigureAfter(JdbcConfig.class)//保证在JDBC配置完成后实例化
public class MybatisConfig {

	@Autowired
	private DataSource dataSource;
	
	@Bean
    @ConditionalOnMissingBean //当容器里没有指定的Bean的情况下创建该对象
    public SqlSessionFactoryBean sqlSessionFactory() {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        // 设置数据源
        sqlSessionFactoryBean.setDataSource(dataSource);
        // 设置mybatis的主配置文件
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource mybatisConfigXml = resolver.getResource("classpath:mybatis-config.xml");
        sqlSessionFactoryBean.setConfigLocation(mybatisConfigXml);
        return sqlSessionFactoryBean;
    }
	
	/**
	 * 定义扫描
	 * @return
	 */
	@Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setBasePackage("com.text.springboot.dao");
        return mapperScannerConfigurer;
    }
}

通过Spring的自动注入,注入上一步配置好的JDBC数据源。

4 配置声明式事务管理
在Spring Boot中推荐使用@Transactional注解来申明事务。
首先需要导入依赖:

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

当引入jdbc依赖之后,Spring Boot会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager,所以我们不需要任何额外配置就可以用@Transactional注解进行事务的使用。
在需要事务的Service中添加@Transactional注解即可,具体可看Spring的官方文档,关于声明式事务。

5 整合Redis

/**
 * Redis相关配置
 * @author Tang
 * 2017年11月18日
 */
@Configuration
@PropertySource(value="classpath:redis.properties")
public class RedisConfig {


    @Value("${redis.url}")
    private String url;

    @Value("${redis.port}")
    private Integer port;

    @Value("${redis.maxTotal}")
    private Integer maxTotal;

    @Bean
    public ShardedJedisPool shardedJedisPool() {
        List<JedisShardInfo> jedisShardInfos = new ArrayList<JedisShardInfo>();
        jedisShardInfos.add(new JedisShardInfo(url, port));
        return new ShardedJedisPool(jedisPoolConfig(), jedisShardInfos);
    }
    
    /**
     * 线程池配置
     * @return
     */
    private JedisPoolConfig jedisPoolConfig() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(maxTotal);
        return jedisPoolConfig;
    }
}

配置文件:

redis.url=127.0.0.1
redis.port=6379
redis.maxTotal=10

和JDBC类似。读取配置文件,映射到变量中,然后初始化对象到SpringBoot容器中。

整合redis方式二:
.properties:

# Redis配置
# Redis数据库索引(默认为0)
spring.redis.database=1
# Redis服务器地址
spring.redis.host=192.168.41.101
# Redis服务器连接端口
spring.redis.port=6379
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=1
# 连接超时时间(毫秒)
spring.redis.timeout=10000
@Configuration
public class RedisConfig {

	/**
	 * retemplate相关配置
	 * 
	 * @param factory
	 * @return
	 */
	@Bean
	public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {

		RedisTemplate<String, Object> template = new RedisTemplate<>();
		// 配置连接工厂
		template.setConnectionFactory(factory);

		// 使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
		Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);

		ObjectMapper om = new ObjectMapper();
		// 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public
		om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
		// 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
		om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
		jacksonSeial.setObjectMapper(om);

		// 值采用json序列化
		template.setValueSerializer(jacksonSeial);
		// 使用StringRedisSerializer来序列化和反序列化redis的key值
		template.setKeySerializer(new StringRedisSerializer());

		// 设置hash key 和value序列化模式
		template.setHashKeySerializer(new StringRedisSerializer());
		template.setHashValueSerializer(jacksonSeial);
		template.afterPropertiesSet();

		return template;
	}
}

依赖包:

<!-- Redis支持 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-redis</artifactId>
			<version>1.3.2.RELEASE</version>
		</dependency>

工具类:

@Autowired
	private RedisTemplate<String, Object> redisTemplate;  
	
/** 
     * 普通缓存获取 
     * @param key 键 
     * @return 值 
     */  
    public Object get(String key){  
        return key==null?null:redisTemplate.opsForValue().get(key);  
    }  

参考:https://blog.csdn.net/plei_yue/article/details/79362372

部分摘自某智播客。

没有更多推荐了,返回首页