最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot整合FreeMarker的實(shí)現(xiàn)示例

 更新時(shí)間:2022年02月09日 16:50:34   作者:愛嚶斯塔  
本文主要介紹了Springboot整合FreeMarker的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、項(xiàng)目搭建

1、新建模塊

2、導(dǎo)入依賴 :將不相關(guān)的依賴刪掉

<!--        <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實(shí)體類

package com.lv.code.pojo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
 
/**
 * 學(xué)生表	student
 * @author hgh
 * @date 2022-01-21T13:35:43.912
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class Student {
    /**
     * 學(xué)生編號(hào) 主鍵 自增
     */
    private Long stuId;
 
    /**
     * 學(xué)生名字
     */
    private String stuName;
 
    /**
     * 學(xué)生電話
     */
    private String stuPhone;
 
    /**
     * 學(xué)生班級(jí)
     */
    private Long stuClass;
 
    /**
     * 學(xué)生地址
     */
    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內(nèi)引用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
#  配置數(shù)據(jù)源
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、測(cè)試

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包、啟動(dòng)器導(dǎo)入

導(dǎo)入依賴

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

實(shí)現(xiàn)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、運(yùn)行啟動(dòng)類Springboot04Application,訪問localhost:8080網(wǎng)址

二、freemarker介紹

1、新建資源文件application.yml

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

server:
  port: 8080
#  配置數(shù)據(jù)源
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的同名項(xiàng)
    allow-request-override: false
    #req訪問request
    request-context-attribute: req
    #后綴名freemarker默認(rèn)后綴為.ftl,當(dāng)然你也可以改成自己習(xí)慣的.html
    suffix: .ftl
    #設(shè)置響應(yīng)的內(nèi)容類型
    content-type: text/html;charset=utf-8
    #是否允許mvc使用freemarker
    enabled: true
    #是否開啟template caching
    cache: false
    #設(shè)定模板的加載路徑,多個(gè)以逗號(hào)分隔,默認(rèn): [ “classpath:/templates/” ]
    template-loader-path: classpath:/templates/
    #設(shè)定Template的編碼
    charset: UTF-8
#  日志打印
logging:
  level:
    com.lv.code.mapper: debug

2、模板語(yǔ)法

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

增加模塊:

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

到此這篇關(guān)于Springboot整合FreeMarker的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Springboot整合FreeMarker 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 根據(jù)經(jīng)緯度獲取地址實(shí)現(xiàn)代碼

    java 根據(jù)經(jīng)緯度獲取地址實(shí)現(xiàn)代碼

    這篇文章主要介紹了 java 根據(jù)經(jīng)緯度獲取地址實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • java報(bào)錯(cuò)Cause: java.sql.SQLException問題解決

    java報(bào)錯(cuò)Cause: java.sql.SQLException問題解決

    本文主要介紹了java報(bào)錯(cuò)Cause: java.sql.SQLException問題解決,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • Java中BigDecimal與0比較的一個(gè)坑實(shí)戰(zhàn)記錄

    Java中BigDecimal與0比較的一個(gè)坑實(shí)戰(zhàn)記錄

    BigDecimal屬于大數(shù)據(jù),精度極高,不屬于基本數(shù)據(jù)類型,屬于java對(duì)象,下面這篇文章主要給大家介紹了關(guān)于Java中BigDecimal與0比較的一個(gè)坑的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Nacos docker單機(jī)模式部署實(shí)現(xiàn)過程詳解

    Nacos docker單機(jī)模式部署實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了Nacos docker單機(jī)模式部署實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Spring事務(wù)管理零基礎(chǔ)入門

    Spring事務(wù)管理零基礎(chǔ)入門

    事務(wù)的作用就是為了保證用戶的每一個(gè)操作都是可靠的,事務(wù)中的每一步操作都必須成功執(zhí)行,只要有發(fā)生異常就?回退到事務(wù)開始未進(jìn)行操作的狀態(tài)。事務(wù)管理是Spring框架中最為常用的功能之一,我們?cè)谑褂肧pring?Boot開發(fā)應(yīng)用時(shí),大部分情況下也都需要使用事務(wù)
    2022-10-10
  • Curator實(shí)現(xiàn)zookeeper的節(jié)點(diǎn)監(jiān)聽詳解

    Curator實(shí)現(xiàn)zookeeper的節(jié)點(diǎn)監(jiān)聽詳解

    這篇文章主要介紹了Curator實(shí)現(xiàn)zookeeper的節(jié)點(diǎn)監(jiān)聽詳解,Curtor框架中一共有三個(gè)實(shí)現(xiàn)監(jiān)聽的方式,一種是NodeCache監(jiān)聽指定節(jié)點(diǎn),一種是pathChildrenCache監(jiān)聽子節(jié)點(diǎn),一種是TreeCache可以監(jiān)控所有節(jié)點(diǎn) 相當(dāng)于以上兩種的合集,需要的朋友可以參考下
    2023-12-12
  • 如何使用Spring boot的@Transactional進(jìn)行事務(wù)管理

    如何使用Spring boot的@Transactional進(jìn)行事務(wù)管理

    這篇文章介紹了SpringBoot中使用@Transactional注解進(jìn)行聲明式事務(wù)管理的詳細(xì)信息,包括基本用法、核心配置參數(shù)、關(guān)鍵注意事項(xiàng)、調(diào)試技巧、最佳實(shí)踐以及完整示例,感興趣的朋友一起看看吧
    2025-02-02
  • Java項(xiàng)目中獲取路徑的絕對(duì)路徑問題和相對(duì)路徑問題

    Java項(xiàng)目中獲取路徑的絕對(duì)路徑問題和相對(duì)路徑問題

    這篇文章主要介紹了如何Java項(xiàng)目中獲取文件地址,在 Java 項(xiàng)目中我們經(jīng)常會(huì)讀取配置文件,但是文件的路徑在獲取時(shí)我們是怎么得到的?下面我們就一起進(jìn)入文章學(xué)習(xí)該內(nèi)容吧,需要的朋友可以參考下
    2022-02-02
  • java底層JDK?Logging日志模塊處理細(xì)節(jié)深入分析

    java底層JDK?Logging日志模塊處理細(xì)節(jié)深入分析

    這篇文章主要為大家介紹了java底層JDK?Logging日志模塊處理細(xì)節(jié)深入分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Spring事務(wù)中@Transactional注解不生效的原因分析與解決

    Spring事務(wù)中@Transactional注解不生效的原因分析與解決

    在Spring框架中,@Transactional注解是管理數(shù)據(jù)庫(kù)事務(wù)的核心方式,本文將深入分析事務(wù)自調(diào)用的底層原理,解釋為什么事務(wù)不生效,并提供多種解決方案,希望對(duì)大家有所幫助
    2025-03-03

最新評(píng)論

綦江县| 长宁县| 密山市| 洪江市| 图们市| 科技| 凌海市| 新建县| 三都| 石河子市| 社会| 土默特左旗| 平遥县| 桦南县| 宝应县| 平阳县| 古蔺县| 拜泉县| 西藏| 洪江市| 萍乡市| 阳高县| 西青区| 阿拉善盟| 南昌市| 郎溪县| 乳山市| 沂南县| 宜川县| 江达县| 柳林县| 苍南县| 崇义县| 德庆县| 长宁区| 湖口县| 汝阳县| 白朗县| 乌海市| 将乐县| 高要市|