SpringBoot多种整合与使用(二)

前言:本文为原创 若有错误欢迎评论!

一.SpringBoot 整合模板引擎

模板引擎和静态资源区别:

  • 静态资源是配置完路径直接访问的
  • 模板要有Controller进行转发的

1.Freemarker

  1. 依赖:
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
  1. 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/
  1. 给使用freemarker的html代码引入语法提示
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.freemarker.org">
····
</html>
  1. 编写controller类:映射其路径 在处理完之后 return " ?/? "
  • freemarker在配置文件里的视图解析器已经配置了 前缀"/templates/“之后的完整路径 和后缀”.ftl" 所以不用再加相同的路径前缀后文件后缀

2.Thymeleaf

Thymeleaf引入之后可以不经过controller直接渲染页面 但th表达式无法获取到值 (前提必须引入Thymeleaf且配置过静态文件加载路径)

  1. 依赖
  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
  </dependency>
  1. 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
  1. 给使用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
  1. 依赖
	 <dependency>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-core</artifactId>
        <scope>test</scope>
        <version>1.3.2</version>
        <optional>true</optional>
    </dependency>
  1. 生成逆向工程的文件:(在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&amp;characterEncoding=utf-     8&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;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>
  1. 在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);
    }
}
  1. 使用方法
    1. 每个字段都有Example的.createCriteria() 然后可以获得Criteria对象
      每个字段都有关于criteria的方法,之后就可以用mapper的example进行查寻
      但insert一般用不 Example对象
    2. 其余操作:改的时候可以选择全部字段更新还是只更新非空的字段、WithBLOB是在有text类型的时候选

三.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表达式:
  1. 常用通配符
    1. ‘*’:表示全部,
    2. ‘a/b’:表示每a后b的时间都会执行,
    3. ‘?’:只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会
  • 注意“每”(在当前等级上加)和 “指定某一时间”(从下一个等级加)的区别,按照时间段(不是时间点)的概念 从月-日-时…分析
  1. 秒-分-时-日-月-星期
    秒-分-时-日-月-年-星期

@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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值