Spring Boot est une nouvelle chose pour moi. Au cours de mon processus d'apprentissage, j'ai trouvé que cette chose est toujours facile à démarrer. Lorsque Spring Boot n'est pas configuré, il utilisera Spring Data JPA par défaut. Cette chose peut être considérée comme un outil très simple, mais je préfère toujours utiliser Mybatis. Il n'y a pas de meilleur outil, seul celui-ci me convient.
En parlant de Mybatis, il y a un outil très utile récemment - Mybatis-Plus (site officiel). La version mise à jour est désormais 2.1.2, et cette version est également utilisée ici. Mes fonctionnalités préférées sont les générateurs de code et les constructeurs conditionnels, afin qu'ils puissent être développés plus facilement.
Il y a un exemple de démarrage de printemps sur le site officiel de MyBatisplus. Je l'ai suivi et le programme n'a pas fonctionné. Plus tard, j'ai découvert que la base de données H2 utilisée par Demo n'est pas la même chose que MySQL. Donc, si vous souhaitez intégrer Mybatisplus, vous ne pouvez pas regarder le site officiel et éviter les détours.
Ce qui suit est le processus d'intégration
1. Premièrement, vous devez obtenir tous les fichiers JAR requis. Les choses dont vous avez besoin pour pom.xml sont les suivantes
pom.xml (incomplet)
<!-- mybatis-plus begin --><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatisplus-spring-boot-starter</artifactId> <version>1.0.4</version></dependency><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version> 2.1.2 </ version> </dependency> <dependency> <proupId> org.springframework.boot </proupId> <lefactive> printemps-boot-starter-jdbc </letefactid> </dEpendency> <! - Mybatis-Plus end -> <! - Druid Alibaba Database Connection Pool -> <Dedency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.3</version></dependency><!--mysql--><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope></dependency><dependency> <GroupId> org.mybatis.spring.boot </rompuprid> <ArtifActid> Mybatis-Spring-Boot-Starter </ ArtifactId> <Dersion> 1.3.1 </DERNIFRIMATION> </ Dependency>
2. Ajoutez des configurations liées à MyBatis, telles que le compte, le mot de passe, etc. Ici, j'ai utilisé Application.yml pour correspondre.
application.yml
Server: Port: 8080 # SpringsPring: DevTools: Restart: Activé: true # C'est pour le déploiement à chaud, et il n'est pas lié à MyBatis # Database Config DataSource: Driver-Class-Name: com.mysql.jdbc.Diver Username: Root Motway: Root Url: Root Url: jdbc: mysql: // mysqldb: 3306 / tdx_shop? useunicode = true & caractotoDcoding = utf-8 type: com.alibaba.druid.pool.druiddatasource #here configure le pool de connexion Druid. Les informations suivantes sont toutes des informations de configuration pour les filtres Druid: Stat, Wall, Log4j Maxactive: 20 InitialSize: 1 Maxwait: 60000 MINIDLE: 1 TimeBetweenvictionRunsmillis: 60000 MineVictableIdleMemillis: 300000 validationQuery: Sélectionner `` X 'Test Whendle: true testonBorrow MaxopenPreparedStatements: 20 Connection-Properties: druid.stat.merggsql = ture; druid.stat.slowsqlmillis = 5000 # Mybatismybatis: Mappeur-Locations: Classpath *: / Mapper / ** MAPPER.XML #put le fichier xml dans com.xx.mapper. * peut avoir des problèmes. Voici le mappeur sous le scanner #-entité des ressources, plusieurs packages sont séparés par des virgules ou des semi-colons. TYPEALIASESPACKAGE: com.tdx.account_service.entity # C'est l'emplacement de la configuration de la classe d'entité: Map-UNDERSCORE
Le truc de configuration est similaire à ce que nous avons utilisé pour configurer avec MyBatis, mais Spring Boot n'a pas de fichier de configuration XML. Faites attention au contenu de la lettre rouge, il n'y a essentiellement aucun problème.
3. Fichier de configuration MyBatis-Plus ------ MyBatisPlusConfig. Tout d'abord, expliquons le chemin du fichier dans la figure ci-dessus. Parmi eux, MyBatiSplusConfig est placé dans le dossier de configuration, tandis que le fichier XML est placé dans le mappeur sous Resouces.
Ensuite, il y a la partie de contenu MyBatisPlusConfig
Mybatisproperties.java
package com.tdx.account_service.config; import com.alibaba.druid.pool.druiddatasource; import com.alibaba.druid.support.http.statviewservlet; import com.alibaba.druid.support.http.webstatfilter; import; com.baomidou.mybatisplus.mybatismonfiguration; import com.bauomidou.mybatisplus.mybatismonfiguration; import com.baomidou.mybatisplus.entity.globalconfiguration; import com.baomidou.mybatisplus.enums.dbtype; import; com.bauomidou.mybatisplus.plugins.paginationinterceptor; import com.bauomidou.mybatisplus.plugins.performanceInterceptor; import com.baomidou.mybatisplus.plugins.parser.isqlparser; import; com.bauomidou.mybatisplus.plugins.parser.isqlparserfilter; import com.bauomidou.mybatisplus.plugins.parser.tenant.tenanthandler; import com.baomidou.mybatispl com.bauomidou.mybatisplus.spring.mybatissqlSessionFactoryBean; import com.bauomidou.mybatisplus.spring.boot.starter.springbootvfs; import com.bauomidou.mybatisplus.toolkit.pluginutiles; importation; net.sf.jsqlparser.expression.expression; import net.sf.jsqlparser.expression.longvalue; import org.apache.ibatis.mapping.mappory org.apache.ibatis.reflection.MetaObject; import org.mybatis.spring.annotation.mapperscan; import org.mybatis.spring.boot.autoconfigure.mybatisproperties; import org.springframework.beans.factory.annotation.Autowired; org.springframework.boot.bind.relaxedPropertyResolver; import org.springframework.boot.context.properties.enableConfigurationProperties; import org.springframework.boot.web.servlet.filterRegmentationBean; importation; org.springframework.boot.web.servlet.servletRegistrationBean; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.core.env.environment; Importation; org.springframework.core.io.defaultreSourceLoader; import org.springframework.core.io.resourceloader; import org.springframework.util.objectutils; import org.springframework.util.strilutils; import javax.sql.datasource; java.sql.sqlexception; import java.util.arraylist; import java.util.list; / ** * le code est loin du bug avec l'animal protégeant * ┏┓ ┏┓ * ┏┛━━━━━┛┻┓ * ┃ ┃ * ┃ ━ ┃ * ┃ ━ ┃ ┃ * ┃ ┳┛ ┗┳ ┃ * ┃ ┃ ┃ ┃ ┃ * ┃ ┃ ┗┳ * ┃ ┃ Bénisse de la bête * ┃ ┃ ┃ ┃ ┃ ┃ ┗┓ ┏┛ * ┃ ┃ ┃ Bénis de la bête * ┃ ┃ ┃ ┃ ┃ ┃ ┃ pas de bugs! * ┃ ┗━━━┓ * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ * ┃┫┫ ┃┫┫ * ┗┻┛ ┗┻┛ * * @Description: Configuration MyBatisplus * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Private ReladedPropertyResolver PropertyResolver; @Autowired Private DataSource DataSource; @Autowired Private MyBatisProperties Properties; @Autowired private ResourceLoader ResourceLoader = new DefaultreSourceLoader (); @Autowired (requis = false) intercepteur privé [] intercepteurs; @Autowired (requis = false) privé DatabaseIdProvider databaseIdProvider; / ** * @Description: MyBatis-Plus Plug-in Efficacité d'exécution SQL [peut être fermé en environnement de production] * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * / @Bean public DataSource DruidDataSource () lève Sqlexception {this.propertyResolver = new RelaxEdPropertyResolver (Environment, "Spring.datasource."); System.out.println ("========================================================================================. ====================================================================================================================================. ===================================================================================================================================. ====================================================================================================================================. DataSource.setUrl (propriétéResolver.getProperty (URL "); DataSource.SetInitialSize (Integer.ValueOf (propriétéResolver.getProperty ("Initial-Size")); DataSource.setMaxActive (Integer.ValueOf (propriétéResolver.getProperty ("Max-activ. DataSource.setFilters (propriétéResolver.getProperty ("filtres");} Catch (SQLEXception E) {E.PrintStackTrace (); ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Pagination Interceptor PaginationInterceptor () {Pagination Interceptor = new PaginationInterceptor (); MyBatissqlSessionFactoryBean MyBatissQLessionFactoryBean () {MyBatissQLSessionFactoryBean MyBatisplus = New MyBatissQLessionFactoryBean (); (StringUtils.hastext (this.properties.getConfigLocation ())) {mybatisplus.setConfigLocation (this.resourceLoader.getResource (this.properties.getConfiglocation ())); ! Auto-> `0` (" Database ID Self-Incmentement ") Input->` 1` (User Input ID ") id_worker->` 2` ("Global Unique ID") UUID-> `3` (" Global Unique ID ") MyBaticEFiguration (); (StringUtils.hasLength (this.properties.getTypeAlaSpackage ()))) {mybatisplus.setTypeAspackage (this.properties.getTypeAlaSespackage ()); } if (stringUtils.hasLength (this.properties.getTypeaSespackage ());} if (stringUtils.hasLength (this.properties.getTypeHandlerspackage ()) {mybatisplus.setTypehandlerspackage (this.properties.getTypeHandlerSpackage ());} (! ObjectUtils.Isempty (this.properties.resolVemAsperLocations ())) {mybatisplus.setmapperLocations (this.properties.resolVemapperLocations ()); //org.springframework.boot.context.embedDed.ServletRegingBean fournit la classe pour l'enregistrement. ServletRegsingBean.AddinitAramètre ("Autoriser", "127.0.0.1"); Voir les informations. FilterRegistingBean * * @Return * / @Bean Public FilterRegistingBean DruidStatFilter () {FilterRegingBean FilterRegrationBean = NEW FilterRegtionBean (New WebstatFilter ()); FilterRegistrationBean.AdDinitAramètre ("exclusions", "*. JS, *. GIF, *. JPG, *. Png, *. CSS, *.Voici le fichier de configuration complet. Il est important de noter que les packages introduits ne sont pas incorrects!
4. Vous devez également activer le scanner DAO. C'est très simple. Ajoutez @mapperscan ("com.tdx.account_service.dao *") dans le fichier de démarrage. Ce qui suit est le complet.
À ce stade, la configuration est terminée et vous pouvez exécuter le projet après l'avoir exécuté.
Je pense que Mybatis-Plus est la partie la plus amusante du générateur de code. Voici le processus d'utilisation du générateur de code
Ajouter quelque chose à pom.xml
<dependency> <proupId> org.apache.Velocity </proupId> <ArtefactId> Velocity-Engine-Core </letefactId> <DERSE> 2.0 </ Version> </Dependance>
1. Fichier de configuration du générateur de code
Mybatisplusconfig.java
/ ** * Copyright (c) 2011-2016, hubin ([email protected]). * <p> * Licencié sous la licence Apache, version 2.0 (la "licence"); Vous ne pouvez pas * utiliser ce fichier sauf conformément à la licence. Vous pouvez obtenir une copie de * la licence à * <p> * http://www.apache.org/licenses/license-2.0 * <p> * Sauf si la loi applicable ou acceptée par écrit, le logiciel * distribué sous la licence est distribué sur une base "tel quel", sans * garanties ou conditions de toute type, exprimée ou impliquée. Voir la * licence pour la langue spécifique régissant les autorisations et les limitations sous * la licence. * / package com.tdx.account_service.generator; import java.io.file; import java.util.arraylist; import java.util.licole; import java.util.hashmap; import java.util.list; com.bauomidou.mybatisplus.generator.autogenerator; import com.bauomidou.mybatisplus.generator.injectionconfig; import com.baomidou.mybatisplus.generator.config.datasourceconfig; import com.baumidou. com.bauomidou.mybatisplus.generator.config.globalconfig; import com.bauomidou.mybatisplus.generator.config.packageconfig; import com.baomidou.mybatisplus.generator.config.strategonconfig; com.bauomidou.mybatisplus.generator.config.templateconfig; import com.bauomidou.mybatisplus.generator.config.converts.mysqltypeconvert; com.baomidou.mybatisplus.generator.config.po.tableinfo; import com.bauomidou.mybatisplus.generator.config.rules.dbcolumntype; import com.baomidou.mybatisplus.generator.config.rules.dbtype; import; com.bauomidou.mybatisplus.generator.config.rules.namingStrategy; / ** * Le code est loin du bug avec l'animal protégeant * ┏┓ ┏┓ * ┃ * ┃ ┃ * ┃ ━ ┃ * ┃ ┳┛ ┗┳ ┗┳ ┃ * ┃ * ┃ ┃ * ┃ ━ ┃ * ┃ ┳┛ ┗┳ ┗┳ ┃ * ┃ ┃ * ┃ ┃ * ┃ ┃ ┗━┓ ┗━┓ ┏━┛ ┏━┛ * Sans bugs! * ┃ ┗━━━┓ * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ * ┃┫┫ ┃┫┫ * ┗┻┛ ┗┻┛ * * @Description: Générateur de code MyBatisplus * ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- packageName="account_service"; // File Path Private Static String AuthorName = "liang.guangqing"; // Auteur Private Static String Table = "SC_USER"; // Nom de table Private Static String Prefix = "SC_"; // Table préfixe File de fichier statique privé = nouveau fichier (packageName); String statique privé Path = file.getabsolutepath (); public static void main (String [] args) {// Personnalisez les champs qui doivent être remplis listes <plowFill> TableFillList = new ArrayList <> (); TableFillList.add (new TableFill ("ASDD_SS", FieldFill.insert_update)); // Générateur de code AutoGeenerator mpg = new AutoGeenerator (). SetGlobalConfig (// Global Configuration new GlobalConfig () .SetOutputDir (path + "/ src / main / java") // sortant Directory.SetFileOverride (True) // pour écraser le mode File.SetAtterecord) // Xml secondaire cache.setBaseresultMap (true) // xml resultmap .setBaseColumnList (true) // xml columnList .SetOpen (false) // Ouvrez le dossier après génération.SetAuthor (Authorname) // personnaliser le nom de fichier, note que% s remplira automatiquement les attributs d'entité de table! .setXmlName ("% smapper") .setserviceName ("% sservice") .setserviceImplAme ("% sserviceImpll") .setControlnerName ("% strentroller")) .SetDataSource (// configuration de la source de données new DataSourceCig () .SetDbType (dbtype. type.setTypeConvert (new mysqltypeConvert () {// personnaliser la table de données de la base de données Conversion de type de champ [facultatif] @Override public dbcolumnType processTypeConvert (String fieldType) {System.out.println ("Conversion Type:" + fieldType); // if (fieldType.Toltol // retourne dbcolumntype.boolean; .SetUrl ("JDBC: mysql: //127.0.0.1: 3306 / tdx_shop? CaracterCcoding = UTF8")) .SetStrategy (// Configuration de la politique Nouvelle stratégieConfig () // .SetCapitalMode (true) // Global Capitalization Naming //.SetdbcolumnUndline(true)/global sous naming.setTablePrefix (nouvelle chaîne [] {prefix}) // Vous pouvez le modifier sur votre table prefix.setnaming (namingStrategy.underline_to_camel) // Table Nom Generation Strategy.Setinclude (New String [] {table}) // Tableau qui doit être généré. String [] {"test"}) // Exclure la table générée // Entité personnalisée classe parent // .SetSupeRentityClass ("com.baomidou.demo.testentity") // entité personnalisée, champ public //.setsUpentityColumns(New String [] {"Test_id"}). .SetsUperAperClass ("com.bauomidou.demo.testmapper") // Classe parentale personnalisée // .SetSuperServiceClass ("com.baomidou.demo.testService") // Classe d'implémentation personnalisée Classe parentale // .SetsuperserviceIMPLClass ("Com.banidou.Demo.TestsServices .SetSuperControllerClass ("com.tdx." + packageName + ". Controller.abstractController") // [Entity] à générer des constantes de champ (par défaut false) // Public Static String id = "test_id"; {this.name = name; renvoie ce // .SetEntityBoolEAnColumnReMoveisTreFix (true) // .SetRestControllersTyle (true) // .setControllerAppingHyPheNstyle (true)) .setPackageInfo (// packageConfig () // .SetModUlename ("every) .setParent (" com.tdx "+ packagename) //setparent (" com.tdx ". path.setController ("contrôleur") // voici le nom du package de contrôleur, Web par défaut .Settentity ("Entity") .SetMapper ("dao") .setservice ("service") .setserviceImpll ("Service.impl") //.setxml("mapper ")) .SetCFG (// injecter la configuration personnalisée, vous pouvez utiliser la valeur définie par CFG.ABC dans VM dans VM dans la nouvelle configuration personnalisée, vous pouvez Injectionconfig () {@Override public void initmap () {map <string, object> map = new hashmap <> (); } .setFileoutConfigList (Collections. <FileoutConfig> SingletonList (new FileoutConfig ("/ Templates / Mapper.xml.vm") {// Répertoire de fichiers de sortie personnalisé @Override public String OutputFile (TableInfo TableInfo) {return Path + "/ Src / Main / Resources / Mapper /" + TableInfo.Get.GetTityName () + + Resources / Mapper / "+ Tableinfo.Get.GetTityName () + + Resources / Mapper /" + Tableinfo.Get.GetTityName () + + Resources / Mapper / "+ Table "MAPPER.XML";;}}))) .setTemplate (// éteignez la génération XML par défaut et ajustez la génération au répertoire racine nouveau TemplateConfig (). SetXML (NULL) // Personnalisez la configuration du modèle. répertoire. // Exécuter pour générer mpg.execcute (); // Imprimer les paramètres d'injection, montre ici comment obtenir le contenu d'injection dans le modèle [noble] System.err.println (MPG.getCfg (). GetMap (). Get ("ABC")); }}
Il y a encore de nombreuses modifications dans le fichier. La chose la plus importante est les informations de connexion de MySQL. Il n'y a aucune raison pour que votre compte et votre mot de passe sont mauvais. Vous pouvez vous y connecter. Deuxièmement, définissez le chemin d'accès du fichier de modèle que vous avez généré. Le chemin que j'ai généré ici peut être vu dans la figure ci-dessus. Il est sous com.tdx.account_service. Notez que le fichier XML doit être placé sous les ressources, sinon il sera reconnu et a déclaré que cette méthode ne peut être trouvée.
Les fichiers générés en fonction du modèle de code du site Web officiel sont fondamentalement vides. La raison principale est que MyBatis-Plus intègre des méthodes publiques et de nombreux outils couramment utilisés peuvent être référencés. Ici, je fournis le fichier contrôleur.java.vm que j'ai modifié, principalement en fonction de mes propres habitudes.
contrôleur.java.vm
Package $ {package.Controller}; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestParam; #if ($ {restControllerstyle}) ImportMethod; org.springframework.web.bind.annotation.restController; #ELSEIMPORT ORG.SPRINGFRAMEWROWN.STERETYTY org.springframework.beans.factory.annotation.autowired; import com.bauomidou.mybatisplus.mapper.entitywrapper; import. $ {package.entity} .common.datatablesjson; import $ {package.entity} .common.jsonResult; import $ {package.entity}. $ {entity}; import org.slf4j.logger; importer org.slf4j.loggerfactory; / ** * le code est bien absent de la protection animale avec le bugs avec le bugs avec le bugs avec le bugs avec le bogue * ┏┓ * * * *; ┃ * ┃ ┳┛ ┗┳ ┃ * ┃ ┃ * ┃ ┃ * ┃ ┗┳ ┃ * ┃ ┃ * ┃ ┗┳ ┃ * ┃ ┃ * ┃ ┗┓ ┏━┛ * ┃ ┃ * ┃ ┃ * ┗┓ ┏━┛ * ┃ ┃ ┃ * ┃ ┃ ┃ * ┗┓ ┃ * ┃ ┃ ┃ * ┃ ┃ ┃ * ┃ ┃ * ┗┓ ┏━┛ * ┃ ┃ ┃ Blessing * ┃ ┃ ┃ ┃ * ┃ ┃ * ┗┓ ┏━┛ * ┃ ┃ ┃ Blessing * ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ * ┗┓ ┏━┛ * ┃ ┃ ┃ Blessing * ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ * ┗┓ ┏━┛ * ┃ ┃ ┃ Blessing * ┃ ┃ ┃ * * ┃ ┗━━━┓ * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ * ┃┫┫┃┫ * ┗┻┛ ┗┻┛ * * @description: $ {entité} Contrôleur * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- notre end / # if ($ {Contrômapping Hyphenstyle}) $ {Contrômappinghyphen} # else $ {table.entityPath} #end ") # if ($ {superControllerClass}) public class $ {table.Controllername} étend $ {superControllerClass} {#ElSepublic class $ {table.Controllername} {#end privé Logger Logger = LoggerFactory.getLogger ($ {table.ControllerName} .Class); @Autowired public $ {table.serviceName} $ {table.entityPath} service; / ** * @Description: obtenez la liste de pagination * ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Get $ {Entity} List ($ {Entity} Param, @RequestParam (value = "Draw", defaultValue = "0") Integer Draw, @RequestParam (value = "longueur") Longueur entier, @RequestParam (valeur = "start") INTERER START) {datatablesjson <$ {entity}> resjson = new DataSTSJSON <);); essayez {entier pageno = getpageno (start, longueur); Page <$ {entité}> page = new page <$ {entité}> (pageno, longueur); $ {table.entityPath} Service.SelectPage (page, new EntityWrapper <$ {Entity}> (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.setherror ("Informations d'exception: {" + e.getClass (). getName () + "}"); Logger.info ("Informations d'exception: {}" + e.getMessage ()); } return resjson; } / ** * @description: get $ {entité} par id * ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- id) {jsonResult <$ {entité}> resjson = new JSONRESULT <> (); essayez {$ {entité} param = $ {table.entityPath} Service.SelectById (id); resjson.setData (param); resjson.setsuccess (true); } catch (exception e) {resjson.setsuccess (false); resjson.setMessage ("Informations d'exception: {" + e.getClass (). getName () + "}"); Logger.info ("Informations d'exception: {}" + e.getMessage ()); } return resjson; } / ** * @description: supprimer $ {entité} par id * ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- JSONRESULT <> (); essayez {resjson.setsuccess ($ {table.entityPath} Service.DeleteById (id)); } catch (exception e) {resjson.setsuccess (false); resjson.setMessage ("Informations d'exception: {" + e.getClass (). getName () + "}"); Logger.info ("Informations d'exception: {}" + e.getMessage ()); } return resjson; } /** * @description : Update ${entity} by id * -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @since : Create in $ {date} * / @requestmapping (value = "/ mise à jour $ {entité} byid", méthode = requestMethod.post) public update $ {entity} byid ($ {entity} param) {jsonResult <$ {entity}> resjson = new JSONRESULT <> (); essayez {resjson.setsuccess ($ {table.entityPath} service.updateByid (param)); } catch (exception e) {resjson.setsuccess (false); resjson.setMessage ("Informations d'exception: {" + e.getClass (). getName () + "}"); Logger.info ("Informations d'exception: {}" + e.getMessage ()); } return resjson; } / ** * @description: ajouter $ {entité} * ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- JsonResult <$ {entité}> resjson = new JSONRESULT <> (); essayez {resjson.setsuccess ($ {table.entityPath} service.insert (param)); } catch (exception e) {resjson.setsuccess (false); resjson.setMessage ("Informations d'exception: {" + e.getClass (). getName () + "}"); Logger.info ("Informations d'exception: {}" + e.getMessage ()); } return resjson; }}En plus de ce fichier, je suis le site officiel des autres modèles de code. Ici, je me réfère à 3 fichiers externes, y compris AbstractController.java (Contrôleur Base Class), Datatablesjson.java et JsonResult.java. Ensuite, ces fichiers se réfèrent à d'autres fichiers. J'étais confus. Pourquoi y a-t-il autant de fichiers? Il semble que si tous sont affichés, cela prendra plus de place. J'ai donc choisi de croire au cloud de code. Si vous en avez besoin, veuillez télécharger le cloud de code en fonction des quelques fichiers sur Code Cloud. Il convient de noter que mes modèles sont directement remplacés par le répertoire des modèles dans mybatis-plus.jar.
Enfin, c'est le processus de test
Les extraits de code suivants sont placés dans le fichier de contrôleur, puis le programme est démarré, correspondant au port et à la méthode de demande. Pour les tests, vous devez fonctionner en fonction de votre propre classe d'entité, il est donc pour référence uniquement.
/ ** * page de pagination * / @getmapping ("/ test") PAGE PUBLIQUE <DERSER> TEST () {return userService.SelectPage (new Page <Derser> (0, 12)); } / ** * AR Partial Test * / @getMapping ("/ test1") PAGE PUBLIQUE <DERSER> TEST1 () {User user = new User (); System.err.println ("Supprimer tout:" + user.delete (null)); //user.setid(2017091801l); user.setAccout ("test" + num ++); user.setType ("test"); user.setCreateTime (new Date ()); 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()); Résultat de retour; } /** * 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! ! <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! ! */ @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(); }这么多的测试,我觉得最有趣的是条件构造器,在官网上有更齐全的,而我这里是按照我自己的需求写的。
最后谢谢大家的观看,写博客经验不足,写得不好请见谅,如果能给你带来帮助请点个赞,若遇到不明白的,或者我有写错的地方请提出,谢谢!也希望大家多多支持武林网。