前言:本文为原创 若有错误欢迎评论!
一.SpringBoot 整合模板引擎
模板引擎和静态资源区别:
- 静态资源是配置完路径直接访问的
- 模板要有Controller进行转发的
1.Freemarker
- 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
- application.properties中配置:
#是否开启缓存,本地为false,生产建议为true
#每次更改使用freemarker的html页面代码时用:ctrl+shift+f9 即可刷新页面
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.allow-request-override=false
spring.freemarker.check-template-location=true
#类型
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=true
spring.freemarker.expose-session-attributes=true
#文件后缀
spring.freemarker.suffix=.ftl
#路径
spring.freemarker.template-loader-path=classpath:/templates/
- 给使用freemarker的html代码引入语法提示
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.freemarker.org">
····
</html>
- 编写controller类:映射其路径 在处理完之后 return " ?/? "
- freemarker在配置文件里的视图解析器已经配置了 前缀"/templates/“之后的完整路径 和后缀”.ftl" 所以不用再加相同的路径前缀后文件后缀
2.Thymeleaf
Thymeleaf引入之后可以不经过controller直接渲染页面 但th表达式无法获取到值 (前提必须引入Thymeleaf且配置过静态文件加载路径)
- 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
- application.properties配置
#开发时关闭缓存,不然没法看到实时页面
#每次更改使用thymeleaf的html页面代码时用:ctrl+shift+f9 即可刷新页面
spring.thymeleaf.cache=false
spring.thymeleaf.mode=HTML5
#前缀
spring.thymeleaf.prefix=classpath:/templates/
#编码
spring.thymeleaf.encoding=UTF-8
#类型
spring.thymeleaf.content-type=text/html
#名称的后缀
spring.thymeleaf.suffix=.html
- 给使用template的html代码引入语法提示
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
····
</html>
- 注意 :
- freemarker可以和 thymeleaf 共存 只要配的前后缀不同 就可以发送到目的页面 且各有各自类似jstl el表达式的式子 .html和 .ftl文件都可以嵌入js代码交互
- springboot更加推荐使用thymeleaf
二.SpringBooot 整合mybatis
1.依赖:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
2.配置dataSoruce和sessionFactory:
spring.datasource.url=jdbc:mysql://localhost:3306/(数据库名字)?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username =xxx
spring.datasource.password =xxx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#如果不使用默认的数据源 (com.zaxxer.hikari.HikariDataSource)
spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
mybatis.mapper-locations =classpath:(src/main/resources下一层的放mapper.xml的文件夹名字)/*.xml
mybatis.type-aliases-package=(Entity的完整包名)
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
3.mapper.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.yzx.shop.item.mapper.CategoryMapper">
<select id="findByPid" resultType="category" parameterType="long">
select * from tb_category where parent_id=#{pid}
</select>
</mapper>
4.在启动类注解
@MapperScan(“mapper接口的完整包名”)
5.需要使用mysql事务的加注解:
@Transactional(propagation=Propagation.REQUIRED,readOnly=false,rollbackFor=Exception.class)
6.mybatis逆向工程
- 推荐使用tk-mybatis或者mybatis-plus,请参考我的博客:https://blog.csdn.net/weixin_43934607/article/details/102540483
- 依赖
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<scope>test</scope>
<version>1.3.2</version>
<optional>true</optional>
</dependency>
- 生成逆向工程的文件:(在SpringBoot的src/test/resources:generatorConfig.xml)
<?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>
<!--修改URL的数据库名、三个包名、表名(表可以配多张)-->
<context id="mysqlTable" targetRuntime="MyBatis3">
<!-- 1.数据连接参数 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/(数据库名)?useUnicode=true&characterEncoding=utf- 8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"
userId="root"
password="Yang2000620">
</jdbcConnection>
<!-- 2.默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL
和 NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 3.生成模型的位置 -->
<!--.\src\main\java指的时生成在springboot的要用的java代码中-->
<javaModelGenerator targetPackage="(生成entity后所在的完整包名)" targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 4.targetProject:mapper映射文件生成的位置 -->
<!--.\src\main\resources指的时生成在springboot的要用的静态资源代码中-->
<sqlMapGenerator targetPackage="(mapper.xml生成的路径 写resources下直接文件夹名)" targetProject=".\src\main\resources">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 5. targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="(生成mapper接口后所在的完整包名)" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 6.要生成的表 -->
<table tableName="(表名)" domainObjectName="(生成的对应的实体类名)"/>
<table tableName="(表名)" domainObjectName="(生成的对应的实体类名)"/>
</context>
</generatorConfiguration>
- 在SpringBoot的src/test/java:org.mybatis.generator.plugins.Generator:
public class Generator {
public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//刚才逆向工程配置文件的路径
File configFile = new File("C:/EXCS/IDEA_exc/del8_1/src/test/resources/generatorConfig.xml" );
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,callback, warnings);
myBatisGenerator.generate(null);
}
}
- 使用方法
- 每个字段都有Example的.createCriteria() 然后可以获得Criteria对象
每个字段都有关于criteria的方法,之后就可以用mapper的example进行查寻
但insert一般用不 Example对象 - 其余操作:改的时候可以选择全部字段更新还是只更新非空的字段、WithBLOB是在有text类型的时候选
- 每个字段都有Example的.createCriteria() 然后可以获得Criteria对象
三.SpringBoot 整合Redis
1.安装:
- 请参考后面博客的centos安装应用的博客!
- 注意:一般情况下在生产环境都不设置密码 外面都有网关 而且搭建reids集群时不能有密码
2.依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
3.配置文件:
spring.redis.database=0
#Redis服务器地址
spring.redis.host=xxx.xxx.xxx.xxx
#Redis服务器连接端口
spring.redis.port=6379
#Redis服务器连接密码(默认为空)
spring.redis.password=xxx
4.简单使用(StringRedisTemplate):
@Autowired
private StringRedisTemplate redisTemplate;
注意:后面的博客将有关于redis详解 从入门到高级使用
四.SpringBoot 整合定时任务
1.启动类注解
@EnableScheduling
2.建立一个包专门放定时任务:task
3.建立定时类注解:
@Component
4.给定时的方法注解:
@Scheduled(cron="* * * * * *")
- cron表达式:
- 常用通配符
- ‘*’:表示全部,
- ‘a/b’:表示每a后b的时间都会执行,
- ‘?’:只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会
- 注意“每”(在当前等级上加)和 “指定某一时间”(从下一个等级加)的区别,按照时间段(不是时间点)的概念 从月-日-时…分析
- 秒-分-时-日-月-星期
秒-分-时-日-月-年-星期
@Scheduled(fixedRate=2000) //从开始的时间节点开始计时
@Scheduled(fixedDelay=2000) //从结束的时间节点开始计时
-
@Scheduled(fixRateString=" " 或者 @Scheduled(fixedDelayString=" " 用的比较多
-
通过配置文件注入定时时间 而不是直接写入
-
注意:用(@Scheduled注解的方法不可以有参数
五.SpringBoot 整合异步任务
1.启动类注解:
@EnablleAysnc
2.给需要执行异步任务的方法或者类(类的所有方法都将异步执行)注解:
@Aysnc
3.方法返回值
- 如果不需要异步执行返回结果 返回值void,
- 如果需要返回结果返回值"Future<?>" return new AsyncResult<?>(?的类型的值)
4.在调用的方法使用
无返回值:
new 开启异步任务的类().异步方法();
有返回值:
Future<?> task=new 开启异步任务的类().异步方法();
while(true){
if(task.done()) break;
}