摘要:本文只是引子,后續(xù)更新到獨立章節(jié)。尤其是,這也是現(xiàn)在號稱流行的組合。幸虧現(xiàn)在看起來不主流了。增刪改查多條件組合查詢分頁,排序等多表關(guān)聯(lián)。而每個類寫上構(gòu)造函數(shù),,實在是蛋疼。
本文只是引子,后續(xù)更新到獨立章節(jié)。
環(huán)境:Spring Boot 1.5.4
到了操作數(shù)據(jù)庫的環(huán)節(jié),以 MySQL 為基準(zhǔn),體驗一下數(shù)據(jù)庫的相關(guān)操作,先讓我糾結(jié)一下,至少有以下四種姿勢。
JDBC。原生的 JDBC 操作,原生的 SQL語句,寫一大堆的初始化、代碼、異常捕獲。
JDBCTemplate。Spring 對 JDBC 的封裝,基本上還是原生的 SQL 語句,操作方法要自己寫,少了很多(他們叫樣板式)代碼。
JPA。內(nèi)置了一些接口,封裝了常規(guī)的 CURD、分頁操作,借助 Spring Data Jpa,能幫你自動實現(xiàn)大部分的單表操作,你要做的僅僅是定義實體,按照規(guī)范定義接口即可。
MyBatis。一個 Java 當(dāng)前很流行的 ORM 框架,如果你以前是寫 PHP 的,我猜你不太敢相信它是 ORM 框架。
JPA、MyBatis 將是學(xué)習(xí)重點。尤其是 MyBatis,這也是現(xiàn)在號稱流行的 SSM 組合。(Spring + Spring MVC + MyBatis)?幸虧 Structs、Hibernate 現(xiàn)在看起來不主流了。
體驗的基線:
單表。增、刪、改、查(多條件組合查詢、分頁,排序等)
多表關(guān)聯(lián)。一對一,一對多,多對多
lombokJava 是強類型的,所以經(jīng)常要定義實體,或domain,或dao,或dto。
而每個類寫上構(gòu)造函數(shù),Getter、Setter、toString,實在是蛋疼。雖然 PHPStorm 提供了快捷鍵可以快速生成(CTRL+N),但當(dāng)你要修改屬性、屬性類型的時候,還是需要手動搞一下的。
所以我發(fā)現(xiàn)了 lombok 這個項目,通過一定的注解,配合 PHPStorm 插件,可以消除以上那些常規(guī)代碼。
甚至,還可以通過 builder() 模式,消除重復(fù)的 .setXXX() 語句
官網(wǎng)地址:https://projectlombok.org/
數(shù)據(jù)庫結(jié)構(gòu)先意淫幾張表,通過這幾張表,期望能夠覆蓋常規(guī)的需求,其包含了各種類型的的字段,以及多種表關(guān)系。
user (id, role_id, xx) user_detail (id, user_id, xx) role (id, xx) order (id, user_id, xx) product (id, xx) order_product (order_id, product_id) 關(guān)系如下: user<->user_detail 一對一 user->role 一對一(假設(shè)一個用戶只有一個角色) role->user 一對多 user->order 一對多 order->user 多對一 order<->product 多對多
同時在 application.properties 中配置 datasource 數(shù)據(jù)源相關(guān)配置,這里使用 MySQL
spring.datasource.url=jdbc:mysql://localhost:3306/springboot spring.datasource.username=root spring.datasource.password=123123 spring.datasource.driver-class-name=com.mysql.jdbc.Driver字段映射
Java 與 MySQL 類型映射,可以參考
但,我目前還很困惑的是時間相關(guān)的幾個類型,在 MySQL 中,有以下幾個:
DATE TIME DATETIME TIMESTAMP
其中,TIMESTAMP、TIME 貌似只能對應(yīng) java.sql.Timestamp 與 java.sql.Time
那么 DATE、DATETIME 呢?首先對應(yīng) java.sql.Date 與 java.sql.Timestamp 肯定是可以的。
能對應(yīng) java.util.Date 嗎?
能對應(yīng) java.time.LocalDate、java.time.LocalDateTime 嗎?
應(yīng)當(dāng)如何選擇?標(biāo)準(zhǔn)姿勢是什么?
參考:
https://stackoverflow.com/que...
DROP TABLE IF EXISTS `order`; CREATE TABLE `order` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(10) unsigned NOT NULL, `name` varchar(64) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT="訂單"; BEGIN; INSERT INTO `order` VALUES ("1", "1", "訂單一"), ("2", "1", "訂單二"), ("3", "1", "訂單三"), ("4", "2", "訂單四"), ("5", "2", "訂單五"); COMMIT; DROP TABLE IF EXISTS `order_product`; CREATE TABLE `order_product` ( `order_id` int(10) unsigned NOT NULL, `product_id` int(10) unsigned NOT NULL, PRIMARY KEY (`order_id`,`product_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT="訂單產(chǎn)品關(guān)聯(lián)表"; BEGIN; INSERT INTO `order_product` VALUES ("1", "1"), ("1", "2"), ("1", "3"), ("2", "2"), ("2", "3"); COMMIT; DROP TABLE IF EXISTS `product`; CREATE TABLE `product` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL, `price` double(10,2) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT="產(chǎn)品"; BEGIN; INSERT INTO `product` VALUES ("1", "大白菜", "1.23"), ("2", "土豆", "2.45"), ("3", "西紅柿", "3.78"), ("4", "芹菜", "2.08"), ("5", "雞蛋", "0.51"); COMMIT; DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT="角色"; BEGIN; INSERT INTO `role` VALUES ("1", "管理員"), ("2", "總編"), ("3", "編輯"); COMMIT; DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT "ID", `role_id` tinyint(3) unsigned NOT NULL COMMENT "角色ID", `username` varchar(32) NOT NULL COMMENT "Email用戶名,唯一", `password` varchar(32) NOT NULL COMMENT "密碼", `salt` varchar(6) NOT NULL COMMENT "鹽", `name` varchar(32) NOT NULL COMMENT "姓名", `birthday` date DEFAULT NULL COMMENT "生日", `sex` enum("male","female") NOT NULL COMMENT "性別", `access` datetime DEFAULT NULL COMMENT "datetime類型", `access_time` time DEFAULT NULL COMMENT "time類型", `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT "創(chuàng)建時間", `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "修改時間", `state` tinyint(1) unsigned NOT NULL DEFAULT "0" COMMENT "狀態(tài)", PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT="用戶"; BEGIN; INSERT INTO `user` VALUES ("1", "1", "[email protected]", "6f5275a26b06ee3bdf4fb1d2ca89577c", "wnyk0a", "雷小軍", "1970-08-08", "male", "1987-09-08 01:02:03", "01:02:03", "2017-07-01 09:36:23", "2017-07-01 17:29:06", "1"), ("2", "2", "[email protected]", "3206c77753829fc30fffa37881a63341", "xxmao1", "董明珠", "1960-05-05", "female", "1987-09-08 01:02:03", "01:02:03", "2017-07-01 09:36:50", "2017-07-01 17:28:42", "1"); COMMIT; DROP TABLE IF EXISTS `user_detail`; CREATE TABLE `user_detail` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `user_id` int(10) unsigned NOT NULL, `address` varchar(32) NOT NULL DEFAULT "" COMMENT "地址", PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT="用戶詳情"; BEGIN; INSERT INTO `user_detail` VALUES ("1", "1", "北京"), ("2", "2", "廣州"); COMMIT;
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67272.html
摘要:比如日志默認使用作為第一選擇,默認集成了,并且支持配置使用貌似和有點變化,暫時不折騰了單元測試 環(huán)境:Spring Boot 1.5.4 基于 Spring Boot 創(chuàng)建一個命令行應(yīng)用,先來個最基本的體驗,體驗一下: 配置管理(配置文件加載,多環(huán)境配置文件) 日志 單元測試 創(chuàng)建項目 比較好的兩種方法: 通過 https://start.spring.io/ 網(wǎng)站,生成項目框架...
摘要:關(guān)聯(lián)關(guān)系的關(guān)聯(lián)關(guān)系定義上,感覺并不是很靈活,姿勢也比較難找。如,定義在關(guān)聯(lián)關(guān)系上的參數(shù)可以設(shè)置級聯(lián)的相關(guān)東西。因為序列化會涉及到實體類關(guān)聯(lián)對象的獲取,會觸發(fā)所有的關(guān)聯(lián)關(guān)系。 接(4) - Database 系列. Java Persistence API,可以理解就是 Java 一個持久化標(biāo)準(zhǔn)或規(guī)范,Spring Data JPA 是對它的實現(xiàn)。并且提供多個 JPA 廠商適配,如 Hi...
摘要:開始介紹簡化了基于的應(yīng)用開發(fā),你只需要就能創(chuàng)建一個獨立的,產(chǎn)品級別的應(yīng)用。該包含很多搭建,快速運行項目所需的依賴,并提供一致的,可管理傳遞性的依賴集。日志級別通過標(biāo)識開啟控制臺級別日志記錄,也可以在中指定日志級別配置示例 開始 介紹 Spring Boot 簡化了基于 Spring 的應(yīng)用開發(fā),你只需要 run 就能創(chuàng)建一個獨立的,產(chǎn)品級別的 Spring 應(yīng)用。 Spring 平臺...
摘要:不過可以切換到版本,兼容性未知。注解一旦添加了依賴會判斷這是一個應(yīng)用,并啟動一個內(nèi)嵌的容器默認是用于處理請求。注意中空字符串與的區(qū)別。 環(huán)境:Spring Boot 1.5.4 基于 Spring Boot 可以快速創(chuàng)建一個Web & Restful 應(yīng)用,在開始應(yīng)用之前,至少要了解以下用法: 定義路由,定義 HTTP 方法 獲取Header、GET、POST、路徑等參數(shù) Cooki...
摘要:在右上角,點擊運行配置下拉菜單并選擇在右上角彈出的新窗口中,點擊號并創(chuàng)建一個新的運行配置。添加值在框中選擇文件夾選擇模塊,在我的用例中為,在下拉菜單中。這兩個操作都會為您自動構(gòu)建項目。單擊調(diào)試按鈕后,將以調(diào)試模式啟動應(yīng)用程序并支持。 IntelliJ設(shè)置 除Eclipse外, Intellij IDE也是一個開發(fā)Broadleaf Commerce 很好的工具(Broadleaf平臺的...
閱讀 1409·2021-09-28 09:43
閱讀 4281·2021-09-04 16:41
閱讀 1946·2019-08-30 15:44
閱讀 3792·2019-08-30 15:43
閱讀 804·2019-08-30 14:21
閱讀 2058·2019-08-30 11:00
閱讀 3350·2019-08-29 16:20
閱讀 1949·2019-08-29 14:21