模板地址

前言

Spring Boot是目前大火的Java后端框架,遵循着“约定大于配置”的规则,可以快速开发后台,摆脱SSM框架的各种xml配置,开箱即用,快速部署。依靠着spring的强大社区,框架中集成了各种优秀的第三方框架。

一、逆向生成model、mapper

maven的配置
1、首先引入依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!--整合mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>

<!--mapper-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!--pagehelper-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
<exclusions>
<exclusion>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
2、build中添加插件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
         <!--mybatis逆向生成插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>

<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-generator</artifactId>
<version>1.0.0</version>
</dependency>

</dependencies>
</plugin>
3、自定义一个MyMapper
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
import tk.mybatis.mapper.common.base.delete.DeleteByPrimaryKeyMapper;
import tk.mybatis.mapper.common.condition.SelectByConditionMapper;
import tk.mybatis.mapper.common.ids.DeleteByIdsMapper;
import tk.mybatis.mapper.common.ids.SelectByIdsMapper;

/**
* 继承自己的MyMapper
*
*/
public interface MyMapper<T> extends
Mapper<T>,
MySqlMapper<T>,
SelectByIdsMapper<T>,
SelectByConditionMapper<T>,
DeleteByIdsMapper<T>,
DeleteByPrimaryKeyMapper<T> {
//TODO
//FIXME 特别注意,该接口不能被扫描到,否则会出错
}


4、编写generator配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>

<!--配置环境的文件,数据库的信息-->
<properties resource="application-dev.properties"/>

<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>

<!--继承自己的MyMapper-->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="cn.buildworld.sbtest.util.MyMapper"/>
</plugin>

<!--数据库的信息-->
<jdbcConnection driverClass="${spring.datasource.driver-class-name}"
connectionURL="${spring.datasource.url}"
userId="${spring.datasource.username}"
password="${spring.datasource.password}">
</jdbcConnection>

<!--实体类生成的位置-->
<javaModelGenerator targetPackage="cn.buildworld.sbtest.model" targetProject="src/main/java"/>

<!--dao接口生成的位置-->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>

<!--XML文件生成的位置-->
<javaClientGenerator targetPackage="cn.buildworld.sbtest.mapper" targetProject="src/main/java"
type="XMLMAPPER"/>

<!--数据库表的信息,%代表生成数据库中所有的表-->
<table tableName="%">
<!--mysql 配置-->
<generatedKey column="id" sqlStatement="Mysql" identity="true"/>
<!--oracle 配置-->
<!--<generatedKey column="id" sqlStatement="select SEQ_{1}.nextval from dual" identity="false" type="pre"/>-->
</table>
</context>
</generatorConfiguration>

二、基于mybatis的CRUD

1、在Application启动文件中添加注解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication

/**
* 扫描mapper包路径
*/
@MapperScan(basePackages = "cn.buildworld.sbtest.mapper")
public class SbtestApplication {
public static void main(String[] args) {
SpringApplication.run(SbtestApplication.class, args);
}
}

2、PageHelper分页插件的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Autowired
private HseCustomerService hseCustomerService;
@GetMapping("list")
public Object getList(@RequestParam(defaultValue = "0")Integer fromId,
@RequestParam(defaultValue = "2")Integer limit ){

//初始化page插件,传入分页参数
PageHelper.startPage(fromId,limit);
List<HseCustomer> list = hseCustomerService.getList();

//包装想要返回的结果,包含多种信息
PageInfo pageInfo = new PageInfo(list);

return pageInfo;
}
3、在service实现类中使用事务
1
2
3
4
5
6
7
8
9
10
11
12
@Override
//事务--查询
@Transactional(propagation = Propagation.SUPPORTS)
public List<StudentInfo> getList() {

return studentInfoMapper.selectByIds("123");

}

//事务--修改
@Transactional(propagation = Propagation.REQUIRED)

三、整合缓存Redis

1、添加依赖
1
2
3
4
5
      <!--引入redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、配置文件中添加配置(application.properties)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
###########################
# #
# Redis配置 #
# #
###########################
# Redis数据库索引(默认为0)
spring.redis.database=1
# Redis服务器地址
spring.redis.host=119.29.181.95
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=1000
# 连接池最大阻塞时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=10
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=2
# 连接超时时间
spring.redis.timeout=0
3、使用redis
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* redis测试
*/

@Autowired
//spring-boot自带的模板
private StringRedisTemplate redisTemplate;
@GetMapping("redis")
public Object getRedis(){

//往redis数据库存入数据
redisTemplate.opsForValue().set("name","michong");

//读出redis中的数据
return redisTemplate.opsForValue().get("name");

}

四、整合定时器

1、在启动项加上注解
1
2
3
4
5
6
7
8
9
/**
* 开启定时任务
*/
@EnableScheduling
public class SbtestApplication {
public static void main(String[] args) {
SpringApplication.run(SbtestApplication.class, args);
}
}
2、简单使用定时器

注意加上@Component和@Scheduled注解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* 定时任务
*
* @Author MiChong
* @Email: 1564666023@qq.com
* @Create 2018-03-28 9:02
* @Version: V1.0
*/
@Component
public class TimeTesk {

private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("HH:mm:ss");

/**
* 定义三秒执行的任务
*/
@Scheduled(fixedRate = 3000)
public void ShowTime(){
System.out.println("现在时间:"+DATE_FORMAT.format(new Date()));
}


}
3、使用cron表达式执行定时任务

表达式地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Component
public class TimeTesk {

private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("HH:mm:ss");

/**
* 从0开始,每隔三秒执行一次操作
*/
@Scheduled(cron = "0/3 * * * * ? ")
public void ShowTime(){
System.out.println("现在时间:"+DATE_FORMAT.format(new Date()));
}


}

五、整合异步任务

1、启动项添加注解
1
2
3
4
5
6
7
8
9
10
/**
* 开启异步任务
*/
@EnableAsync
public class SbtestApplication {
public static void main(String[] args) {
SpringApplication.run(SbtestApplication.class, args);
}
}

2、使用

在使用类上面加上@Component,在类中的方法上面加上@Async

六、拦截器的使用

1、首先创建一个configer类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Configuration
public class WebMvcConfiger extends WebMvcConfigurerAdapter {

/**
* 重写父类的方法,在此处对拦截器进行设置
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
/**
* 拦截器按照顺序执行,如果将one改成 * 则表示拦截所有的请求
*/
registry.addInterceptor(new TwoInterCeptor()).addPathPatterns("/one/**")
.addPathPatterns("/two/**");
registry.addInterceptor(new OneInterCeptor()).addPathPatterns("/two/**");
super.addInterceptors(registry);
}
}

2、新建拦截器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class OneInterCeptor implements HandlerInterceptor {

/**
* 在请求处理之前进行调用(Controller方法调用之前)
*/
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
return true;
}


/**
* 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
*/
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

}


/**
* 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行
* (主要是用于进行资源清理工作)
*/
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

}


public void returnErrorResponse(HttpServletResponse response)
throws IOException, UnsupportedEncodingException {
OutputStream out=null;
try{
response.setCharacterEncoding("utf-8");
response.setContentType("text/json");
out = response.getOutputStream();
out.flush();
} finally{
if(out!=null){
out.close();
}
}
}
}