1. 程式人生 > >SpringBoot整合Freemarker+Mybatis

SpringBoot整合Freemarker+Mybatis

strong res esp ngs wire hid names 插件 sql

開發工具

技術分享圖片技術分享圖片

開始

新建工程

技術分享圖片

.選擇Spring Initializr

技術分享圖片

下一步

技術分享圖片

下一步,選擇需要的組件

技術分享圖片

..改一下工程名,Finish

技術分享圖片

..目錄結構

技術分享圖片

首先,修改pom文件

技術分享圖片

然後,將application.properties改成yml文件,並且配置相關參數

技術分享圖片

我的數據庫很簡單,user表,int類型的自增id,varchar類型的name。

之後建立各個文件,目錄結構如下:

技術分享圖片

HelloController

技術分享圖片
package com.example.controller;

import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView;
import java.util.HashMap; import java.util.Map; @RestController public class HelloController { @Autowired private UserService userService; @RequestMapping("/index") public String index(){ return "Hello !!"; } @RequestMapping("/add") public Map<Integer, Integer> addUsers(){ Map
<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < 10; i++){ map.put(i, userService.addUser(new User("name-" + i))); } return map; } @RequestMapping("/get") public Map<String, Object> getUsers(){ Map<String, Object> map = new HashMap<>(); map.put("users", userService.getUsers()); return map; } @RequestMapping("/view") public ModelAndView viw(){ ModelAndView mv = new ModelAndView("home"); mv.addObject("name","Tom‘s Table"); mv.addObject("users", userService.getUsers()); return mv; } }
View Code

UserDAO

技術分享圖片
package com.example.dao;

import com.example.entity.User;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserDAO {

    int addUser(User user);

    List<User> getUsers();
}
View Code

User

技術分享圖片
package com.example.entity;

public class User {

    private int id;
    private String name;

    public User(String name) {
        this.name = name;
    }

    public User() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name=‘" + name + ‘\‘‘ +
                ‘}‘;
    }
}
View Code

UserService

技術分享圖片
package com.example.service;

import com.example.entity.User;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public interface UserService {

    int addUser(User user);

    List<User> getUsers();
}
View Code

UserServiceImpl

技術分享圖片
package com.example.service.impl;

import com.example.dao.UserDAO;
import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDAO userDAO;

    @Override
    public int addUser(User user) {
        return userDAO.addUser(user);
    }

    @Override
    public List<User> getUsers() {
        return userDAO.getUsers();
    }
}
View Code

然後在Resource文件夾新建一個mybatis文件夾,用來存放mapper

UserDAO.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.example.dao.UserDAO">

    <insert id="addUser" parameterType="User">INSERT INTO USER(NAME) VALUES (#{name})</insert>

    <select id="getUsers" resultType="User">SELECT * FROM USER </select>

</mapper>

home.css

@charset "UTF-8";


h1{
    color: #ff527d;
}

home.ftl

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8" />
    <title></title>
    <link rel="stylesheet" type="text/css" href="/css/home.css">
</head>
<body>
    <h1>${name}</h1>
    <table>
        <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
        </tr>
        </thead>
        <tbody>
        <#list users as u>
            <tr>
                <td>${u.id}</td>
                <td>${u.name}</td>
            </tr>
        </#list>
        </tbody>
    </table>
</body>
</html>

對於mybatis相關xml生成以及操作,ftl文件的新建,請看最後。

最關鍵的類:啟動類,很有必要說明一下。

package com.example.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@MapperScan("com.example.dao")
@ComponentScan("com.example")
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

默認SpringBoot的裝配規則是: 只掃描Application所在的包以及所有子包!這個坑我一直踩卻沒有懷疑他。

@MapperScan-----掃描Mapper類

@ComponentScan----掃描指定的包

到此為止,可以啟動SpringBoot應用了。

技術分享圖片

---------------------

技術分享圖片

---------------------

技術分享圖片

----------------------最後一個,從後臺讀取數據,freemarker渲染視圖

技術分享圖片

下面進行采坑指南---

第一個,用過eclipse+mybatis插件的都知道,有個插件來生成mybatis配置文件和映射文件是個方便的事,其實IDEA也有,但是用的我有點不習慣↓↓

..Settings

技術分享圖片

..找到下面這個

技術分享圖片

..搜索mybatis,選擇下面這三個,主要是第二個和第三個,單獨選中右側會出現Install選項

技術分享圖片

..安裝完之後,會讓你重啟,重啟之後,會出現Mybatis的選項,不過問題是,它只有config的新建選項,沒有mapper的新建選項。

技術分享圖片

..我不知道大家有啥更好的方法沒有,反正我去嘗試編輯右鍵菜單,無果。只好采取以下方法。

技術分享圖片

..找到other選項卡,看到這裏你們肯定會問,這裏不是有嗎,對呀,你有本事把它搞到右鍵菜單啊。復制右側的內容

技術分享圖片

..回到Files,點擊加號,輸入Name,擴展名,並把復制的內容粘貼到此處。註意把namespace裏面的代碼去掉

技術分享圖片

點擊OK,可以看到,出現了Mapper選項,但是!他並沒有像eclipse裏面的插件那樣智能,他只是生成一個普通的文件而已。裏面的namespace的值需要你自己修改。

技術分享圖片

到此,實現了Mybatis配置文件的代碼追蹤等等實用的操作

插一句:網上都是告訴你使用generator來生成mapper文件以及簡單的sql語句,節省了時間,但是我不是特別喜歡那種全自動的。

第二個,關於freemarker模板的問題。

SpringBoot的文件目錄:static用來存放靜態文件,templates用來存放視圖。那麽,freemarker模板需要引用static裏面的css文件呢?

技術分享圖片

如果在freemarker文件裏面直接這樣寫,他說他找不到,但是,你不用管它!當項目運行起來,SpringBoot會自動從static裏面去找。如果你有強迫癥,沒關系,我能忍。

第三個,同樣,IDEA如何創建freemarker文件?

唉,沒有相應的模板。你可以自己建一個:

復制HTML5的模板

技術分享圖片

點擊加號,新建一個

技術分享圖片

點擊OK,右鍵new

技術分享圖片

點擊,輸入文件名(這裏的$Title$,因為不是html文件,所以識別不了,你看著費勁可以修改模板)

技術分享圖片

SpringBoot整合Freemarker+Mybatis