Spring Boot adalah hal baru bagi saya. Selama proses belajar saya, saya menemukan bahwa hal ini masih mudah untuk memulai. Ketika Spring Boot tidak dikonfigurasi, itu akan menggunakan Spring Data JPA secara default. Hal ini dapat dikatakan sebagai alat yang sangat sederhana, tetapi saya masih lebih suka menggunakan mybatis. Tidak ada alat terbaik, hanya ini yang cocok untuk saya.
Berbicara tentang mybatis, ada alat yang sangat berguna baru -baru ini - Mybatis -plus (situs web resmi). Versi yang diperbarui sekarang 2.1.2, dan versi ini juga digunakan di sini. Fitur favorit saya adalah generator kode dan konstruktor bersyarat, sehingga dapat dikembangkan dengan lebih mudah.
Ada contoh boot musim semi di situs web resmi MyBatisplus. Saya mengikutinya dan programnya tidak berjalan. Kemudian saya mengetahui bahwa database H2 yang digunakan oleh demo tidak sama dengan MySQL. Jadi, jika Anda ingin mengintegrasikan MyBatisplus, Anda tidak dapat melihat situs web resmi dan menghindari jalan memutar.
Berikut ini adalah proses integrasi
1. Pertama, Anda perlu mendapatkan semua file jar yang diperlukan. Hal -hal yang Anda butuhkan untuk pom.xml adalah sebagai berikut
pom.xml (tidak lengkap)
<!-Mybatis-plus Begin-> <dependency> <GroupId> com.baomidou </groupid> <ArtiFacTid> mybatisplus-spring-boot-starter </sartifactid> <version> 1.0.4 </version> </grupplency> <Arpendency> <groupid> com.baomidoU </Version> </dendorppl> <Arpendency> <grouppid> Com.baomidoUp <version>2.1.2</version></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- mybatis-plus end --><!-- druid Alibaba database connection pool--><dependency> <GroupId> com.alibaba </sroupid> <ArTifactId> druid </artifactid> <version> 1.1.3 </version> </dependency> <!-mysql-> <dependency> </Articid </ArtiFacTid> <TiFacTID> MySQL-Connector-java </Articlency> <ArTifacTID> <GroupId> org.mybatis.spring.boot </groupId> <ArTifactId> mybatis-spring-boot-starter </artifactid> <version> 1.3.1 </version> </dependency>
2. Tambahkan konfigurasi terkait MyBatis, seperti akun, kata sandi, dll. Di sini saya menggunakan Application.yml untuk mencocokkan.
application.yml
server: port: 8080#springspring: devtools: restart: enabled: true #This is for hot deployment, and it is not related to mybatis#DATABASE CONFIG datasource: driver-class-name: com.mysql.jdbc.Driver username: root password: root url: JDBC: mysql: // mysqldb: 3306/tdx_shop? UseUnicode = true & characterencoding = UTF-8 Tipe: com.alibaba.druid.pool.druiddataSource #Shere sedang mengonfigurasi kumpulan koneksi druid. Berikut ini adalah semua informasi konfigurasi untuk filter druid: stat, dinding, log4j maxactive: 20 Inisial: 1 maxwait: 60000 minidle: 1 timebetweenevictionrunsmillis: 60000 minevictableidleTimeMillis: 300000 validationQuery: select 'x' testwhileidle: true testonborrow: false tes: false testnements: falsePrearements: soil 'x' testwhileidle: true testonborrow: false testalparement: false testnements: falsePretErEDLEPREARTEPSURNES: FALSE TESTREARDLE: TESTONBORREDLE: FALSE TESTONBORRING: FALSE TESTREPREARDE: MAXOPENPREPEDSTATEMENTS: 20 Koneksi-Properti: druid.stat.merggsql = Ture; druid.stat.slowsqlmillis = 5000 #mybatismybatis: mapper-locations: classpath*:/mapper/** mapper.xml #put file xml di com. Berikut ini adalah mapper di bawah pemindaian #Entity Resource, beberapa paket dipisahkan oleh koma atau titik koma. TypealiSespackage: com.tdx.account_service.entity #Ini adalah lokasi Konfigurasi Kelas Entitas: peta-disterscore-to-camel-case: True Cache-Enabled: False #LoggingLogging: Level: Warn
Barang konfigurasi mirip dengan apa yang kami gunakan untuk mengkonfigurasi dengan MyBatis, tetapi Spring Boot tidak memiliki file konfigurasi XML. Perhatikan isi surat merah, pada dasarnya tidak ada masalah.
3. File konfigurasi mybatis-plus ------ mybatisplusconfig. Pertama, mari kita jelaskan jalur file pada gambar di atas. Di antara mereka, MyBatisplusConfig ditempatkan di folder konfigurasi, sedangkan file XML ditempatkan di mapper di bawah resues.
Lalu ada bagian konten mybatisplusconfig
Mybatisproperties.java
Paket com.tdx.account_service.config; import com.alibaba.druid.pool.druiddataSource; import com.alibaba.druid.support.http.statviewservlet; import com.alibaba.druid.support.htp.webston; com.baomidou.mybatisplus.mybatisconfiguration; impor com.baomidou.mybatisplus.mybatisconfiguration; impor com.baomidou.mybatisplus.entity.globalconfiguration; impor com.baoMidou.mybateSplus. com.baomidou.mybatisplus.plugins.paginationInterceptor; import com.baomidou.mybatisplus.plugins.performanceinterceptor; import com.baomidou.mybatisplus.plugins.parser.isqlparser; impor com.baomidou.mybatisplus.plugins.parser.isqlparserfilter; impor com.baomidou.mybatisplus.plugins.parser.tenant.tenanthandler; impor com.baomidou.mybatisplus.plugins.parser.tenant.boomidou.mybatisplus.plugins.parser.tenant.tenant com.baomidou.mybatisplus.spring.mybatissqlSessionfactorybean; impor com.baomidou.mybatisplus.spring.boot.starter.springbootvfs; import com.baomidou.mybatislus.toolkit.toolkit.toolkit.toolkit net.sf.jsqlparser.expression.Expression; impor net.sf.jsqlparser.expression.longValue; impor org.apache.ibatis.mapping.databaseidprovider; import org.apache.ibatis.mapping.mappedstatement; import org.apache.ibatis.mapping.mappedstatement; import org.apache.apache.ibatis.mapping.mappedstatement; import org.apache.apache.ibatis.mapping org.apache.ibatis.reflection.metaObject; impor org.mybatis.spring.annotation.mapperscan; org.mybatis.spring.boot.autoconfigure.mybatisproperties; impor org.springframework.beansfacory.beansfactory. org.springframework.boot.bind.relaxedPropertyRySolver; impor org.springframework.boot.context.properties.enableConfigurationProperties; impor org.springframework.boot.web.servlet.filterregistrationBean; org.springframework.boot.web.servlet.servletregistrationBean; impor org.springframework.context.annotation.bean; impor org.springframework.context.annotation.configuration; impor org.springframework.core.env.env.convent; Konfigurasi; org.springframework.core.env.vent. org.springframework.core.io.defaultresourceloader; impor org.springframework.core.io.resourceloader; impor org.springframework.util.objectutils; impor org.springframework.util.util.stringutils; impor javax.soRascl; ordatas; oVaxl; oVax. java.sql.sqlexception; import java.util.arraylist; impor java.util.list;/** * Kode jauh dari bug dengan pelindung hewan * ┏┓ ┏┓ ┏┓ ┏┛━━━━━┛┻┓ ┏┛━━━━━┛┻┓ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ * * ┃ ┃ ┃ Bless of the Beast * ┃ ┃ ┃ ┃ ┃ ┃ ┗┓ ┏┛ ┏┛ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ * ┃ ┗━━━┓ * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ * ┃┫┫ ┃┫┫ * ┗┻┛ ┗┻┛ * * @description: MyBaTisplus Configuration * ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private RelaxedPropertyRyolver Propertiesolver; @Autowired Private DataSource DataSource; @Autowired Private MyBatisProperties Properties; @Autowired Private Resourceloader Resourceloader = New DeFaultresourceloader (); @Autowired (wajib = false) Private Interceptor [] Interceptor; @Autowired (wajib = false) databaseidprovider databaseidprovider; /** * @description: plug-in efisiensi eksekusi mybatis-plus SQL [dapat ditutup di lingkungan produksi] * ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ @Bean Public DataSource DruidDataSource () melempar SQLException {this.propertyRyRyLver = new RelaksedPropertyRyolver (lingkungan, "spring.datasource."); System.out.println ("============================================================================================================================================== =========================================================================================================================================== ============================================================================================================================================= =========================================================================================================================================== DataSource.setUrl (Propertiesolver.getProperty ("URL"); DataSource.SetPassword (Propertiesolver.getProperty ("kata sandi")); DataSource.SetMaxwait (Long.ValueOf (Propertiesolver.getProperty ("Max-Wait"))); DataSource.setMinEvictableIndleTimemillis (Long.ValueOf (Propertiesolver.getProperty ("Min-Idle-Time-Millis")); } /*** @description: plugin pagination mybatis-plus* ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- PaginationInceptor PaginationInterceptor () {PaginationInterceptor Page = PaginationInterceptor baru (); mybatissqlSessionFactoryBean () {mybatissqlSessionFactoryBean mybatisplus = mybatissqlSessionFactoryBean baru (); (Stringutils.hastext (this.properties.getConfigLocation ())) {mybatisplus.setConfigLocation (this.resourceloader.getResource (this.properties.getConfigLocation ())); (! Increment sendiri ") Input->` 1` (ID Input Pengguna ") ID_WORKER->` 2` ("ID Global Unik") UUID-> `3` (" ID Global Unik ") Global Config.setidType (2); mc.setDefaultScriptingLanguage (mybatisxmluagedriver.class); (Stringutils.haslength (this.properties.gettypealiSespackage ()))) {mybatisplus.settypealiSespackage (this.properties.gettypealiSespackage ()); } if (stringutils.haslength (this.properties.gettypealiSeSpackage ());} if (stringutils.haslength (this.properties.gettypehandlerspackage ()) {mybatisplus.settypehandlerspackage (this.properties.groperties.gpackandus. (! Objectils.isempty (this.properties.resolvemapperlocations ())) {mybatisplus.setmapperlocations (this.properties.resolvemapperLocations ()); Druidstatviewservle () {//org.springframework.boot.context.embedded.servletregistrationBean menyediakan kelas untuk pendaftaran. ServletregistrationBean.addinitparameter ("Izinkan", "127.0.0.1"); Kata sandi akun. * One: FilterRegistrationBean * * @Return */@Bean Filter registrasibean druidstatfilter () {filterregistrationBean filterregistrationBean = filterregistrationBean baru (noingfilter (); filterregistrationBean.addinitparameter ("pengecualian", "*. JS,*. GIF,*. JPG,*.Berikut adalah file konfigurasi lengkap. Penting untuk dicatat bahwa paket yang diperkenalkan tidak salah!
4. Anda juga perlu mengaktifkan pemindaian DAO. Itu sangat sederhana. Tambahkan @MappersCan ("com.tdx.account_service.dao*") ke file startup. Berikut ini adalah yang lengkap.
Pada titik ini, konfigurasi telah selesai, dan Anda dapat menjalankan proyek setelah menjalankannya.
Saya pikir Mybatis-Plus adalah bagian paling menyenangkan dari generator kode. Berikut ini adalah proses menggunakan generator kode
Tambahkan sesuatu ke pom.xml
<dependency> <GroupId> org.apache.velocity </groupid> <ArTifactId> velocity-engine-core </artifactid> <version> 2.0 </version> </dependency>
1. File Konfigurasi Generator Kode
Mybatisplusconfig.java
/*** Hak Cipta (C) 2011-2016, hubin ([email protected]). * <p> * dilisensikan di bawah lisensi Apache, versi 2.0 ("lisensi"); Anda tidak boleh * menggunakan file ini kecuali sesuai dengan lisensi. Anda dapat memperoleh salinan * lisensi di * <p> * http://www.apache.org/licenses/license-2.0 * <p> * Kecuali jika disyaratkan oleh hukum yang berlaku atau disepakati secara tertulis, perangkat lunak * yang didistribusikan di bawah lisensi yang didistribusikan atau disertakan atau disiratkan atau disertakan, baik yang dituntut. Lihat lisensi * untuk izin dan batasan yang mengatur bahasa tertentu di bawah * lisensi. */paket com.tdx.account_service.generator; import java.io.file; import java.util.arraylist; impor java.util.collections; impor java.util.hashmap; impor java.util.list; impor java.util.mapap; com.baomidou.mybatisplus.generator.autogenerator; import com.baomidou.mybatisplus.generator.insectionConfig; import com.baomidou.mybatisplus.generator.config.datasourconfig; impor com.baomidou.mybatisplus.generator.config.fileoutconfig; import com.baomidou.mybatisplus.generator.config.globalconfig; import com.baomidou.mybatisplus.generator.config.packagagec; com.baomidou.mybatisplus.generator.config.strategyconfig; impor com.baomidou.mybatisplus.generator.config.templateConfig; import com.baomidou.mybatisplus.generator.config.config.config.config.config.config.config.config.config.config.config.config.confer.confer.convert.confers.confer.convert.convert.confert.conferS.conferS.convert.conferS.conferS.conferS.convert.confers.convert.conferS.converSy com.baomidou.mybatisplus.generator.config.po.tablefill; impor com.baomidou.mybatisplus.generator.config.po.tableInfo; impor com.baomidou.mybatisplus.generator.config.rules.dules.dumbatisplus.generator.config.rules.dules.dules.dumbatisplus.config.config.rules com.baomidou.mybatisplus.generator.config.rules.dbtype; impor com.baomidou.mybatisplus.generator.config.rules.namingsategy;/** *┃ ┃ ┃ ┃ ━ ┃ ┃ ┃ ━ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ * ┃ ┃ * ┗━┓ ┏━┛ * ┃ ┃ ┃ Berkatilah binatang buas * ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ * ┃ ┗━━━┓ * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ * ┃┫┫ ┃┫┫ * ┗┻┛ ┗┻┛ * * @description: MyBaTisplus Code Generator * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // File Path Private Static String Authorname = "Liang.Guangqing"; // penulis tabel string statis pribadi = "sc_user"; // nama tabel private static string prefix = "sc_"; // Tabel Prefix File File Statis Privat File = File Baru (PackageName); private static string path = file.getAbsolutePath (); public static void main (string [] args) {// Kustomisasi bidang yang perlu diisi Daftar <PhleFill> TABLEFILLLIST = NEW ARRAYLIST <> (); TableFillList.Add (TableFill baru ("ASDD_SS", fieldfill.insert_update)); // Generator Kode Autogenerator MPG = Autogenerator baru (). SetGlobalConfig (// Konfigurasi Global Global Config Baru () .setoutputDir (Path+"/SRC/Main/Java") // Output Directory.setFileOverride (true) // Apakah akan menulis file. XML Secondary Cache.setBaseresultMap (true) // xml resultMap .setBaseColumnList (true) // xml columnlist .setopen (false) // buka folder setelah generasi. .setxmlname ("%smapper") .setserviceName ("%sService") .setserviceImplname ("%sServiceImpl") .setControllername ("%scontroller") .setDataSource (// Konfigurasi Data DataSourconfigconfig (). type.settypeConVert (mysqlTypeConVert () {// Kustomisasi Konversi Jenis Bidang Tabel Basis Data [Opsional] @Override DBColumnType ProcessTypeConVert (String FieldType) {System.out.println ("Tipe Konversi:" + FieldType); / /IF (fieldypy. return dbcolumnType.boolean; //} return super.processtypeConvert (fieldType); .setUrl("jdbc:mysql://127.0.0.1:3306/tdx_shop?characterEncoding=utf8") ).setStrategy( // Policy Configuration new StrategyConfig() // .setCapitalMode(true)// Global capitalization naming //.setDbColumnUnderline(true)//Global underscore naming.settablePrefix (string baru [] {prefix}) // Di sini Anda dapat memodifikasinya ke awalan tabel Anda. String [] {"test"}) // Kecualikan tabel yang dihasilkan // Kustom Entity Parent Class // .setsuperentityclass ("com.baomidou.demo.testentity") // entitas kustom, public field //setsuperentitycolumns(new string [] {"test_id"}). .setsupermapperclass ("com.baomidou.demo.testmapper") // Layanan Kustom Parent Class // .setsuperserviceClass ("com.baomidou.demo.testservice") // Kelas Layanan Kustom. Parent Class .setsuperControllerClass ("com.tdx."+Packagename+". Controller.AbstractController") // [entitas] Apakah akan menghasilkan konstanta lapangan (default false) // public static string id = "test_id"; {this.name = name; return ini;} // .setentitybuildermodel (true) // [entitas] adalah model lombok (default false) <a href = "https://projectlombok.org/" rel = "eksternal nofollow"> dokumen </a>/. // .setentityBooleAnColumnRemoveIsprefix (true) // .setrestControllerstyle (true) // .setControllermappingHyphenstyle (true)) .setPackageInfo (// packageConfig () // .setModuleName ("user") .setParent ("com.t." path.setController ("controller") // Berikut adalah nama paket pengontrol, web default .setentity ("entitas") .setMapper ("dao") .setservice ("service") .setserviceImpl ("layanan. InjectionConfig () {@Override void initmap () {peta <string, objek> peta = hashmap baru <> (); }.setFileOutConfigList(Collections.<FileOutConfig>singletonList(new FileOutConfig("/templates/mapper.xml.vm") { // Custom output file directory @Override public String outputFile(TableInfo tableInfo) { return path+"/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper.xml"; Direktori SRC/Main/Template. .setserviceImpl ("..."); // Jalankan untuk menghasilkan mpg.execute (); // Cetak pengaturan injeksi, di sini menunjukkan cara mendapatkan konten injeksi di templat [noble] system.err.println (mpg.getcfg (). GetMap (). Get ("abc")); }}
Masih ada banyak modifikasi dalam file. Yang paling penting adalah informasi koneksi MySQL. Tidak ada alasan mengapa akun dan kata sandi Anda salah. Anda dapat menghubungkannya. Kedua, atur jalur file template yang Anda hasilkan. Jalur yang saya hasilkan di sini dapat dilihat pada gambar di atas. Itu di bawah com.tdx.account_service. Perhatikan bahwa file XML harus ditempatkan di bawah sumber daya, jika tidak maka akan dikenali dan dikatakan bahwa metode ini tidak dapat ditemukan.
File yang dihasilkan sesuai dengan templat kode situs web resmi pada dasarnya kosong. Alasan utamanya adalah bahwa Mybatis-plus mengintegrasikan metode publik, dan banyak alat yang umum digunakan dapat dirujuk. Di sini saya menyediakan file controller.java.vm yang saya modifikasi, terutama sesuai dengan kebiasaan saya sendiri.
controller.java.vm
Paket $ {package.controller}; impor org.springframework.web.bind.annotation.RequestMapping; impor org.springframework.web.bind.annotation.requestparam; #nif ($ {restontrollerstyle}) impor org.springframework.wepram. org.springframework.web.bind.annotation.RestController; #elseImport org.springframework.steretype.controller;#end#if ($ {supercontrollerclasspackage}) impor $ {supercontrollerclasspackage};#endImport org.springframework.beans.factory.annotation.Autowired; import com.baomidou.mybatisplus.mapper.entitywrapper; import com.baomidou.mybatisplus.plugins.page; import $ {package.service}. $ {servic.page; $ {package.entity} .common.datatablesjson; import $ {package.entity} .common.jsonResult; import $ {package.entity}. $ {entitas}; impor org.slf4j.logger; Impor org.slf4j.loggerFactory; ┃ *┃ ┳┛ ┗┳ ┃ *┃ ┃ *┃ ┃ *┃ ┗┳ ┃ *┃ ┃ *┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗┓ ┏━┛ ┏━┛ ┃ ┃ ┗┓ ┗┓ ┗┓ ┗┓ ┗┓ ┃ ┗┓ ┗┓ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗┓ ┃ ┃ ┃ ┃ ┗┓ ┗┓ ┗┓ * ┃ ┗━━━┓ * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ * ┃┫┫┃┫ * ┗┻┛ ┗┻┛ * * @description: $ {entitas} pengontrol * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */#if ($ {restcontrollerstyle})@restcontroller#else@controller#end@requestMapping ("#if ($ {package.modulename})/$ {package.modulename}# end/#if ($ {controllermappingHyphenstyle}) $ {controllermappingHyphen}#else $ {Table.entitypath} #end ")#if ($ {supercontrollerclass}) public class $ {TABLE.ControllerName} memperluas $ {SuperControllerClass} {#elsepublic class $ {TABLE.CONTROLLERName} {#end Private Final Logger Logger = LoggerFactory.getLogger ($ {TABLE.CONTROLLERName} .class); @Autowired public $ {TABLE.SERVICEname} $ {TABLE.ENTITYPATH} layanan; /*** @description: Dapatkan daftar paging* --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Dapatkan $ {entity} list ($ {entitas} param, @RequestParam (value = "draw", defaultValue = "0") integer draw, @RequestParam (value = "length") length, @requestparam (value = "start") integer start) {DataTablesJson <$ {{$ {{$ {{$ {{datson (values = "start") {datatables <$ {$ {$ {$ {$ {$ {$ {$ {$ {$ { coba {integer pageno = getPageno (start, length); Halaman <$ {entitas}> halaman = halaman baru <$ {entitas}> (pageno, panjang); $ {TABLE.ENTITYPATH} service.selectpage (halaman, EntityWrapper baru <$ {entitas}> (param)); resjson.setDraw (draw ++); resjson.setrecordstotal (page.getTotal ()); resjson.setrecordsfiltered (page.getTotal ()); resjson.setData (page.getRecords ()); resjson.setsuccess (true); } catch (Exception e) {resjson.setsuccess (false); resjson.setError ("Informasi Pengecualian: {"+e.getClass (). getName ()+"}"); logger.info ("Informasi Pengecualian: {}"+e.getMessage ()); } return resjson; } /** * @description: dapatkan $ {entitas} oleh id * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- id) {JSONRESULT <$ {entitas}> resjson = new jsonResult <> (); coba {$ {entitas} param = $ {Table.entityPath} service.selectById (id); resjson.setData (param); resjson.setsuccess (true); } catch (Exception e) {resjson.setsuccess (false); resjson.setMessage ("Informasi Pengecualian: {"+e.getClass (). getName ()+"}"); logger.info ("Informasi Pengecualian: {}"+e.getMessage ()); } return resjson; } /** * @description: hapus $ {entitas} oleh id * ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- JsonResult <> (); coba {resjson.setsuccess ($ {table.entitypath} service.deletyid (id)); } catch (Exception e) {resjson.setsuccess (false); resjson.setMessage ("Informasi Pengecualian: {"+e.getClass (). getName ()+"}"); logger.info ("Informasi Pengecualian: {}"+e.getMessage ()); } return resjson; } /** * @description : Update ${entity} by id * -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @since : Create in $ {date} */ @RequestMapping (value = "/ update $ {entitas} byid", method = requestMethod.post) Pembaruan objek publik $ {entitas} byid ($ {entitas} param) {jsonResult <$ {}> resjson = new jsonResult <> (); coba {resjson.setsuccess ($ {table.entitypath} service.updatebyId (param)); } catch (Exception e) {resjson.setsuccess (false); resjson.setMessage ("Informasi Pengecualian: {"+e.getClass (). getName ()+"}"); logger.info ("Informasi Pengecualian: {}"+e.getMessage ()); } return resjson; } /** * @description: tambahkan $ {entitas} * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- JSONRESULT <$ {entitas}> resjson = JSONRESULT baru <> (); coba {resjson.setsuccess ($ {Table.entityPath} service.insert (param)); } catch (Exception e) {resjson.setsuccess (false); resjson.setMessage ("Informasi Pengecualian: {"+e.getClass (). getName ()+"}"); logger.info ("Informasi Pengecualian: {}"+e.getMessage ()); } return resjson; }}Selain file ini, saya mengikuti situs web resmi templat kode lainnya. Di sini saya merujuk ke 3 file eksternal, termasuk abstractController.java (kelas dasar pengontrol), datatablesjson.java dan jsonresult.java. Kemudian file -file ini merujuk ke file lain. Saya bingung. Mengapa ada begitu banyak file? Tampaknya jika semuanya diposting, itu akan memakan lebih banyak ruang. Jadi saya memilih untuk percaya pada cloud kode. Jika Anda membutuhkannya, silakan unduh cloud kode sesuai dengan beberapa file di cloud kode. Perlu dicatat bahwa templat saya secara langsung digantikan oleh direktori templat di mybatis-plus.jar.
Akhirnya, ini adalah proses tes
Cuplikan kode berikut ditempatkan dalam file controller, dan kemudian program dimulai, sesuai dengan port, dan metode permintaan. Untuk pengujian, Anda perlu beroperasi sesuai dengan kelas entitas Anda sendiri, jadi itu hanya untuk referensi.
/** * halaman pagination */@getmapping ("/test") halaman publik <user> test () {return userservice.selectpage (halaman baru <User> (0, 12)); }/*** AR Parsial Test*/@getMapping ("/test1") halaman publik <user> test1 () {user user = new user (); System.err.println ("Hapus Semua:" + user.delete (null)); //user.setid(2017091801l); user.setAccout ("test"+num ++); user.setType ("test"); user.setCreateTime (tanggal baru ()); user.setphone ("13111110000"); user.setPassword ("123456"); user.setNickName ("Guangqing"+2*num ++); user.insert(); System.err.println("Query insert result: " + user.selectById().toString()); //user.setNickname("mybatis-plus-ar"); System.err.println("Update:" + user.updateById()); return user.selectPage(new Page<User>(0, 12), null); } /** * Add, delete, modify and check CRUD */ @GetMapping("/test2") public User test2() { User user = new User(); user.setId(123456L); user.setAccout("test"); user.setType("test"); user.setCreateTime(new Date()); user.setPhone("13111110000"); user.setPassword("123456"); user.setNickname("guangqing"); System.err.println("Delete a data: " + userService.deleteById(1L)); System.err.println("Insert a data: " + userService.insert(user)); User user2 = new User(); user.setId(223456L); user.setAccout("test2"); user.setType("test"); user.setCreateTime(new Date()); user.setPhone("13111110000"); user.setPassword("123456"); user.setNickname("guangqing"); boolean result = userService.insert(user); // Automatic writeback ID Long id = user.getId(); System.err.println("Insert a piece of data: " + result + ", Insert information: " + user.toString()); System.err.println("Query: " + userService.selectById(id).toString()); Page<User> userListPage = userService.selectPage(new Page<User>(1, 5), new EntityWrapper<>(new User())); System.err.println("total=" + userListPage.getTotal() + ", current list size=" + userListPage.getRecords().size()); return userService.selectById(1L); } @GetMapping("testSelect") public Object testSelect() { Integer start = 0; Integer length =10; User param = new User(); //param.setNickname("guangqing2"); Integer pageNo=getPageNo(start,length); Page<User> page =new Page<User>(pageNo,length); EntityWrapper<User> ew = new EntityWrapper<User>(); ew.setEntity(param); ew.where("password={0}","123456") .like("nickname","guangqing") .ge("create_time","2017-09-21 15:50:00"); userService.selectPage(page, ew); DatatablesJSON<User> resJson= new DatatablesJSON<>(); //resJson.setDraw(draw++); resJson.setRecordsTotal(page.getTotal()); resJson.setRecordsFiltered(page.getTotal()); resJson.setData(page.getRecords()); return resJson; } @GetMapping("/selectsql") public Object getUserBySql() { JSONObject result = new JSONObject(); result.put("records", userService.selectListBySQL()); hasil pengembalian; } /** * 7. Pagination size Number of displays on one page Current page number* Method 1: http://localhost:8080/user/page?size=1¤t=1<br> * Method 2: http://localhost:8080/user/pagehelper?size=1¤t=1<br> * / // Parameter mode pagination @GetMapping("/page") public Object page(Page page) { return userService.selectPage(page); } // ThreadLocal Pattern pagination @GetMapping("/pagehelper") public Object pagehelper(Page page) { PageHelper.setPagination(page); page.setRecords(userService.selectList(null)); page.setTotal(PageHelper.freeTotal());//Get the total number and free resources. PageHelper.getTotal() return page; } /** * Test things* http://localhost:8080/user/test_transactional<br> * Access the following and no data is found to indicate that things are reliable! Lai <br> * http://localhost:8080/user/test<br> * <br> * Start Application Add @EnableTransactionManagement The annotation seems to be enabled without default<br> * Methods that require things plus @Transactional is a must! Lai */ @Transactional @GetMapping("/test_transactional") public void testTransactional() { //userService.insert(new User(1000L, "Test Things", 16, 3)); System.out.println("Exception is thrown manually here and data is automatically rolled back"); throw new RuntimeException(); }这么多的测试,我觉得最有趣的是条件构造器,在官网上有更齐全的,而我这里是按照我自己的需求写的。
最后谢谢大家的观看,写博客经验不足,写得不好请见谅,如果能给你带来帮助请点个赞,若遇到不明白的,或者我有写错的地方请提出,谢谢!也希望大家多多支持武林网。