Springboot整合FreeMarker的实现示例

 更新时间:2022年02月09日 16:50:34   作者:爱嘤斯塔  
本文主要介绍了Springboot整合FreeMarker的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

一、项目搭建

1、新建模块

2、导入依赖 :将不相关的依赖删掉

<!--        <dependency>-->
<!--            <groupId>org.mybatis.spring.boot</groupId>-->
<!--            <artifactId>mybatis-spring-boot-starter</artifactId>-->
<!--            <version>2.1.4</version>-->
<!--        </dependency>-->
 
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0</version>
            <scope>compile</scope>
        </dependency>

3、新建软件包,放入student实体类

package com.lv.code.pojo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
 
/**
 * 学生表	student
 * @author hgh
 * @date 2022-01-21T13:35:43.912
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class Student {
    /**
     * 学生编号 主键 自增
     */
    private Long stuId;
 
    /**
     * 学生名字
     */
    private String stuName;
 
    /**
     * 学生电话
     */
    private String stuPhone;
 
    /**
     * 学生班级
     */
    private Long stuClass;
 
    /**
     * 学生地址
     */
    private String stuAddress;
}

4、新建StudentMapper接口

package com.lv.code.mapper;
 
import com.lv.code.pojo.Student;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;
 
@Repository
public interface StudentMapper extends Mapper<Student> {
 
}

5、Springboot04Application内引用mapper

package com.lv.code;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;
 
@SpringBootApplication
@MapperScan("com.lv.code.mapper")
public class Springboot04Application {
 
    public static void main(String[] args) {
        SpringApplication.run(Springboot04Application.class, args);
    }
 
}

6、application.yml文件配置

server:
  port: 8080
#  配置数据源
spring:
  datasource:
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/aaa?userSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true
#  日志打印
logging:
  level:
    com.lv.code.mapper: debug

7、测试

Springboot04ApplicationTests:

package com.lv.code;
 
import com.lv.code.mapper.StudentMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
 
@SpringBootTest
class Springboot04ApplicationTests {
    @Autowired
    StudentMapper mapper;
 
    @Test
    void contextLoads() {
        System.out.println(mapper.selectAll());
    }
 
}

8、将切面、util包、启动器导入

导入依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.10</version>
        </dependency>

切面PageAspect:

package com.lv.code.aspect;
 
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.lv.code.util.PageBean;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
 
/**
 * @author yk
 */
@Component
@Aspect
@Slf4j
public class PageAspect {
 
    @Around(value = "execution(* *..*Service.*Pager(..))")
    public Object invoke(ProceedingJoinPoint point) throws Throwable {
        PageBean pageBean = null;
        for (Object e : point.getArgs()) {
            if (e instanceof PageBean) {
                pageBean = (PageBean) e;
                break;
            }
        }
        if (pageBean != null && pageBean.isPagination()) {
            PageHelper.startPage(pageBean.getPage(), pageBean.getRows());
        }
        Object obj = point.proceed(point.getArgs());
        if (obj != null) {
            if (obj instanceof Page) {
                Page page = (Page) obj;
                PageInfo pageInfo = new PageInfo(page);
                pageBean.setTotal(new Long(pageInfo.getTotal()).intValue());
                return pageInfo.getList();
            }
        }
        return obj;
    }
 
}

util包中的PageBean类

package com.lv.code.util;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
 
/**
 * @author 银喾
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {
 
    private int total;
    private int page = 1;
    private int rows = 5;
    private boolean pagination = true;
    private String url;
    private Map<String, String[]> ms;
 
    public void setMs(Map<String, String[]> ms) {
        this.ms = ms;
    }
 
    public int calcStartIndex() {
        return (page - 1) * rows;
    }
 
    public int calcMaxPage() {
        return total % rows == 0 ? total / rows : total / rows + 1;
    }
 
    public int nextPage() {
        return Math.min(page + 1, calcMaxPage());
    }
 
    public int prevPage() {
        return Math.max(page - 1, 1);
    }
 
    public void setRequest(HttpServletRequest req) {
        setUrl(req.getRequestURL().toString());
        setMs(req.getParameterMap());
        String page = req.getParameter("page");
        if (page == null) {
            setPage(1);
        } else {
            setPage(Integer.parseInt(page));
        }
        String rows = req.getParameter("rows");
        if (rows == null) {
            setRows(5);
        } else {
            setRows(Integer.parseInt(rows));
        }
        String pagination = req.getParameter("pagination");
        if ("false".equals(pagination)) {
            setPagination(false);
        }
    }
 
}

9、新建service层

新建StudentService接口:

package com.lv.code.service;
 
import com.lv.code.pojo.Student;
import com.lv.code.util.PageBean;
 
import java.util.List;
 
public interface StudentService {
 
    List<Student> findPager(PageBean pageBean);
 
}

实现StudentService接口:StudentServiceImpl

package com.lv.code.service;
 
import com.lv.code.mapper.StudentMapper;
import com.lv.code.pojo.Student;
import com.lv.code.util.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.List;
 
@Service
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentMapper mapper;
 
    @Override
    public List<Student> findPager(PageBean pageBean) {
        return mapper.selectAll();
    }
}

10、新建controller层

StudentController类:

package com.lv.code.controller;
 
import com.github.pagehelper.PageRowBounds;
import com.lv.code.service.StudentService;
import com.lv.code.util.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
 
import javax.servlet.http.HttpServletRequest;
 
@RestController
public class StudentController {
    @Autowired
    private StudentService service;
 
    @GetMapping
    public Object find(HttpServletRequest request){
        PageBean pageBean=new PageBean();
        pageBean.setRequest(request);
        return service.findPager(pageBean);
    }
 
}

11、运行启动类Springboot04Application,访问localhost:8080网址

二、freemarker介绍

1、新建资源文件application.yml

更改配置文件,添加freemarker配置

server:
  port: 8080
#  配置数据源
spring:
  datasource:
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/aaa?userSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true
  freemarker:
    #指定HttpServletRequest的属性是否可以覆盖controller的model的同名项
    allow-request-override: false
    #req访问request
    request-context-attribute: req
    #后缀名freemarker默认后缀为.ftl,当然你也可以改成自己习惯的.html
    suffix: .ftl
    #设置响应的内容类型
    content-type: text/html;charset=utf-8
    #是否允许mvc使用freemarker
    enabled: true
    #是否开启template caching
    cache: false
    #设定模板的加载路径,多个以逗号分隔,默认: [ “classpath:/templates/” ]
    template-loader-path: classpath:/templates/
    #设定Template的编码
    charset: UTF-8
#  日志打印
logging:
  level:
    com.lv.code.mapper: debug

2、模板语法

 3、在资源文件中的templates文件下新建index.ftl文件

增加模块:

 然后可选中freemarker直接生成ftl文件

到此这篇关于Springboot整合FreeMarker的实现示例的文章就介绍到这了,更多相关Springboot整合FreeMarker 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java判空的一些常见方法

    Java判空的一些常见方法

    这篇文章主要给大家分享介绍了Java判空的一些常见方法,在程序中必须进行严格的判空处理,避免对空对象的异常操作,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • SpringBoot使用@ControllerAdvice全局异常处理

    SpringBoot使用@ControllerAdvice全局异常处理

    这篇文章主要介绍了SpringBoot使用@ControllerAdvice全局异常处理,异常处理是非常重要的一部分,它可以帮助我们捕获并处理应用程序中出现的异常情况,提高应用程序的健壮性和可靠性,需要的朋友可以参考下
    2023-07-07
  • java微信开发API第三步 微信获取以及保存接口调用凭证

    java微信开发API第三步 微信获取以及保存接口调用凭证

    这篇文章主要为大家详细介绍了java微信开发API第二步,微信获取以及保存接口调用凭证,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • java非递归实现之二叉树的前中后序遍历详解

    java非递归实现之二叉树的前中后序遍历详解

    树的遍历顺序大体分为三种:前序遍历(先根遍历、先序遍历),中序遍历(中根遍历),后序遍历(后根遍历),本文将给大家详细的介绍,对大家的学习或工作具有一定的参考借鉴价值
    2021-09-09
  • SpringBoot Bean实例化流程解析

    SpringBoot Bean实例化流程解析

    在SpringBoot启动过程中会执行refreshContext()方法,而在其执行过程中,又会调用finishBeanFactoryInitialization()方法,该方法负责了Bean的实例化,那么本文将从源码跟读的角度来解析一下具体流程
    2023-08-08
  • ElasticSearch学习之Es集群Api操作示例

    ElasticSearch学习之Es集群Api操作示例

    这篇文章主要为大家介绍了ElasticSearch学习之Es集群Api操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • springboot对象为null的属性在json中不显示的解决

    springboot对象为null的属性在json中不显示的解决

    这篇文章主要介绍了springboot对象为null的属性在json中不显示的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 详解Spring Boot 使用Spring security 集成CAS

    详解Spring Boot 使用Spring security 集成CAS

    本篇文章主要介绍了详解Spring Boot 使用Spring security 集成CAS,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • java中Scanner输入用法实例

    java中Scanner输入用法实例

    Java的Scanner用法,主要用于算法笔试时的控制台输入,下面这篇文章主要给大家介绍了关于java中Scanner输入用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • Java OpenCV利用KNN算法实现图像背景移除

    Java OpenCV利用KNN算法实现图像背景移除

    这篇文章主要为大家介绍了Java OpenCV利用K最邻近(KNN,K-NearestNeighbor)分类算法实现图像背景移除的示例代码,需要的可以参考一下
    2022-01-01

最新评论