码迷,mamicode.com
首页 > 编程语言 > 详细

SpringBoot整合Freemarker+Mybatis

时间:2018-02-21 17:44:16      阅读:748      评论:0      收藏:0      [点我收藏+]

标签:post   model   stat   image   输入   选项   val   一个   imp   

开发工具

技术分享图片技术分享图片

开始

 新建工程

技术分享图片

 .选择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

标签:post   model   stat   image   输入   选项   val   一个   imp   

原文地址:https://www.cnblogs.com/LUA123/p/8456898.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!