先用spring提供的建项目
选需要用的东西
先配一下启动类上的包扫描 (mybatis)
准备配一下redis
<!--redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.75</version> </dependency>
还有个druid忘了
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.8</version> </dependency>
再加一个swagger
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency>
开始看配置文件
# 应用名称 spring.application.name=boot #下面这些内容是为了让MyBatis映射 #指定Mybatis的Mapper文件 #mybatis.mapper-locations=classpath:mappers/*.xml #指定Mybatis的实体目录 mybatis.type-aliases-package=com.zhu.pojo ##日志文件打印sql logging.level.com.zhu.dao=DEBUG # 数据库驱动: spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 数据源名称 spring.datasource.name=defaultDataSource # 数据库连接地址 spring.datasource.url=jdbc:mysql://localhost:3306/myfile?serverTimezone=UTC # 数据库用户名&密码: spring.datasource.username=root spring.datasource.password=root #指定数据源类型 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource # 配置druid数据源信息 spring.datasource.druid.initial-size=10 spring.datasource.druid.max-active=20 spring.datasource.druid.min-idle=3 # 应用服务 WEB 访问端口 server.port=8080 ## id生成策略 数据库自增 #mybatis-plus.global-config.db-config.id-type=auto # 配置redis spring.redis.host=127.0.0.1 spring.redis.port=6379 # 配置pageHelper插件(官方推荐配置) #指定方言,使用mysql数据库 pagehelper.helper-dialect=mysql #参数合理化 pagehelper.reasonable=true #支持通过 Mapper 接口参数来传递分页参数 pagehelper.support-methods-arguments=true #为了支持startPage(Object params)方法,增加了该参数来配置参数映射 pagehelper.params=countSql
这个里面还有一个mybatis的分页插件
<!-- 添加pagehelper依赖--> <!-- <dependency>--> <!-- <groupId>com.github.pagehelper</groupId>--> <!-- <artifactId>pagehelper</artifactId>--> <!-- <version>5.2.0</version>--> <!-- </dependency>--> <!-- <dependency>--> <!-- <groupId>com.github.pagehelper</groupId>--> <!-- <artifactId>pagehelper-spring-boot-starter</artifactId>--> <!-- <version>1.2.6</version>--> <!-- </dependency>--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.0</version> </dependency>
配一个logo
基本的包结构
mybatis_plus的分页
@Configuration
public class PageConfig {
/**
* 3.4.0之前的版本用这个
* @Bean
* public PaginationInterceptor paginationInterceptor(){
* return new PaginationInterceptor();
* }
*/
/**
* 3.4.0之后提供的拦截器的配置方式
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mybatisPlusInterceptor;
}
}
简化redis的工具类配置
@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
public class RedisConfig {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
//使用fastjson序列化
FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
// value值的序列化采用fastJsonRedisSerializer
template.setValueSerializer(fastJsonRedisSerializer);
template.setHashValueSerializer(fastJsonRedisSerializer);
// key的序列化采用StringRedisSerializer
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean(StringRedisTemplate.class)
public StringRedisTemplate stringRedisTemplate(
RedisConnectionFactory redisConnectionFactory) {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
redis还有一个超长的工具类,没有写
swagger配置
@Configuration //配置类
@EnableSwagger2// 开启Swagger2的自动配置
public class SwaggerConfig {
}
mybatis-plus的实体类
dao层
(mybatis-plus)
public interface TbUserDao extends BaseMapper<TbUser> {
}
(mybatis)
//@Mapper
public interface UserDao {
// @Select("select * from user")
List<User> findAll();
}
mybatis的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.zhu.dao.UserDao">
<select id="findAll" resultType="com.zhu.pojo.User">
select * from user
</select>
</mapper>
正常的service先接口
public interface UserService {
List<User> findAll();
PageInfo<User> page(int pageNum, int pageSize);//pageNum:当前页数 pagSize:每页显示的个数
}
然后实现类(实现类上的@Service别忘了)
里面有一个mybatis的分页
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public List<User> findAll() {
List<User> all = userDao.findAll();
return all;
}
@Override
public PageInfo<User> page(int pageNum, int pageSize) {
//指定分页信息
PageHelper.startPage(pageNum,pageSize);
//查询数据
List<User> all = userDao.findAll();
//把查询数据封装到pageInfo中
PageInfo pageInfo = new PageInfo(all);
return pageInfo;
}
}
然后Controller层(用了一个统一格式输出)
//@Controller和@ResponseBody
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@CrossOrigin
@PostMapping("/find")
public Result findAll(){
List<User> all = userService.findAll();
if (all!=null){
return new Result(Code.GET_OK,all);
}else {
return new Result(Code.GET_NO);
}
// return new Result(null !=all? Code.GET_OK:Code.GET_NO,all);
}
}
public class Code {
public static final Integer SAVE_OK= 20011;
public static final Integer UPDATE_OK= 20021;
public static final Integer DELETE_OK= 20031;
public static final Integer GET_OK= 20041;
public static final Integer SAVE_NO= 40010;
public static final Integer UPDATE_NO= 40020;
public static final Integer DELETE_NO= 40030;
public static final Integer GET_NO= 40040;
}
public class Result {
//操作编码
private Integer code;
//查到到结果
private Object date;
//消息,备注
private String message;
public Result() {
}
public Result(Integer code, Object date) {
this.code = code;
this.date = date;
}
public Result(Integer code) {
this.code = code;
}
@Override
public String toString() {
return "Result{" +
"code=" + code +
", date=" + date +
", message='" + message + '\'' +
'}';
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public Object getDate() {
return date;
}
public void setDate(Object date) {
this.date = date;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}