Springboot整合FreeMarker的实现示例

作者:爱嘤斯塔 时间:2023-04-09 00:57:57 

一、项目搭建

1、新建模块

Springboot整合FreeMarker的实现示例

Springboot整合FreeMarker的实现示例

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());
   }

}

Springboot整合FreeMarker的实现示例

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、模板语法

Springboot整合FreeMarker的实现示例

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

增加模块:

Springboot整合FreeMarker的实现示例

Springboot整合FreeMarker的实现示例

Springboot整合FreeMarker的实现示例

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

来源:https://blog.csdn.net/weixin_60389087/article/details/122817582

标签:Springboot,整合,FreeMarker
0
投稿

猜你喜欢

  • Java基于ShardingSphere实现分库分表的实例详解

    2022-04-20 18:43:37
  • Android调用手机摄像头拍照和录音功能

    2022-10-22 15:37:16
  • C#调用易语言写的Dll文件方法

    2023-07-21 01:56:10
  • java10下编译lombok注解代码分享

    2023-06-06 11:02:35
  • EL表达式的隐式对象_动力节点Java学院整理

    2022-10-13 06:04:01
  • java实现简易超市管理系统 附源码下载

    2021-11-05 18:58:30
  • C# 实现QQ式截图功能实例代码

    2022-04-04 03:48:12
  • 微信公众号支付(二)实现统一下单接口

    2023-01-12 21:29:18
  • Java基础之Thymeleaf的简单使用

    2023-08-24 19:00:22
  • Java一个简单的红包生成算法

    2023-12-12 10:56:50
  • c#的dllimport使用方法详解

    2023-04-20 04:01:49
  • java利用udp实现发送数据

    2023-03-21 18:30:49
  • 通过OpenGL ES混合模式缩放视频缓冲区来适应显示尺寸

    2023-11-07 15:56:41
  • Android实用图文教程之代码混淆、第三方平台加固加密、渠道分发

    2022-06-23 18:12:44
  • Android自定义垂直拖动seekbar进度条

    2023-03-21 13:19:02
  • intellij idea创建第一个动态web项目的步骤方法

    2023-04-16 15:47:20
  • Spring的事件监听机制示例详解

    2023-01-25 18:40:42
  • Java IO流 文件传输基础

    2023-08-24 13:27:11
  • Android 扫描附近的蓝牙设备并连接蓝牙音响的示例

    2022-05-14 05:36:48
  • Java基于rest assured实现接口测试过程解析

    2022-07-25 09:30:25
  • asp之家 软件编程 m.aspxhome.com