1.SpringBoot+JPA+Redis+Swagger2实现
本次通过SpringBoot+JPA+Redis+Swagger2完成数据库的增删改查,分页查找,采用hikari链接
2.配置文件
包括服务的端口号,redis缓存的连接,MySQL数据库的连接,hikari相关配置
spring.profiles.active=dev
server.port=8088
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
spring.datasource.url=jdbc:mysql://local:3306/sb_hw_db?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.maximum-pool-size=100
spring.datasource.hikari.connection-test-query=SELECT 1
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
3.相关xml文件
因为使用MySQL,JPA,Redis,Swagger以及该项目为web项目,因此会在xml文件中自动创建以下代码:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency> -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.7.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
4.数据库实体类
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="chenxinyy")
public class UserInfo implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column
private Integer age;
@Column
private String sex;
@Column
private String telephone;
@Column
private String name;
@Column(unique=true)
private String username;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "UserInfo [id=" + id + ", age=" + age + ", sex=" + sex + ", telephone=" + telephone + ", name=" + name
+ ", username=" + username + "]";
}
public UserInfo() {
}
public UserInfo(Integer id, Integer age, String sex, String telephone, String name, String username) {
super();
this.id = id;
this.age = age;
this.sex = sex;
this.telephone = telephone;
this.name = name;
this.username = username;
}
}
5.设置分页相关属性
import java.util.List;
public class PageVo<T> {
private Integer totalPage ;//总页数
private Integer currentPage; // 当前页码
private Integer total;//总记录数
private List<T> list; //记录集合
public Integer getTotalPage() {
return totalPage;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public Integer getTotal() {
return total;
}
public void setTotal(Integer total) {
this.total = total;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
}
6.Redis配置类
redis和swagger2一样,注意在代码中加入@Configuration以及@Component注解,
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;
import org.springframework.stereotype.Component;
import com.example.demo.entity.UserInfo;
@Configuration
@Component
public class RedisConfig {
@Bean
public RedisTemplate<String, UserInfo> userInfoRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, UserInfo> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(UserInfo.class));
return redisTemplate;
}
}
7.Swagger配置
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Component
@EnableSwagger2
public class Swagger2 {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Swagger 接口文件")
.contact(new Contact("chenxinyy", "www.ipanel.cn", "chenxinyy@ipanel.com"))
.version("1.0")
.description("Spring Boot demo")
.build();
}
}
8.Service
package com.example.demo.dao;
import javax.transaction.Transactional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
import com.example.demo.entity.UserInfo;
import io.lettuce.core.dynamic.annotation.Param;
@Repository
/*public interface UserRepository extends PagingAndSortingRepository<UserInfo, Integer> {
}*/
public interface UserRepository extends JpaRepository<UserInfo, Integer>{
@Transactional
@Modifying
@Query(value = "update chenxinyy set name = :name,age=:age,sex=:sex,telephone=:telephone,username=:username where id = :id",nativeQuery = true)
void updateById(@Param("id") Integer id, @Param("name") String name,@Param("age") Integer age,
@Param("sex") String sex,@Param("telephone") String telephone,@Param("username") String username );
}
package com.example.demo.service;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import com.example.demo.dao.UserRepository;
import com.example.demo.entity.UserInfo;
import com.example.demo.page.PageVo;
@Service
public class UserService {
@Resource
private UserRepository userRepository;
private RedisTemplate<String, UserInfo> redisTemplate;
public UserService(UserRepository userRepository, RedisTemplate<String, UserInfo> userInfoRedisTemplate) {
this.userRepository = userRepository;
this.redisTemplate = userInfoRedisTemplate;
}
//添加
@Transactional
public UserInfo save(UserInfo user) {
UserInfo userInfo= userRepository.save(user);
String id = userInfo.getId().toString();
redisTemplate.opsForValue().set("sb:hw:chenxinyy:" + user.getId(),user);
return userInfo;
}
//删除
@Transactional
//@CacheEvict(value="sb:hw:chenxinyy",key="#id")
public void delete(Integer id) {
userRepository.deleteById(id);
redisTemplate.delete("sb:hw:chenxinyy:"+id);
}
//更新
@Transactional
//@CachePut(value="sb:hw:chenxinyy",key="#id")
public void update(Integer id,String name,Integer age,String sex,String telephone,String username) {
userRepository.updateById(id, name, age, sex, telephone, username);
UserInfo userInfo =userRepository.findById(id).get();
redisTemplate.opsForValue().set("sb:hw:chenxinyy:" + userInfo.getId(),userInfo);
}
public UserInfo getById(Integer id) {
return userRepository.findById(id).get();
}
//查找全部
public Iterable<UserInfo> getAll(){
return userRepository.findAll();
}
//分页。将数据结果放在ArrayList里显示
public PageVo<UserInfo> pageQuery(Integer currentPage,Integer rows) {
PageVo<UserInfo> pageVo = new PageVo<UserInfo>();
pageVo.setCurrentPage(currentPage);//设置当前页码
PageRequest pageRequest = PageRequest.of(currentPage, rows);
Page<UserInfo> page = userRepository.findAll(pageRequest);
pageVo.setTotalPage(page.getTotalPages());//设置总页码
pageVo.setTotal((int) page.getTotalElements());//设置总数
List<UserInfo> lists = new ArrayList<UserInfo>();
for (UserInfo userInfo : page) {
lists.add(userInfo);
}
pageVo.setList(lists);
return pageVo;
}
}
9.控制器
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.page.PageVo;
import com.example.demo.entity.UserInfo;
import com.example.demo.service.UserService;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
@RestController
public class UserController {
@Autowired
private UserService userService;
@ApiOperation(value="添加")
@ApiImplicitParams(value = {
//@ApiImplicitParam(name = "id", value = "id", required = false, dataType = "int", paramType = "body"),
@ApiImplicitParam(name = "age", value = "age", required = false, dataType = "int", paramType = "query"),
@ApiImplicitParam(name = "sex", value = "sex", required = false, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "username", value = "username", required = false, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "name", value = "name", required = false, dataType = "String", paramType = "query"),
@ApiImplicitParam(name = "telephone", value = "telephone", required = false, dataType = "String", paramType = "query")
})
@RequestMapping(value = "save",method=RequestMethod.GET)
public UserInfo save(UserInfo user){
UserInfo userInfo = userService.save(user);
return userInfo;
}
@ApiOperation(value="id查询")
@ApiImplicitParam(name="id",value="用户id", required = true,dataType = "int",paramType="query" )
@RequestMapping(value ="findOne",method=RequestMethod.GET)
public UserInfo findOne(Integer id){
UserInfo user = userService.getById(id);
return user ;
}
@ApiOperation(value="查询全部",notes="查询全部数据信息")
@RequestMapping(value ="findAll",method=RequestMethod.GET)
public Iterable<UserInfo> findAll(){
return userService.getAll();
}
@ApiOperation(value="分页查询")
@ApiImplicitParams({
@ApiImplicitParam(name="currentPage",value="页码",required=true,dataType="int",paramType="query"),
@ApiImplicitParam(name="rows",value="记录数",required=true,dataType="int",paramType="query")
})
@RequestMapping(value = "pageQuery",method=RequestMethod.GET)
public PageVo<UserInfo> pageQuery (Integer currentPage,Integer rows ){
PageVo<UserInfo> pageQuery = userService.pageQuery(currentPage, rows);
return pageQuery;
}
@ApiOperation(value="删除")
@ApiImplicitParam(name="id",value="用户id", required = true,dataType = "int",paramType="query" )
@RequestMapping(value="delete",method=RequestMethod.GET)
public String delete(Integer id){
userService.delete(id);
return "success";
}
@ApiOperation(value="修改")
@ApiImplicitParams({
@ApiImplicitParam(name="id",value="用户id",required=true,dataType="int",paramType="query"),
@ApiImplicitParam(name="name",value="姓名",required=true,dataType="String",paramType="query"),
@ApiImplicitParam(name="age",value="年龄",required=true,dataType="Integer",paramType="query"),
@ApiImplicitParam(name="sex",value="性别",required=true,dataType="String",paramType="query"),
@ApiImplicitParam(name="telephone",value="电话",required=true,dataType="String",paramType="query"),
@ApiImplicitParam(name="username",value="用户名",required=true,dataType="String",paramType="query")
})
@RequestMapping(value = "update",method=RequestMethod.POST)
public String update(Integer id,String name,Integer age,String sex,String telephone,String username){
userService.update(id, name, age, sex, telephone, username);
return "success";
}
}