SpringBoot整合常用技术
时间:2022-07-25
本文章向大家介绍SpringBoot整合常用技术,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
Spring Boot是目前大火的Java后端框架,遵循着“约定大于配置”的规则,可以快速开发后台,摆脱SSM框架的各种xml配置,开箱即用,快速部署。依靠着spring的强大社区,框架中集成了各种优秀的第三方框架。
一、逆向生成model、mapper
maven的配置
1、首先引入依赖
Code
<!--整合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中添加插件
Code
<!--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
Code
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配置文件
Code
<?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启动文件中添加注解
Code
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分页插件的使用
Code
@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实现类中使用事务
Code
@Override
//事务--查询
@Transactional(propagation = Propagation.SUPPORTS)
public List<StudentInfo> getList() {
return studentInfoMapper.selectByIds("123");
}
//事务--修改
@Transactional(propagation = Propagation.REQUIRED)
三、整合缓存Redis
1、添加依赖
Code
<!--引入redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、配置文件中添加配置(application.properties)
Code
###########################
# #
# 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
Code
/**
* 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、在启动项加上注解
Code
/**
* 开启定时任务
*/
@EnableScheduling
public class SbtestApplication {
public static void main(String[] args) {
SpringApplication.run(SbtestApplication.class, args);
}
}
2、简单使用定时器
注意加上@Component和@Scheduled注解
Code
/**
* 定时任务
*
* @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表达式执行定时任务
Code
@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、启动项添加注解
Code
/**
* 开启异步任务
*/
@EnableAsync
public class SbtestApplication {
public static void main(String[] args) {
SpringApplication.run(SbtestApplication.class, args);
}
}
2、使用
在使用类上面加上@Component,在类中的方法上面加上@Async
六、拦截器的使用
1、首先创建一个configer类
Code
@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、新建拦截器
Code
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();
}
}
}
}
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- A little fun with InnoDB multi-versioning(14.有关InnoDB多版本中的一个小问题)
- 聊聊java中的哪些Map:(八)ConcurrentSkipListMap源码分析
- littlevgl(Lvgl)最新版V7.4移植
- TiKV 源码解析系列文章(二十)Region Split 源码解析
- 轻松构建Tomcat源码
- Flutter中Contrainer 组件的宽高限制分析
- 10张图带你深入理解Docker容器和镜像
- 手摸手教你撸一个微服务框架-关于服务端的处理
- 聊聊claudb的string command
- windows下安装nodejs
- 【Java面试总结】Java集合
- 《JavaScript 模式》读书笔记(8)— DOM和浏览器模式1
- 《JavaScript 模式》读书笔记(8)— DOM和浏览器模式2
- 5000字 | 24张图带你彻底理解21种并发锁
- JavaScript-变量