สร้างแพลตฟอร์ม MyBatis+PostgreSQL ตั้งแต่เริ่มต้น
เมื่อเร็ว ๆ นี้ฐานข้อมูลของโครงการใช้ PostgreSQL เพื่อใช้งานข้อมูลโดยใช้ MyBatis ดั้งเดิม ไม่มีอะไรผิดปกติกับ mybatis ดั้งเดิม อย่างไรก็ตามมีเครื่องมือ Tk.mybatis ในประเทศจีนที่ช่วยให้เราทำสิ่งต่าง ๆ มากมาย ในกรณีส่วนใหญ่เราจำเป็นต้องดำเนินการกับ mybatis ดั้งเดิม มันได้รับการดำเนินการอย่างดี บทความนี้จะแบ่งปันขั้นตอนโดยละเอียดสำหรับการติดตั้ง postgreSQL การกำหนดค่า tk.mybatis และปัญหาเล็กน้อยบางอย่างที่อาจพบในกระบวนการนี้
ติดตั้ง postgreSql, เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้ง: คัดลอกรหัสดังนี้: apt-get update && apt-get ติดตั้ง postgreSql
หลังจากติดตั้งเซิร์ฟเวอร์แล้วเรายังต้องใช้ PDAdmin ไคลเอนต์พร้อมอินเทอร์เฟซกราฟิก ฉันติดตั้ง PostgreSQL เวอร์ชัน Windows และคุณสามารถค้นหาเวอร์ชันที่เกี่ยวข้องได้ที่ที่อยู่นี้ หลังจากการติดตั้งสำเร็จผู้ใช้ระบบและผู้ใช้ฐานข้อมูลจะถูกสร้างขึ้นตามค่าเริ่มต้น ชื่อและรหัสผ่านเป็น postgres ทั้งหมด เราสามารถสร้างผู้ใช้ใหม่หรือใช้บัญชีนี้โดยตรง อย่างไรก็ตามฉันเป็นแค่การทดสอบ หลังจากการติดตั้งเสร็จสมบูรณ์คุณอาจพบปัญหาการเข้าถึงระยะไกล:
ปัญหาการเชื่อมต่อระยะไกลอนุญาตเฉพาะการเชื่อมต่อในพื้นที่โดยค่าเริ่มต้น เพื่อให้ลูกค้าอื่นสามารถเชื่อมต่อได้เราสามารถแก้ไขไฟล์การกำหนดค่าได้ ไดเรกทอรีของไฟล์นี้อยู่ใน /etc/postgresql/9.5/main มีสองไฟล์ในไดเรกทอรีนี้:
1: postgreSql.conf นี่คือที่เกี่ยวข้องกับเซิร์ฟเวอร์และมีที่อยู่ LISHY_ADDRESS ซึ่งฟังเป็นค่าเริ่มต้นโดยค่าเริ่มต้นและเราสามารถแก้ไขได้
2: pg_hba.cof ซึ่งเกี่ยวข้องกับการอนุญาตผู้ใช้มีการกำหนดค่าที่เกี่ยวข้องกับการเชื่อมต่อซึ่งสามารถกำหนดค่าได้ในโหมดเกตเวย์
หลังจากการเชื่อมต่อที่ประสบความสำเร็จมันอาจเป็นเช่นนี้เราสามารถสร้างฐานข้อมูลตารางและวัตถุอื่น ๆ
เครื่องกำเนิดรหัส MyBatis การแมปของฐานข้อมูลและรุ่นงานเชิงกลดังกล่าวควรถูกทิ้งไว้ให้กับเครื่องเพื่อให้เสร็จสมบูรณ์ โปรดดูรายละเอียดที่นี่
General Mapper การดำเนินการ CRUD ตารางเดียวสามารถสรุปส่วนต่อประสานสาธารณะและ Mapper ทั่วไปที่จัดทำโดย Tk.Mybatis สามารถช่วยเราแก้ปัญหาประเภทนี้ได้
---- mapper.xml เล็กพอ (รวมถึงแผนที่ฟิลด์เท่านั้น)
<mapper namespace = "com.jim.logstashmvc.dao.generated.mapper.productmapper"> <resultmap id = "baseresultmap" type = "com.jim.logstashmvc.dao.enerated.entity.product" jdBcType = "bigint" property = "id" /> <result column = "name" jdbcType = "varchar" property = "name" /> < /resultmap> < /mapper>
---- Mapper ง่ายพอ (เพียงแค่สืบทอดมาจากอินเตอร์เฟส Mapper)
การคัดลอกรหัสมีดังนี้: ส่วนต่อประสานสาธารณะ ProductMapper ขยาย Mapper <Product> {}
ปลั๊กอินนี่คือปลั๊กอินเพจเพจ, ปลั๊กอินการวิเคราะห์ประสิทธิภาพ SQL ฯลฯ มันง่ายมากที่จะรวมเข้ากับ mybatis
จะรวมเข้ากับฤดูใบไม้ผลิได้อย่างไร?
การรวมตัวของเครื่องกำเนิดไฟฟ้าคุณสามารถใช้วิธี Maven เพื่อเรียกใช้ตัวสร้างรหัส
ขึ้นอยู่กับแพ็คเกจ
<!-mybatis-> <การพึ่งพา> <roupId> org.mybatis </groupId> <ratifactid> mybatis </artifactid> <cersion> $ {mybatis.version} </senture> </การพึ่งพา> <! <ArtIfactId> MyBatis-SPRING </artifactId> <persion> $ {mybatis.spring.version} </เวอร์ชัน> </การพึ่งพาอาศัยกัน> <!-mbg-> <การพึ่งพา> <Groupid> org.mybatis.generator </groupid> <cersion> $ {mbg.version} </version> <pope> Compile </cope> <pontrail> True </onftional> </การพึ่งพาอาศัย> <!-pagination-> <การพึ่งพา> <loupid> com.github.pagehelper </groupid> <ratifactid> pageHelper <!-Mapper ทั่วไป-> <การพึ่งพา> <roupId> tk.mybatis </groupId> <ratifactId> Mapper </artifactid> <sersion> $ {mapper.version} </version> </derment> <! <ArtIfactId> การคงอยู่-API </artifactId> <cersion> 1.0 </Servent> </การพึ่งพา> <การพึ่งพา> <roupId> org.postgresql </groupId> <ratifactId> postgreSQL </artifactId> <version> 9.3-1102-JDBC41ปลั๊กอินตัวสร้างการกำหนดค่าระบุเส้นทางไฟล์การกำหนดค่าการพึ่งพาการกำหนดค่า: หนึ่งคือไดรเวอร์ฐานข้อมูลและอีกอันคือ Mapper ทั่วไป
<!-mbg-> <plugin> <roupid> org.mybatis.generator </groupid> <ratifactid> mybatis-generator-maven-plugin </artifactid> <cersion> $ {mbg.version} <ConfigurationFile> $ {achedir} /src/main/resources/generator/generatorconfig.xml </configurationFile> <Overwrite> True </Overwrite> <ervose> True </verbose> <ArtIfactId> PostgreSQL </artifactId> <sersion> 9.3-1102-JDBC41 </เวอร์ชัน> </การพึ่งพา> <การพึ่งพาอาศัย> <roupId> tk.mybatis </groupid> <ratifactid> mapper </artifactid>ไฟล์การกำหนดค่าเครื่องกำเนิดไฟฟ้า
** กำหนดค่าการเชื่อมต่อฐานข้อมูล
** กำหนดค่าเส้นทางการจัดเก็บของรุ่นที่สร้างขึ้น mapper และ mapper.xml
** กำหนดค่าข้อมูลตารางที่จะสร้าง
หมายเหตุ TargetRuntime นี่คือ MyBatis3Simple และตัวเลือกเริ่มต้นคือ MyBatis3 หากเราใช้ Mapper ทั่วไปเราสามารถเขียนสิ่งนี้ได้เมื่อสแกนอินเทอร์เฟซในฤดูใบไม้ผลิ
คัดลอกรหัสดังต่อไปนี้: <Bean> <property name = "SQLSessionFactoryBeanName" value = "JIMSQLSessionFactory"/> <property name = "basePackage" value = "com.jim.logstashmvc.dao.enerated.mapper"/>
หากเป็น MyBatis3 รูปแบบ mapper.xml ที่สร้างขึ้นจะซับซ้อนกว่ามาก ฉันเคยพบปัญหานี้มาก่อน: ใช้ mapper.xml ที่สร้างโดย MyBatis3 จากนั้นกำหนดค่า MappersCannerConfigurer อย่างไม่ถูกต้องเป็นโหมด Mapper ทั่วไปต่อไปนี้ซึ่งแจ้งให้ฉันทราบดังนี้ เหตุผลสามารถพิจารณาได้ว่าเป็นปัญหาการกำหนดค่า (ไม่ใช่ ID ซ้ำใน mapper.xml) ฉันจะศึกษาการกำหนดค่าของ Mapper ที่ไม่ใช่ Generic ในภายหลัง
คัดลอกรหัสดังต่อไปนี้: เกิดจาก: java.lang.illegalargumentException: คอลเลกชันคำสั่งที่แมปแล้วมีค่าสำหรับ com.jim.logstashmvc.dao.generated.mapper.productmapper.selectByexampleat org.apache.ibatis.session.session org.apache.ibatis.session.configuration $ rightmap.put (configuration.java:809)
การกำหนดค่าของเครื่องกำเนิดไฟฟ้ามีดังนี้:
คัดลอกรหัสดังต่อไปนี้: <seneratorConfiguration> <properties resource = "config.properties"/> <context targetRuntime = "myBatis3Simple" defaultModelType = "flat"> <property name = "เริ่มต้น <property name = "mappers" value = "$ {mapper.mapper}"/> </plugin> <jdbcconnection driverclass = "$ {jdbc.driverclass}" connectionUrl = "$ {jdbc.url}" userid = "$ {jdbc.username <javamodelGenerator targetPackage = "$ {targetModelPackage}" targetProject = "$ {targetJavaproject}"/> <sqlmapgenerator targetPackage = "maperater" เป้าหมาย {targetResourcesProject} " targetProject = "$ {targetJavaproject}" type = "xmlmapper"> </javaclientGenerator> <table tablename = "ผลิตภัณฑ์" domainObjectName = "ผลิตภัณฑ์"> </table> </บริบท>
การรวม MyBatis ส่วนใหญ่กำหนดค่าข้อมูลพูลการเชื่อมต่อปลั๊กอินการสแกน Mapper และข้อมูลอื่น ๆ
<bean id = "jimdataSource"> <property name = "driverclassName" value = "$ {jdbc.driverclass}"/> <property name = "url" value = "$ {jdbc.url}"/> <property name = "username" value = "$ {jdbc. value = "$ {jdbc.password}"/> <property name = "ค่าเริ่มต้น" value = "5"/> <property name = "minidle" value = "10"/> <name property = "MaxWait" value = "60000"/> value = "3600000"/> <property name = "validationQuery" value = "เลือก 1"/> <property name = "testharyIdle" value = "true"/> <property name = "testonBorrow" value = "false"/> <property name = "testonBorrow" value = "false"/> <property name = "dataSource" ref = "jimdatasource"/> <property name = "mapperlocations" value = "classpath: mapper/*. xml"/> <property name = "typealiasespackage" value = "com.jim.logstashmvc.dao.enerated.entity" <value> Dialect = PostgreSql onditable = True SupportMethodSarGuments = True returnPageInfo = ตรวจสอบ params = count = countsql </value> </property> </ebean> </array> </porement> </ebean> <bean> value = "com.jim.logstashmvc.dao.generated.mapper"/> </ebean>การใช้งานของผู้ทำแผนที่ทั่วไป:
• Mapper, mappers ที่สร้างขึ้นทั้งหมดได้รับการสืบทอดมาจาก Mapper <t> และถืออินเทอร์เฟซทั้งหมดของ Mapper ทั่วไปโดยค่าเริ่มต้นรวมถึงการดำเนินการ CRUD ทั่วไป
• Iservice คำจำกัดความของอินเทอร์เฟซ Mapper ทั่วไปเราสามารถแก้ไขอินเทอร์เฟซนี้ได้ตามธุรกิจของเราเอง
@ServicePublic อินเตอร์เฟส iservice <t> {t selectByKey (คีย์วัตถุ); int save (t entity); int delete (คีย์วัตถุ); int updateAll (t entity); int updatenotnull (t เอนทิตี); รายการ <t> selectByExample (ตัวอย่างวัตถุ); // todo อื่น ๆ ... }Baseservice คลาสการใช้งานของ Mapper ทั่วไป
Public Public Class Baseservice <T> ใช้ iservice <t> {@autowired Mapper ที่ได้รับการป้องกัน <T> Mapper; Mapper สาธารณะ <T> getMapper () {return mapper; } @Override สาธารณะ t selectByKey (คีย์วัตถุ) {return mapper.selectByPrimaryKey (คีย์); } public int save (t entity) {return mapper.insert (เอนทิตี); } public int delete (คีย์วัตถุ) {return mapper.deleteByPrimaryKey (คีย์); } public int updateAll (t entity) {return mapper.updateByPrimaryKey (เอนทิตี); } public int updatenotnull (t entity) {return mapper.updateByPrimaryKeySelective (เอนทิตี); } รายการสาธารณะ <t> selectByExample (ตัวอย่างวัตถุ) {return mapper.selectByexample (ตัวอย่าง); } // todo อื่น ๆ ... }หมวดบริการเฉพาะ
@ServicePublic Class ProductserviceImpl ขยาย Baseservice <Product> ดำเนินการ Productservice {@Override รายการสาธารณะ <Product> SelectByProduct (ผลิตภัณฑ์ผลิตภัณฑ์, หน้า int, แถว int) {ตัวอย่างตัวอย่าง = ตัวอย่างใหม่ (product.class); ตัวอย่างเกณฑ์เกณฑ์ = example.createCriteria (); if (! stringutils.isblank (product.getName ())) {criteria.andequalto ("ชื่อ", product.getName ()); } if (product.getId ()! = null) {criteria.andequalto ("id", product.getId ()); } pageHelper.startPage (หน้าแถว); ส่งคืน selectByExample (ตัวอย่าง); -ติดตั้ง PostgreSQL และเชื่อมต่อจากระยะไกลอย่างประสบความสำเร็จรวม MBG เพื่อสร้าง MAPPER และรุ่นจากนั้นรวม MyBatis เข้ากับฤดูใบไม้ผลิและในที่สุดก็เชื่อมต่อผ่าน Mapper ทั่วไปเพื่อให้บรรลุเป้าหมายของเรา แต่ General Mapper มีข้อดีและข้อเสียและจำเป็นต้องมีความสมดุลตามสภาพแวดล้อมของโครงการ โดยส่วนตัวแล้วฉันรู้สึกว่าผลประโยชน์นั้นมีค่ามากกว่าข้อเสีย
อ้างถึงโดยบทความนี้:
1. http://www.mybatis.tk/
2. https://github.com/abel533/mybatis-spring
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น