SpringBoot整合Freemarker+Mybatis
開發工具
,
開始
新建工程
.選擇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;View Codeimport 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; } }
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