SpringBoot 急速構建項目,真的是用了才知道,搭配JPA做爲持久層,一簡到底!
下面記錄項目的搭建,後續會添加NOSQL redis,搜索引擎elasticSearch,等等,什麼不過期就加什麼。html
開發工具idea、項目構建gradle、模板引擎thymeleafmysql
1.【new】 -> 【product】 -> 選擇Spring Initializr -> 【next】redis
2.填寫Group,Artifact,Type ->【next】spring
3.導包sql
好了
如今的項目結構segmentfault
BootjpaApplication 是項目的啓動類
resources/templates/ 文件夾是放頁面的
build.gradle 存放jar包座標瀏覽器
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
配置完成,寫個controller試試看app
@RestController public class HelloBootController { @RequestMapping("helloBoot") public String helloBoot(){ return "Hello Boot-JPA"; } }
在BootjpaApplication文件上啓動elasticsearch
@RestController註解,代替@Controller+@ResponseBody
那麼返回頁面就直接用@Controller就行了ide
註解和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層繼承JpaRepository便可
public interface UserRepository extends JpaRepository<User,Long> { }
什麼!這就完了??對,低調
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"; //頁面地址 } }
至於頁面,默認是在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>
啓動,輸入地址,回車!
咱們須要將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了。