本篇為記帳簿專案計畫要實現的功能。上一篇使用SpringBoot打造記帳簿專案(二)專案命名
網頁
2018/12/31
2018/12/23
2018/12/22
2018/12/21
2018/12/18
2018/12/17
Oracle XOR,OR bitwise operator 位元運算
在Oracle中,只有AND
的位元運算函式BITAND(x, y)
,不過卻沒有OR
及XOR
的位元運算函式,因此若要做OR
及XOR
的位元運算,則可利用下面的做法。
2018/12/15
Oracle optional WHERE condition 依參數是否為null決定WHERE條件
在Oracle中,若一個SQL查詢語句的WHERE
條件要依比對的參數是否為NULL
來決定此WHERE
條件的作法如下。
Java java.util.ConcurrentModificationException 與fail-fast
如果對一個非執行緒安全的集合(Collection)進行多執行緒的操作時,當某一執行緒單獨修改了集合的結構,例如新增(add)或刪除(remove)一個元素,則會發生java.util.ConcurrentModificationException
例外錯誤。
2018/12/14
2018/12/13
2018/12/12
2018/12/11
前端演變的小歷史
本篇出自於TechBridge 技術共筆部落格 - 跟著小明一起搞懂技術名詞:MVC、SPA 與 SSR;轉載於數位時代
我對於前端並不是很了解,這篇文章淺顯易懂,讓我了解前端的演變。
2018/12/10
2018/12/8
Java 使用Callable Multi-thread 處理 LeetCode Jewels and Stones 珠寶與石頭
本篇源自LeetCode Jewels and Stones 珠寶與石頭的問題,想說是否可以用多執行緒來處理看看。本篇只是練習如何使用Callable
返回值。
LeetCode Jewels and Stones 珠寶與石頭
雖然常在網路上(PTT SOFT_JOB)常聽到要刷LeetCode,但直到今天才來玩看看,下面是我隨便挑的一個演算法(algorithm)的簡單題目,Jewels and Stones 珠寶與石頭。
2018/12/7
2018/12/5
2018/12/4
Eclipse 寫一支簡單的程式及JUnit測試程式並執行覆蓋率測試
本篇主要是要介紹怎麼使用Eclipse的程式覆蓋率測試工具(EclEmma Code Coverage plugin)。通常會要寫測試程式的工作就會要求測試程式的覆蓋率。
Eclipse 清除EclEmma Java 程式碼覆蓋率的高光(highlight)效果
Eclipse Java程式碼覆蓋率(Java code coverage) plugin執行後會出現的highlight顏色效果,如要清除此效果可在Coverage視窗(Coverage View)的功能選單上找到[Remove All Sessions]的叉叉按鈕,點選即可移除。
2018/12/1
2018/11/30
SQL predicates的意思
SQL predicates是指表示TRUE
或FALSE
等條件判斷的敘述,例如=, <>, >, >=, <, <=, IN, BETWEEN, LIKE, IS NULL or IS NOT NULL
等就稱之為predicates。或是說WHERE
後的條件式都可稱為predicates。
Trivial,Non-Trivial的中文翻譯
在閱讀英文的程式說明時,例如在Stack Overflow的問題或回答中,常會看到non-trivial這個單字,其中文意思為不平凡的,或可翻成"複雜的","難以理解的","困難的","不簡單的"。
2018/11/29
2018/11/28
Java Objects.requireNonNull
最近工作上有個同事很愛用Objects.requireNonNull(T)
及Objects.requireNonNull(T obj, String message)
來判斷傳入方法的參數是否為null並丟出錯誤訊息。
2018/11/20
2018/11/17
2018/11/10
2018/10/29
在Windows 7 64Bit 安裝Oracle 12c資料庫
本篇紀錄如何在Windows 7 64Bit安裝Oracle Database 12c Release 2 - (12.2.0.1.0) - Standard Edition 2 and Enterprise Edition。
2018/10/26
Java 8 使用Stream.collect依條件蒐集物件
在Java中常會有從一個集合(例如List
)中依條件篩選元素,並將符合條件的元素放入另一個集合的操作,本篇介紹如何使用Java 8的Stream.filter()
搭配Stream.collect()
來達成。
Java 8 Stream聚合操作(aggregate operations)的forEach()與迭代(iterations)的區別
Java 8對於集合(collections)的操作,新增了使用流(Stream)來進行操作。以Stream操作collection的方式稱為聚合操作(aggregate operations)。而其forEach方法與傳統的迭代(iteration)雖然都是用來走訪集合中的每一個元素,但差別如下:
2018/10/23
Oracle SQL Tuning
本篇參考來源Introduction to SQL Tuning
SQL Tuning(SQL效能調校)用來診斷並修正SQL語句(SQL statement)來達到校能要求。
2018/10/20
使用Eclipse建立Maven Spring Boot多模組專案
How to create Spring Boot Maven multi-module projects in Eclipse
本篇介紹如何在Eclipse建立Maven多模組專案(multi-module project)。
2018/10/14
Java Eclipse The import [class name] conflicts with a type defined in the same file
當你在某個類別要匯入外部的類別檔時,出現以下錯誤指示:
The import [class name] conflicts with a type defined in the same file
2018/10/13
2018/10/6
2018/10/2
2018/9/29
2018/9/21
Maven 如何停止執行Javadoc Plugin
在Maven pom.xml
若設置了Javadoc Plugin,則在build過程中會透過Javadoc Tool產生程式碼的Javadoc(也就是Java API文件)。
但在開發時通常不需要產API文件的步驟,而有時程式碼或模組一多,build會變得很慢,所以跳過Javadoc Plugin的方法如下。
2018/9/20
2018/9/16
Maven 專案建置的生命週期 (Maven build lifecycle)
學習Maven最重要的觀念就是要知道什麼是Maven的建置生命週期(Build Lifecycle)。因為Maven就是以此為基礎來運行。或是說,你要先知道什麼一般專案build的過程是什麼。
2018/9/15
2018/9/14
Java 在Windows無法執行javac指令
2018/9/5
Spring Boot 外部配置檔application.properties的路徑位置
Spring Boot可使用外部配置檔application.properties
來設定Spring環境的一些參數,其預設擺放的路徑如下。
2018/9/3
使用Spring Tool Suite(STS)建立spring boot專案時maven下載jar出現問題
今天第一次使用Spring Tool Suite(STS)建立spring boot專案時,專案的maven在下載jar的過程中出現問題如下。
2018/9/1
Java 8 java.util.function 常用的Functional Interface
Java 8新增了Lambda語法,而lambda語法的參數為Functional Interface的實作。以下為Java 8新增的java.util.function
常用的Functional Interface及被使用到的方法。
2018/8/30
Spring 使用@Autowired依賴注入物件
Spring的@Autowired
用來依賴注入物件,典型的用法就是掛在類別成員變數上。@Autowired
預設會依注入對象的類別型態來選擇容器中相符的物件來注入。
2018/8/29
Oracle 在Java呼叫 SELECT...FOR UPDATE的Stored Procedure時,發生java.sql.SQLException: ORA-01002: fetch out of sequence.( ORA-01002:fetch超出序列)錯誤
當在Java的Dao層使用Spring JdbcTemplate呼叫Oracle的預存程序(SP)時,發生java.sql.SQLException: ORA-01002: fetch out of sequence.( ORA-01002:fetch超出序列)
錯誤
Java 8 Optional orElse() 與 orElseGet() 的差別
Java 8 新加入的Optional
類別是設計來處理null的容器,而其orElse()
與orElseGet()
的差別如下。
2018/8/28
2018/8/27
Java 8 Method References(方法參考/方法引用)的使用時機
Java 8加入了lambda表示式(lambda expression)的語法特性,而lambda表示式可以進一步改用method references(方法參考/方法引用)的寫法。所以使用method references前你應該知道lambda語法該如何使用。
2018/8/26
2018/8/25
Java instanceof 和 Class.isAssignableFrom(Class<?> cls)的區別
Java的instanceof
關鍵字與Class類別的isAssignableFrom(Class<?> cls)
方法都可用來判斷一個物件是否為某個類別或介面的子類別。但差異如下。
Java 8 用Optional來檢查null
寫Java一陣子都知道,最常出現的錯誤例外就是NullPointerException
,而為了避免出現這個例外,所以程式中經常使用if else
先判斷物件是否為null
後,才會去呼叫物件的方法。
2018/8/24
2018/8/20
2018/8/17
Oracle 如何在SQL Developer中測試輸出參數型態為SYS_REFCURSOR型態的Stored Procedure?
在SQL Developer中,可使用下面來測試輸出參數為SYS_REFCURSOR型態的Stored Procedure。
2018/8/15
2018/8/14
Oracle SELECT FOR UPDATE
如果有需要將SELECT
的資料先lock後再對資料做後續邏輯處理時,會使用到SELECT FOR UPDATE
來鎖定資料列。例如Stored Procedure中常會使用CURSOR來暫存SELECT的資料並做其他處理的情況。
2018/8/12
Spring @EnableCaching 啟用annotation driven快取設定
Spring 3.1加入了@EnableCaching
注釋,其作用同等於xml配置檔的<cache:annotation-driven>
Spring Boot 使用@ImportResource匯入xml配置檔
在Spring Boot應用程式專案中,如果要匯入Spring的xml配置檔,可在Spring Boot的Application類別(即啟動Spring Boot的類別)搭配@ImportResource
注釋來指定配置檔的位置來匯入。
2018/8/11
Oracle 資料庫物件名稱最大長度限制 schema name max length
Oracle 12c(12.1)資料庫物件(例:資料表,欄位)的名稱長度限制(schema name max length)是1 ~ 30 Bytes,也就是最長30個英文字。
2018/8/10
2018/8/8
2018/8/7
Java 使用自訂的Java Bean Validation Annotation來驗證Bean屬性範例
Java Bean Validation可以在Java Bean的屬性掛上注釋(Annotation)來進行驗證。
2018/8/6
Oracle PL/SQL 在Package建立一個簡單的查詢Stored Procedure
通常我們會在Java的Hibernate或MyBatis下SQL指令來查詢資料庫,但在某些情況會要求在資料庫寫Stored Procedure來查詢,而僅在Java中呼叫該Procedure來取得結果。
2018/8/5
如何將mp3上傳至iphone?
如果要將mp3上傳至iphone聽,傳統的方法就是用官方的itune來上傳,但這是最難用且令人抓狂的方法。如果你想將mp3放在iphone上聽,我認為最快速的方法就是把mp3放在Google Drive,然後在iphone上下載Google Drive的app來開啟就可以聽了。
2018/7/26
Hibernate JPA Entity Listeners
Hibernate JPA可以使用下面的實體監聽器Entity Listeners來偵測新增,查詢,刪除,修改(CRUD)執行時的動作,並在執行的前後插入其他要執行的方法。
Hibernate JPA Many To One複合主鍵新增時插入欄位順序錯誤
今天在使用Hibernate JPA的EntityManager.persist()
新增主表和子表的資料時,出現插入欄位順序錯誤的問題,情形如下。
2018/7/24
2018/7/23
Hibernate JPA One To Many / Many To One 主表為複合鍵(Compound Key)設定
Hibernate JPA OneToMany/ManyToOne複合鍵(Compound Key)設定如下。
子表的外鍵一定是其主鍵的一部分嗎
Is foreign key a part of the primary key of the child table in one to many relationship?
在一對多關係中,子表中的外鍵會是其主鍵的一部分嗎?
SQL Server 資料表中的資料行與現有主索引鍵或UNIQUE條件約束不相符
今天在SQL Server使用SSMS建立資料表的外鍵時,出現錯誤:
資料表中的資料行與現有主索引鍵或UNIQUE條件約束不相符
。
2018/7/22
2018/7/21
桃園市市徽
今天看到[問卦] 有沒有台灣哪個縣市的旗子最漂亮的八卦?這篇文章。台灣各縣市的市徽設計都超醜,配色字體都是。不過我覺得桃園市徽還有救,把難看的配色和桃園兩個字拿掉,在稍微調整一下中間圖樣的大小就OK了,這樣簡簡單單的設計不是很好嗎?
Java java.sql.Time 與 java.sql.Timestamp 的差別
Java中用來紀錄時間資訊的類別為java.sql.Time
,其與java.sql.Timestamp
的差異如下。
2018/7/19
2018/7/18
Java SQL Server Error 'The data types time and datetime are incompatible in the greater than or equal to operator.'
今天在用JPA JPQL查詢SQL Server的資料表時,出現下面錯誤
The data types time and datetime are incompatible in the greater than or equal to operator
2018/7/17
2018/7/14
2018/7/9
SQL Server - INSERT statement conflicted with the FOREIGN KEY constraint
在SQL Server新增時出現錯誤INSERT statement conflicted with the FOREIGN KEY constraint
時,如果外鍵參考的資料表確實存在要新增的主鍵值,因此排除了參考的外鍵值不存在的問題,別懷疑,請依照訊息提供的資料表名稱去檢查該資料表的關聯性(外鍵)設定是否正確。
2018/7/8
2018/7/7
2018/7/5
JPA 雙向一對多/多對一 Bidirectional One To Many / Many To One CascadeType.MERGE更新時出現StackOverflowError
錯誤發生的情境如下,一個部門Department
有多個員工Employee
的一對多/多對一關聯。
2018/7/4
ZK <timebox>,<label> 24小時格式format
ZK <timebox>
的格式預設為12小時制(12-hour clock),若要改為24小時制(24-hour clock),則format
設為"HH:mm:ss"
如下。
2018/7/3
JPA Hibernate 一對多One To Many出現重複的結果
今天在設定JPA一對多OneToMany的實體時,查詢結果出現重複的結果。例如一個部門(Department)有多個員工(Employee),而Department
物件中用來取得與Employee
關聯的List<Employee> employeeList
中出現重複的結果
2018/7/2
2018/7/1
SQL Server 重設欄位的自動增量(auto increment)的識別種子值(seed)。 reset auto increment seed value.
在SQL Server資料庫管理工具SSMS中可在資料表欄位的識別規格設定識別值增量(identity increment)來達到自動增量(auto increment)的效果。如果要將已經增量的識別值種子(identity seed)重設,可以使用DBCC CHECKIDENT
。
2018/6/30
2018/6/28
Windwos 10 預設瀏覽器重開機後被重設回IE
微軟Windows 10 (企業版 版本1709)真的很不道德,把預設瀏覽器改成Chrome後,只要重開機又會被改回IE,真他媽的,網路上找了一圈還是無解。
2018/6/26
2018/6/25
2018/6/24
2018/6/23
CSS 屬性選擇器 Attribute Selector [attribute*=value]
CSS Attribute Selector [attribute*=value]
的意思是選取屬性值中包含指定子字串的元素。
2018/6/22
Hibernate JPA 雙向一對多/多對一設定 Bidirectional One To Many / Many To One
一個作者(Author)有多本書(Book),JPA 雙向一對多/多對一實體關聯設定如下。
2018/6/21
Lombok 使用lombok的問題
Lombok是一個IDE插件 + library的組合,主要作用是用來減少Java的冗長(verbose),尤其是POJO類的getter與setter,建構式,toString,equals,hashCode等樣板程式(boilerplate code),或幫你注入Logger的實例。透過在POJO類別加上lombok的注釋@Data
,@Getter
,@Setter
,@ToString
,@EqualsAndHashCode
等。
2018/6/20
JPA @OneToOne, @OneToMany的orphanRemoval屬性
在JPA的@OneToOne
(一對一)及@OneToMany
(一對多)有一個orphanRemoval
屬性,其作用如下。
2018/6/19
SQL Server SSMS 設定主鍵(Primary Key)欄位自動遞增(auto increment)
在SSMS物件總管(Object Explorer)右鍵點選資料表 -> 設計 -> 選擇主鍵欄位
,在下方的[資料行屬性](Column Properties)視窗的[識別規格](Identity Specification)項下的[為識別](Is Identity)改為'是'並存檔即可。
JPA Hibernate Entity映射欄位只要讀取不要新增或更新
如果映射資料表的Entity類別的某個欄位只要查詢資料庫的資料,但忽略新增或修改,則可在屬性上使用@Column(name="column_name", insertable=false, updatable=false)
。
2018/6/18
ZK MVVM zul套用BindComposer
從ZK 8開始,只要UI元件的viewModel
屬性有被設定到ViewModel類別,則org.zkoss.bind.BindComposer
會自動套用。
JPA 使用@Transient來忽略Entity屬性映射至資料表
JPA預設會將Entity類別的所有屬性與資料表的欄位做映射,如果要忽略某個屬性,則在該屬性掛上@Transient
annotation。
Java WebApp javax.imageio.IIOException: Can't read input file!
當在Java程式中使用ImageIO.read(File file)
讀取指定路徑的圖片時發生錯誤如下。
2018/6/17
ZK i18n 多語系設定
ZK i18n多語系的語言設定檔預設會抓取WEB-INF
目錄下的zk-label_lang_CNTY.properties
檔,例如使用WEB-INF/zk-label_zh_TW.properties
作為繁體中文語系的來源。
2018/6/16
2018/6/15
Hibernate JPA JPQL org.hibernate.hql.internal.ast.QuerySyntaxException: [entity_name] is not mapped
今天再用JPA JPQL查詢時,出現錯誤如下
org.hibernate.hql.internal.ast.QuerySyntaxException: [entity_name] is not mapped
2018/6/14
JPA @PersistenceUnit無法注入EntityManagerFactory
若果要使用JPA的@PersistenceUnit
注入EntityManagerFactory
的實例,則所存在的類別物件必須被"容器"(container)所管理。否則無法注入EntityManagerFactory
。
Hibernate JPA Entity 生命週期 (JPA Entity Lifecycle)
在使用Hibernate JPA之前要先了解什麼是Entity生命週期是什麼,否則會像我在進行新修刪查(CRUD)的操作時一直碰到錯誤。(我是新手)
2018/6/13
Hibernate JPA 主鍵欄位自動遞增的實體類別設定
如果資料表的主鍵欄位(primary key column)是設定為自動遞增(auto increment),則在Java應用程式中對映的實體類別設定如下。
JPA + Hibernate + MySQL persistence.xml 基本設定
JPA 2.1 + Hibernate 5.2.17 + MySQL 8.0.11 persistence.xml
的一些設定。
2018/6/12
2018/6/11
2018/6/10
ZK 多語系 i18n zk-label.properties (i3-label.properties) 中文顯示Uncode編碼問題
ZK的多語系(i18n)的支援可透過在WEB-INF
目錄下設定zk-label_lang_CNTY.properties
檔(舊版的好像是叫做i3-labels.properties),並在zul直接透過EL及隱含物件labels
來存取。(注意labels是全小寫,在Eclipse編輯器大寫"L"和小寫"l"的斜體長得很像,剛才因為這個小差異折騰了半天。)
<label value="${labels.app.login}"/>
但今天在Eclipse Properties Editor編輯好properties檔時,在zul的畫面上卻是顯示中文的Unicode。
ZK 在Controller中加入元件的事件監聽器
下面範例在ZK MVC的Controller(Composer)中加入按鈕<button>
的onclick事件監聽器,並在按下按鈕後改變<label>
原本的值。
ZK Controller
ZK 可使用MVVM或MVC架構來設計你的應用程式(指UI元件(View)與資料及邏輯處理(Model)間的關係與控制)。MVVM是使用ViewModel來處理與元件的關係,而MVC則是使用Controller(也可稱作Composer)。
ZK EL語法可使用的隱含物件(implicit object)
ZK zul中可以使用EL語法來存取變數,物件,Java Bean,及預先定義好的隱含物件(implicit object),可使用的隱含物件請見Implicit Objects (Predefined Variables)。
ZK 關閉<borderlayout>中元件的動畫效果
如果要關閉ZK <borderlayout>
中元件預設的動畫效果關閉(例如開啟收合(collapsible)的動畫效果),可以在WEB-INF/zk.xml
設定檔中加入下面設定即可。
ZK org.zkoss.zk.ui.UiException: Only one child and one caption is allowed: <Center q8BP5>
ZK <borderlayout>
中的<north>
,<west>
,<east>
,<south>
,<center>
都只能有一個子原件(除了<caption>
),否則會出現下面的錯誤:
org.zkoss.zk.ui.UiException: Only one child and one caption is allowed
例如下面的<north>
中有兩個<label>
,就會引發此錯誤。
<borderlayout>
<north>
<label>LABLE 1</label>
<label>LABLE 2</label>
</north>
...
</borderlayout>
2018/6/8
2018/6/4
Eclipse Maven build java.lang.ClassNotFoundException問題
當你在Eclipse啟動在Tomcat上運行的Maven專案時,在啟動過程中如果出現了java.lang.ClassNotFoundException: 某個library的類別名稱
,則可能是因為Tomcat找不到那個依賴的library。
2018/5/31
MS SQL Server新增中文結果出現亂碼
今天在SSMS使用insert into
插入中文至資料表時,重新查詢剛剛插入的中文卻變成亂碼,例如'肉豬'變成'??',即使該欄位的data type是設為nvarchar
。
2018/5/24
在SSMS的SQL編輯器中移動整行快速鍵
在MSSQL資料庫管理工具SSMS(Microsoft SQL Server Management Studio)中,如果在SQL編輯器中要移動整行,快速鍵為按住alt + 方向鍵。
MS SQL Server 資料表或欄位名稱的方括弧[column] / [table] 是什麼意思
在MSSQL中,如果看到資料表或欄位名稱被方括弧[]
包起,例如[ColumnName]
,這代表這個欄位名稱有空白,或是與保留字相同。
2018/5/23
2018/5/17
2018/5/11
2018/5/9
2018/5/5
2018/5/4
如何將MySQL Workbench的EER Diagram轉成SQL script
MySQL Workbench的EER Diagram(實體關聯模型圖)編輯器可以讓我們建立視覺化的ER-Model,個人覺得非常好用。而將畫好的model轉成SQL的方法如下。
2018/5/1
Microsoft SQL Server資料庫管理工具SQL Server Management Studio(SSMS)
SQL Server資料庫的管理工具是SQL Server Management Studio(SSMS),就好比Oralce資料庫的管理工具是Oracle SQL Developer,或MySQL資料庫的管理工具是MySQL Workbench。
2018/4/30
2018/4/29
2018/4/23
Spring Security 自訂無存取權限時返回的錯誤內容 403 Access is denied
Spring Security在使用者存取無使用權限的資源時,預設會返回HTTP Status 403 - Access is denied頁面,如果想要自訂返回的內容,則設定如下。
2018/4/19
2018/4/16
代理與反向代理 Proxy vs Reverse Proxy
什麼是反向代理(Reverse Proxy),這是我在了解nginx的第一個問題,尤其是反向代理和前向代理(一般的代理(Proxy))的差別在哪有點令人混淆。
2018/4/13
2018/4/12
2018/4/10
Java 設計模式 簡單工廠模式 Simple Factory Pattern
簡單工廠模式(Simple Factory Pattern)又稱靜態方法工廠模式(Static Methods Factory Pattern),屬於建構式模式(Creational Patterns),目的是用來建構物件。
2018/4/9
Java 設計模式 觀察者模式 Observer Pattern
Observer Pattern(觀察者模式)是屬於設計模式中Behavioral Pattern(行為模式)。當物件(object)間的有一對多(one-to-many)關係時,可利用Observer Pattern來設計。
2018/4/7
為什麼Binary Search 二元搜索法的時間複雜度是O(log(n))
這幾天看一下資料庫索引(index)的問題,了解到B-Tree及Binary Search Tree(二元搜尋樹),就必須了解什麼是Binary Search(二元搜索法),不過對非資工本科的我來說真是燒腦,這邊僅記錄我的理解,可能有錯歡迎指正。
2018/4/6
MySQL 效能調教 58到家MySQL军规升级版 comment by Triton Ho
今天在Facebook的Backend 台灣 (Backend Tw)社團看到板主分享58到家MySQL军规升级版這篇文章,下面紀錄板主對於該文章的評論及說明,是很好的參考及學習。
MySQL 資料庫的資料表欄位是否該設定為允取NULL
今天在Facebook的Backend 台灣 (Backend Tw)社團看到板主分享58到家MySQL军规升级版這篇文章,內容是MySQL資料庫的一些設計原則。
2018/4/5
2018/4/2
轉換JSON字串為Java List<Map<String, String>>物件 by Gson
把json字串(json string)轉換為Java List<Map<String, String>>
物件的方法如下。
2018/4/1
Java Tomcat javax.naming.NamingException: No naming context bound to this class loader
啟動Tomcat時出現底下錯誤。
WARNING: Failed to retrieve JNDI naming context for container [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/common-user-registration]] so no cleanup was performed for that container
javax.naming.NamingException: No naming context bound to this class loader
...
Google 縮網址服務要停止服務了 sad
從2009年開始的Google縮網址服務Google URL Shortener(https://goo.gl/)要停止服務了,真是難過,因為一直以來都是用它縮網址。
2018/3/30
Liquibase 使用command line操作
本篇介紹使用command line指令來操作Liquibase產生changelog,執行update及rollback。可先參考學習Liquibase。
2018/3/28
MySQL 資料庫 email 欄位的VARCHAR長度
在設計資料表的時候,一定會有電子信箱email的欄位。因為email是由英文數字及特殊符號_
,-
@
及.
等組成,資料型態會設為VARCHAR
,但email的長度該設多少呢?
ER-Model identifying relationships 與 non-identifying relationships的差別
今天用MySQL Workbench的EER Diagram正要畫ER-Model時,發現實體關係的連結線分成兩種,一種是實線(Identifying Relationships),另一種是虛線(Non-Identifying Relationships),兩者的區別如下。
2018/3/27
2018/3/26
2018/3/23
Eclipse 匯入Maven Web專案出現錯誤“Dynamic Web Module 3.1 requires Java 1.7 or newer”
情境是這樣,在Github有一個Maven Dynamic Web專案,透過Git Bash在Eclipse的workspace
目錄下直接clone該專案,clone下來後接著在Eclipse import此目錄為[Maven Exsiting Maven Projects],然後在Eclipse的Markers頁籤出現Dynamic Web Module 3.1 requires Java 1.7 or newer
錯誤,而且classpath如src/main/java
不見了。解決方法如下。
使用JQuery.ajax()上傳檔案時加入進度條
在使用jQuery.ajax()非同步上傳檔案時,可以利用在xhr
屬性中加入ProgrssEvent
的監聽器來達成上傳進度條(progress bar)的效果。
在Windows 7的git專案中建立.gitignore檔
在Windows 7中因為建立檔案一定要有附檔名,所以當你想建立.gitignore
因為沒有附檔名Windows不給你建立,但只要命名為.gitignore.
,也就是後面多加一個.
即可建立。
Git .gitignore 在Eclipse Java Maven專案中通常會忽略的檔案及路徑
通常用Git提交Eclipse中的Java Maven專案時,下面的檔案及路徑通常會新增至.gitignore
檔中來忽略追蹤。
2018/3/20
Spring Security 當進入登入頁面時,出現org.springframework.security.access.AccessDeniedException: Access is denied錯誤
在使用Spring Security時,我們通常會允許任何使用者可進入登入頁面(例如login.jsp
),所以通常對/login.jsp
的存取權限設定如下。
Windows 7 C槽空間快滿了
我的筆電C槽容量快不夠用了,明明沒裝什麼東西,但卻越來越肥。之前都透過Windows 7內建的磁碟清理工具來刪除不必要的暫存檔,但只能釋放一點點空間而已。
後來透過調整系統分頁檔,刪除hiberfil.sys休眠設定,調整系統保護功能使用的磁碟空間上限,刪除已建立的所有系統還原點,總算很有感的釋放了好幾GB的空間。
2018/3/19
Open JDK for Windows
今天在PTT Soft_Job板看到這篇關於Oracle JDK收費問題,有人提到有碰到被收費問題的公司全換成Zulu JDK。
→ nanashi07: 目前經歴過有被收費的公司,結果是全換 zulu jdk, 不 03/16 19:53→ nanashi07: 給古文賺 03/16 19:53
好奇查了一下,Zulu JDK其實也是基於Open JDK,也是可以免費使用不會有收費的問題,而且Windows有安裝檔裝起來似乎很容易(沒試過)。
不過主要還是開始擔心越來越少人使用Java,那我的工作總有一天會不保,或是跳不動了。是開始要多放點心力在第二語言上(Java的都還沒學透)。之前學了一點Node.js,但台灣用C# .NET Core得好像更多,要調查一下該往哪個技能樹點了。
Spring MVC 上傳檔案 java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided
Spring MVC上傳檔案碰到下面錯誤。
java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided
2018/3/15
Spring Security <form-login> 屬性 login-processing-url
Spring Security的配置元素<form-login>
的屬性login-processing-url
是用來設定登入表單的action
的登入路徑。
Spring MVC Controller搭配Spring Security @PreAuthorize
Spring MVC Controller的方法搭配Spring Security的@PreAuthorize
控管存取權限設定如下。
2018/3/14
Spring MVC RESTful API 整合Spring Security及JWT
本篇要介紹如何在Spring MVC整合Spring Security透過JWT機制來存取RESTful API。
2018/3/13
Spring Security 什麼是Credential
根據Authentication.getCredentials()
的說明,Credential(憑證)是指用來證明Principal身分的東西,通常是密碼(password)。
驗證(Authentication)與授權(Authorization)的區別
Authentication vs Authorization
Authentication和Authorization的區別如下。
Spring Security 什麼是Principal
Spring Security中常看到Principal這個字。Principle是指一個存取系統資源的實體(Entity),簡單來說就是登入的使用者。
2018/3/12
Spring Security No bean named 'springSecurityFilterChain' available 錯誤
如要透過xml配置檔來使用Spring Security,則第一步是在web.xml
加入下面的filter
2018/3/11
Spring MVC配置檔載入流程
今天突然對Spring MVC在web.xml
中DispatcherServlet
的<servlet-name>
和Spring MVC設定檔的名稱及位置是怎麼決定的,所以跑去看原始碼,下面是今天看了一整天大概了解的流程,在此紀錄一下。
但找了半天還是找不到contextConfigLocation
是在哪個地方被設定為Spring MVC配置檔的路徑?
2018/3/9
2018/3/8
Spring MVC @RestController與@Controller的區別
從Spring MVC 4.0的多了@RestController
,與傳統@Controller
的差別其實只是@RestController
等於@Controller
搭配@ResponseBody
。
Java StackOverFlowError的發生原因
當JVM(Java Virtual Machine)執行thread時所消耗的stack記憶體超過上限時,便會發生StackOverFlowError
錯誤。
2018/3/7
HTTP Basic 與 HTTP Digest 驗證的差別
HTTP Basic與HTTP Digest的差異在於,HTTP Basic在傳送憑證(credential)時僅是用Base64編碼(Base64 encoding)來傳送,而HTTP Digest是用MD5加密。
在Eclipse匯入專案時出現Some projects cannot be imported because they already exist in the workspace錯誤無法匯入
在Eclipse如果匯入(import)專案時出現
Some projects cannot be imported because they already exist in the workspace
而無法匯入專案時,代表該專案已經存在Eclipse中了,Eclipse發現新匯入的專案名稱與既有的重複所以無法匯入。
2018/3/6
2018/3/5
JUnit @BeforeClass, @Before, @Test, @After, @AfterClass 執行順序
JUnit 4的@BeforeClass
, @Before
, @Test
, @After
, @AfterClass
執行順序如下。
2018/3/4
JUnit 使用Test Suite來包裝多個Test Case
JUnit的Suite可用來組織你要執行的Test Case,例如有三個要被測試的類別分別為TestCaseA
,TestCaseB
,TestCaseC
,若要一次執行這三個Test Case,可利用Suite類別來達成。
什麼是單元測試(Unit Test)
單元測試(Unit Test)用來檢查一個獨立工作單位的行為,在Java應用程式中這個獨立的工作單位通常是一個方法(Method)。單元測試用來確認一個方法在接收特定的輸入後是否會得到預期的輸出。相對於單元測試,整合測試(Integration Test)是指檢查數個元件之間的互動。
2018/3/3
測試 什麼是SUT與DOC,什麼是Test Double
SUT(System Under Test) 是指測試目標,就是要被測試的對象。
DOC(Depended-on Component),指的是SUT所依賴的程式或物件。
2018/3/2
Eclipse STS 建立Spring Boot專案
使用Eclipse安裝STS plug-in來建立Spring Boot專案。或是你可以直接安裝Spring Tool Suite(STS) IDE來建立spring boot專案。
2018/3/1
2018/2/26
Java 設計模式 策略模式 Strategy Pattern
策略模式(Strategy Pattern)屬於設計模式中的行為模式(behavioral design pattern)。策略模式也稱作Policy Pattern。
2018/2/25
Java 什麼是GC (Garbage Collection)
GC是Garbage Collection(垃圾回收)/Garbage Collector(垃圾回收器)的簡稱,即JVM(Java Virtual Machine)的垃圾回收機制。
2018/2/24
Java 設計模式 單例模式 Singleton Pattern
Java設計模式的單例模式Singleton Pattern,屬於建構式模式(Creational Patterns)的一種,是常見也是面試時常考的基本設計模式之一。
2018/2/23
2018/2/22
2018/2/20
JUnit 4 assertEquals 比較兩個double值
JUnit 4 要比較兩個double值可使用assertEquals(double expected, double actual, double delta)
。
2018/2/13
2018/2/12
2018/2/8
JavaScript window.onload 和 jQuery $(document).ready() 的差異
在撰寫頁面的JavaScript或jQuery時,通常會利用window.onload
事件或$(document).ready()
事件來確保DOM完全載入,不過兩者仍有以下差異。
2018/2/7
2018/2/6
2018/2/1
2018/1/24
2018/1/18
2018/1/16
2018/1/14
Oracle 查詢相依物件
例如想知道某個TABLE有被哪些物件(PROCEDURE, PACKAGE, PACKAGE BODY, FUNCTION, TRIGGER, VIEW)使用到,可以查詢ALL_DEPENDENCIES
。
處理弱點掃描XSS問題request為json的做法
如果在jsp頁面傳遞request value時,通常會在EL語法套上<c:out value="${...}"/>
或${fn:escapeXml(...)}
來防止XSS攻擊的潛在風險,也就是把html的特殊符號(e.g.&
,<
,>
,"
,'
)取代成html代碼,但如果傳遞的request值為JSONObject就無法使用<c:out>
了,因為json中的雙引號為xml跳脫字元,會被取代成html code '
2018/1/4
2018/1/3
MySQL 無法修改欄位
如果你用MySQL Workbench或直接用語法修改資料表欄位時有無法修改的狀況,很可能是因為該欄位有外鍵限制(foreign key constraint)的存在,目前我的解決方法是先將外鍵限制移除,移除外鍵限制後即可修改欄位,修改完之後再將外鍵加回去。
2018/1/2
2018/1/1
關閉 Eclipse 對HTML5 標籤的警告
我使用的Eclipse版本為 Mars(4.5.0),但Eclipse認不得HTML 5的新標籤例如<main>
並出現Unknown tag name
的警告,雖然對執行沒有影響但很礙眼,所以要把警告關閉。