Posts

[Java] รู้จัก Spring Boot ฉบับมือใหม่

Image
Spring Boot หน้าที่หลักๆ คือจัดเตรียมโปรเจคให้เรามี library ที่เกี่ยวข้องอย่างครบครัน และมี embedded application server ติดมาให้ เป็นประโยชน์ในการ test มากๆๆ

Spring Initializr เหมาะสำหรับผู้เริ่มต้นโปรเจค Spring Boot เป็นเว็บไซต์ที่จะช่วยสร้างโปรเจคอย่างง่ายขึ้นมา โดยจะต้อง download มาเป็น *.zip หรือในบาง editor ก็สามารถสร้างโปรเจคในลักษณะเดียวกันได้เลย(ไม่ต้องผ่านเว็บก็ได้) ในเคสนี้ผมลองสร้างผ่านเว็บครับ เอาแบบ clean สุดๆ ไม่ได้ใส่อะไรเพิ่มเลยนะครับ


โหลดมาแล้วจะเห็นว่าเป็น maven project ตามที่ได้เลือกไว้ และนี่คือสิ่งที่ maven dependency ดูดมาให้เรา
mvn dependency:tree[INFO] --- maven-dependency-plugin:3.0.1:tree (default-cli) @ SpringBoot2Tutorial --- [INFO] th.in.lordgift:SpringBoot2Tutorial:jar:0.0.1-SNAPSHOT [INFO] +- org.springframework.boot:spring-boot-starter:jar:2.0.0.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot:jar:2.0.0.RELEASE:compile [INFO] | | \- org.springframework:spring-context:jar:5.0.4.RELEASE:compile [INFO] | | +- org.springframe…

วิธีทำ Push Notification (No Code)

Image
Push Notification           Push Notification หรือ การแจ้งเตือน คือ การที่แอปพลิเคชันสามารถรับข้อมูลจาก server และนำมาแสดงในรูปแบบที่ระบบปฏิบัติการกำหนด (OS) ตัวอย่างที่ยกมาได้ชัดที่สุดคงหนีไม่พ้น โปรแกรมแชท ต่างๆ ของเครื่องเรานี่แหละครับ

เมื่อเราส่งข้อความไปหาเพื่อน
          สิ่งที่คนทั่วไปเข้าใจ...

          สิ่งที่ developer ควรรู้

          จะเห็นว่า จริงๆ แล้ว mobile จะต้องเรียกไปที่ server เพื่อให้ server เป็นตัวจัดการข้อมูลก่อน จากนั้นก็ส่งของไปให้ push server เป็นตัวจัดการส่งไปที่เครื่องปลายทาง ซึ่งส่วนที่คือการ Push จริงๆ คือหลังจาก process ที่ server ของเราเป็นต้นไป

          ลองมาดูขั้นการทำ Push Notification แบบ step-by-step กัน


Register device - อุปกรณ์จะต้องลงทะเบียนไปยัง Cloud Messaging Server* ก่อนGet Messaging Token - เมื่อลงทะเบียนสำเร็จจะได้ token ประจำตัวมา ซึ่งมีค่าไม่ซ้ำกับอุปกรณ์ตัวอื่น (แต่ก็มีโอกาสที่ token จะเปลี่ยนค่าได้)Store Messaging Token - เมื่ออุปกรณ์ได้ token มาแล้ว เราจำเป็นจะต้องส่งไปเก็บไว้ที่ server ของเราด้วย Send message to device(s) - ส่วนนี้ …

[Java] สร้าง Hibernate Entity ด้วยวิธี Reverse Engineering ผ่าน Maven

การสร้าง Hibernate Entity ผ่าน Eclipse (สร้าง Hibernate Entity ด้วยวิธี Reverse Engineering) นั้นอาจจะดูยุ่งยาก เพราะมีขั้นตอนค่อนข้างเยอะ อีกทั้งยังไม่สามารถ share code ร่วมกัน หรือจะเก็บไว้ใช้ในโปรเจคอื่นก็ลำบาก โพสนี้ผมจะมาแชร์วิธีการที่สะดวกมากขึ้น เพราะเราจะ generated Entity ด้วย maven กัน

          Maven ไม่ได้เป็นแค่ dependency สำหรับ library เท่านั้น แต่ยังมี dependency ประเภท plugin ทำให้เพิ่มความสามารถของ maven เข้าไปอีก(Maven Plugin) เช่น เราสามารถดึง application server มาใช้ทดสอบโดยไม่ต้องโหลดมาติดตั้งแยก (Wildfly Maven Plugin) หรือ เราจะทำ war file ที่มี configuration สำหรับ production แบบพร้อมใช้งาน (Maven WAR Plugin) เป็นต้น

          สำหรับโพสนี้เราจะมาใช้ Maven AntRun Plugin สำหรับ generate Hibernate Entity แบบ pure code กัน ไม่ต้องยุ่งกับเครื่องมือของ editor อะไรอีก และได้ใช้ความสามารถของ Hibernate Reverse Engineering ด้วย ทีนี้เราก็สามารถส่งต่อ config ไปใช้กันภายในทีม หรือจะเผื่อใช้ในโปรเจคอนาคตก็ได้เช่นกัน

ก่อนจะเริ่มทำตามตัวอย่าง อยากให้แน่ใจก่อนว่ารู้จั…

[Java] สร้าง Hibernate Entity ด้วยวิธี Reverse Engineering

Image
Hibernate ประกอบด้วยหลายส่วน ซึ่งผมได้เขียนไว้แล้วก่อนหน้านี้ (รู้จัก OR-Mapping และ Hibernate เบื้องต้น) ในโพสนี้เราจะมาสร้าง ORM ภาคปฏิบัติกัน **คำเตือน ภาพประกอบเยอะมาก**

          การ mapping ระหว่าง database กับ class นั้น เรารู้แล้วว่า Entity Class เป็นตัวกลางที่ตอบโจทย์การใช้งาน การที่เราจะสร้าง Entity Class ได้นั้น เราต้องรู้โครงสร้าง database ก่อน ซึ่งเราสามารถตั้งค่า connection และ generated Entity Class โดยอัตโนมัติได้ โดยวิธีการดังกล่าวเรียกว่าวิธีการทำ..

"Hibernate Reverse Engineering"
          Hibernate Reverse Engineering ยังมีหัวใจสำคัญอีกอย่างหนึ่งคือ การทำ Type Mapping เพื่อกำหนดว่าถ้าเจอ Database data type ต้องแปลงเป็น Java data type อะไร

Eclipse ยังคงเป็น editor ที่มีเครื่องมือในการสร้าง Hibernate Entity Class ที่ดีตัวหนึ่งอยู่ ถึงแม้ว่าตอนนี้ผมแทบจะหนีไปใช้ editor จากค่าย  JetBrains ถึงแม้ว่า IntelliJ IDEA สามารถสร้าง Entity Class ได้เช่นกัน แต่ปัญหาคือ Mapped Type จะถูกกำหนดไว้แล้ว (default) ซึ่งบางครั้งเราอาจไม่ได้ต้องการ type ข้างต…

[Java] รู้จัก OR-Mapping และ Hibernate เบื้องต้น

Image
Hibernate คือ Java library ที่เพิ่มความสะดวกสะบายในการใช้งาน database เป็นอย่างมาก เป็นที่รู้จักของ Java Developer เป็นอย่างดี อีกทั้งมี community กว้างขวางมาก ๆ แบบไม่ต้องกลัวว่าถ้าติดปัญหาจะถูกทิ้งให้โดดเดี่ยวเดียวดายกันเลย

     ORM           หรือ OR-Mapping หรือชื่อเต็มๆก็คือ Object-Relational Mapping เป็นเทคนิคการใช้ฐานข้อมูลผ่าน Object แทนการใช้ SQL ซึ่งเพิ่มความสะดวกมาก ๆ ให้เหล่าโปรแกรมเมอร์ ซึ่งบางคนก็เรียก Entity บางคนก็เรียก DTO (Data Transfer Object) สุดแล้วแต่ถนัดเลยครับ

          ปกติแล้วการใช้งาน Relational Database เราจะต้องรู้จัก TABLE, COLUMN เป็นคำคุ้นหูอยู่แล้ว ซึ่งแน่นอนว่า Class ที่จะนำมาใช้เป็นตัวแทนฐานข้อมูลนั้น ก็มีความใกล้เคียงกันด้วย (พื้นฐาน ต้องอย่าทิ้ง)

Relational DatabaseJava ClassTableClassColumnAttribute
ลองมาดูตัวอย่างเต็ม ๆ กัน

จากตัวอย่าง ผมตั้งข้อสังเกตให้ 3 อย่าง คือ
TABLE, COLUMN จะถูก mapping เข้ากับ class, attribute ผ่าน annotation data type มีความหมายอย่างเดียวกันแต่ไม่ใช่ตัวเดียวกันความสัมพันธ์ของ TABLE ถูกจัดให้เป็น attribute ที่มี data type ข…

[Java] การนำ jar file library มาใช้กับ Maven Project

Image
Dependency ทำให้เราสามารถใช้งาน source code จาก repository ได้ ทำให้ชีวิตโปรแกรมเมอร์อย่างเรา ๆ สะดวกสะบายพอสมควร อีกทั้งยังสามารถ share dependency ให้ทีมสามารถใช้งานได้เหมือนกัน

          แต่ !! โลกก็ไม่ได้สวยงามเสมอไป บางทีโปรเจคเก่า ๆ ที่เป็นแบบ editor based ก็อาจทำร้ายเราได้ โดยเฉพาะ library ที่ทำกันขึ้นมาเอง (*.jar) ซึ่งไม่ได้ download มาจาก dependency ทำให้เมื่อมีคนใหม่เข้ามาในทีมก็อาจเสียเวลา setup กันอีก แทนที่จะเปิดขึ้นมาแล้วสามารถเริ่มทำงานได้เลย


วิธีการที่ผมใช้และคิดว่ามัน work สุดคือ การทำ local repository ในโปรเจคซะเลย
อันดับแรก เอา *.jar ไฟล์มาทำให้เป็น maven based ซะก่อนmvn install:install-file -Dfile=mylib1.0.jar -DgroupId=th.in.lordgift -DartifactId=MyLib -Dversion=1.0 -Dpackaging=jar -DlocalRepositoryPath=local-libsfile - ระบุ *.jar ของเรา ไม่จำเป็นต้องอยู่ในโปรเจคlocalRepositoryPath - ระบุ directory ปลายทางที่ต้องการให้เป็น local repository (ในโปรเจค)groupId, artifactId, version - เป็นค่าที่กำหนดเอง สามารถใส่อะไรก็ได้ แต่ควรตั้งตามรูปแบบของ mav…

[Java] รู้จัก Maven ให้มากขึ้น เพื่อก้าวสู่ java professional

Image
ถึงวันนี้คงไม่มี java dev คนไหนไม่ยอมใช้ maven กันอีกแล้ว แต่คงต้องอธิบายกันหน่อยเผื่อบางท่านมาจากภาษาอื่น ไม่ว่ากันครับ :D
maven คือ ??           maven เป็นbuild tool ที่มีคลัง java source code หรือเรียกอีกอย่างว่า dependency เป็นของตัวเองอย่าง maven repository (https://mvnrepository.com/) ซึ่งประกอบด้วย library, plugin, archetype ให้เลือกใช้มากมาย ซึ่ง editor ส่วนใหญ่ก็รองรับกันอยู่แล้ว บางตัวก็มีติดมาในตัวเลย ไม่ต้องติดตั้ง maven เองเพิ่ม แต่ผมก็แนะนำให้ download แยกต่างหากนะ

ตัวอย่างโครงสร้าง maven project บน IntelliJ IDEA
          pom.xml คือ ส่วนสำคัญที่สุดของ maven project เราจะต้องระบุการเรียกใช้งาน dependency, plugin จะถูกเขียนไว้ที่ไฟล์นี้ ในรูปแบบ xml

ตัวอย่าง pom.xml
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <…

Facebook Comment