簡單纔是美! SpringBoot+JPA

SpringBoot 急速構建項目,真的是用了才知道,搭配JPA做爲持久層,一簡到底!
下面記錄項目的搭建,後續會添加NOSQL redis,搜索引擎elasticSearch,等等,什麼不過期就加什麼。html

開發工具idea、項目構建gradle、模板引擎thymeleafmysql

項目構建

1.【new】 -> 【product】 -> 選擇Spring Initializr -> 【next】redis

clipboard.png

2.填寫Group,Artifact,Type ->【next】spring

clipboard.png

3.導包sql

  1. 1.左邊選擇Web右邊勾選Web
    2.左邊選擇SQL右邊勾選JPA
    3.左邊選擇SQL右邊勾選mysql
    4.左邊選擇Template Engines右邊勾選Thymeleaf
    5.【next】->【finish】

clipboard.png
好了
如今的項目結構segmentfault

clipboard.png

BootjpaApplication 是項目的啓動類
resources/templates/ 文件夾是放頁面的
build.gradle 存放jar包座標瀏覽器

application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update

@RestController

配置完成,寫個controller試試看app

@RestController
public class HelloBootController {

    @RequestMapping("helloBoot")
    public String helloBoot(){
        return "Hello Boot-JPA";
    }
}

在BootjpaApplication文件上啓動elasticsearch

clipboard.png

@RestController註解,代替@Controller+@ResponseBody
那麼返回頁面就直接用@Controller就行了ide

如今JPA登場


db

註解和hibernate同樣。

@Entity
public class User {

    private long id;
    private String name;
    private String passWord;
    private  String email;

    @Id
    @GeneratedValue
    public long getId() {
        return id;
    }
    。。。。。
  }

如今,就是見證奇蹟的時刻!

dao

dao層繼承JpaRepository便可

public interface UserRepository extends JpaRepository<User,Long> {
}

什麼!這就完了??對,低調

controller

controller層,service層跳過。

@Controller
public class HelloBootController {

    @Autowired
    UserRepository userRepository;

    @RequestMapping("/toHello")
    public String toHello(ModelMap modelMap){
        userRepository.save(new User("Mshu","123456","zhuiqiu95@foxmail.com"));
        List<User> users = userRepository.findAll();
        modelMap.put("users",users);
        return "helloBoot";   //頁面地址
    }
}

thymeleaf


至於頁面,默認是在resources/templates/下的html,試圖解析器已經配置默認配置好的。

前綴:resources/templates/
後綴:html

那咱們就在resources/templates/下新建一個名爲helloBoot.html的頁面
注意<html xmlns:th="http://www.thymeleaf.org " lang="en">引入thymeleaf
用到了thymeleaf語法遍歷。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"  lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<table >
    <tr th:each="user,userState : ${users}">
        <td style="border: 1px solid seagreen" th:text="${user.name}"></td>
        <td style="border: 1px solid seagreen" th:text="${user.passWord}"></td>
        <td style="border: 1px solid seagreen" th:text="${user.email}"></td>
    </tr>
</table>
</body>
</html>

啓動,輸入地址,回車!
clipboard.png

application.properties

咱們須要將application.properties裏面配置的數據注入到類中能夠這麼作,
如下是一段application.properties中的數據;

#elasticsearch
cluster.name=elasticsearch
elasticsearch.ip=127.0.0.1
elasticsearch.port=9300

在類中使用@Value注入,記住使用${}包裹:

@Component
public class ELClient {

    @Value("${cluster.name}")
    private  String clusterName;

    @Value("${elasticsearch.ip}")
    private  String elacticSearchIp;

    @Value("${elasticsearch.port}")
    private  Integer  elacticSearchPort;
}

精彩回顧

剛剛dao層明明只寫了一個接口沒有寫任何方法,怎麼就能調用save(),findAll()呢,
對JPA默認了許多基礎增刪改查方法,直接調用便可。
怎麼寫除了默認給出的方法之外怎麼寫呢,

public interface UserRepository extends JpaRepository<User,Long> {
    User findByName(String name);
}

調用的話直接

User user = userRepository.findByName("Mshu");

那麼怎麼作的映射的,它怎麼知道個人參數name對應表裏的name,原來名字同樣就能夠映射,好像頗有道理
沒錯就那麼簡單,這種寫法太hibernate了。

注意事項

  1. 若是發現瀏覽器訪問controller時404
    https://segmentfault.com/n/13...
  2. Srpingboot 打war包
    https://segmentfault.com/n/13...
相關文章
相關標籤/搜索