文章目录
使用idea 搭建一个 springboot+mybatis+jedis 框架
环境:idea 2017.2,jdk1.8,
pom 文件
<?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 https://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.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.alterman</groupId>
<artifactId>springboot-mybatis-jedis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-mybatis-jedis</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</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.43</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
resources/Application.properties
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
mainconfig
package com.alterman;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.apache.tomcat.jdbc.pool.DataSource;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import java.util.HashSet;
import java.util.Set;
/**
* create by hxq on 2019/8/26
*/
@Configuration
public class MainConfig {
@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource() {
return new org.apache.tomcat.jdbc.pool.DataSource();
}
@Bean
public SqlSessionFactory sqlSessionFactoryBean() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mybatis/*.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean
public JedisCluster JedisClusterFactory() {
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
jedisClusterNodes.add(new HostAndPort("192.168.10.133", 8001));
jedisClusterNodes.add(new HostAndPort("192.168.10.133", 8004));
jedisClusterNodes.add(new HostAndPort("192.168.10.150", 8002));
jedisClusterNodes.add(new HostAndPort("192.168.10.150", 8005));
jedisClusterNodes.add(new HostAndPort("192.168.10.151", 8003));
jedisClusterNodes.add(new HostAndPort("192.168.10.151", 8006));
/* JedisCluster jedisCluster = new JedisCluster(jedisClusterNodes);
jedisCluster.auth("xiaoming");*/
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(100);
config.setMaxIdle(10);
config.setTestOnBorrow(true);
//connectionTimeout:指的是连接一个url的连接等待时间
//soTimeout:指的是连接上一个url,获取response的返回等待时间
JedisCluster jedisCluster = new JedisCluster(jedisClusterNodes, 6000, 5000, 10, "xiaoming", config);
return jedisCluster;
}
}
entity user
package com.alterman.entity;
/**
* create by hxq on 2019/8/30
*/
public class User {
/**
* 用户姓名
*/
private String name;
/**
* 用户年龄
*/
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
mapper
package com.alterman.mapper;
import com.alterman.entity.User;
import java.util.List;
/**
* create by hxq on 2019/8/30
*/
public interface UserMapper {
public List<User> findUserInfo();
}
usermapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.alterman.mapper.UserMapper">
<select id="findUserInfo" resultType="com.alterman.entity.User">
select name,age from user;
</select>
</mapper>
UserService
package com.alterman.service;
import com.alterman.entity.User;
import java.util.List;
/**
* create by hxq on 2019/8/30
*/
public interface UserService {
/**
* 查询用户信息
* @return 用户信息
*/
public List<User> findUserInfo();
/**
* 查询redis中缓存的用户信息
* @return
*/
public User getCachedUserInfo();
}
UserServiceImpl
package com.alterman.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.alterman.dao.RedisDAO;
import com.alterman.mapper.UserMapper;
import com.alterman.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import com.alterman.entity.User;
import java.util.List;
/**
* create by hxq on 2019/8/30
*/
@Service("userService")
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
@Resource
private RedisDAO redisDAO;
@Override
public List<User> findUserInfo() {
return userMapper.findUserInfo();
}
@Override
public User getCachedUserInfo() {
redisDAO.set("cached_user_xiaoming", "{\"name\": \"xiaoming\", \"age\":30}");
String userJSON = redisDAO.get("cached_user_lisi");
JSONObject userJSONObject = JSONObject.parseObject(userJSON);
User user = new User();
user.setName(userJSONObject.getString("name"));
user.setAge(userJSONObject.getInteger("age"));
return user;
}
}
UserController
package com.alterman.controller;
import com.alterman.entity.User;
import com.alterman.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
* create by hxq on 2019/8/30
*/
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/getUserInfo")
@ResponseBody
public List<User> getUserInfo() {
System.out.println("controller in ...");
List<User> user = userService.findUserInfo();
System.out.println("controller out ...");
return user;
}
@RequestMapping("/getCachedUserInfo")
@ResponseBody
public User getCachedUserInfo() {
User user = userService.getCachedUserInfo();
return user;
}
}
RedisDAO
package com.alterman.dao;
/**
* create by hxq on 2019/8/30
*/
public interface RedisDAO {
void set(String key, String value);
String get(String key);
}
RedisDAO
package com.alterman.dao.impl;
import com.alterman.dao.RedisDAO;
import org.springframework.stereotype.Repository;
import redis.clients.jedis.JedisCluster;
import javax.annotation.Resource;
/**
* create by hxq on 2019/8/30
*/
@Repository("redisDAO")
public class RedisDAOImpl implements RedisDAO {
@Resource
private JedisCluster jedisCluster;
@Override
public void set(String key, String value) {
jedisCluster.set(key, value);
}
@Override
public String get(String key) {
return jedisCluster.get(key);
}
}