MyBatis-Plus (MP pour faire court) est un outil d'amélioration MyBatis. Sur la base de MyBatis, il améliore et ne change pas, et naît pour simplifier le développement et améliorer l'efficacité.
Document chinois: http://baomidou.oschina.io/mybatis-plus-doc/#/
Cet article présente
1) Comment le construire
2) Génération de code (contrôleur, service, mappeur, XML)
3) Les classes CRUD, la requête conditionnelle et la base de pagination d'une seule table ont été faites pour vous
1. Comment le construire
1. Nous créons d'abord un projet Springboot -> https://start.spring.io/
2. Dépendance Maven
<dependency> <proupId> com.bauomidou </proupId> <Artifactid> Mybatis-Plus-Boot-starter </ artifactid> <version> 2.3 </ version> </pedidency> <! - Velocity Dependency pour la génération de code -> <Dependance> <ProupId> Org.apache.Vevity </prounid> <Artifactid> Velocity-Engine-Core </ Artiford> <Artifactid> Velocity-Engine-Core </ Artifactid> <version> 2.0 </ version> </ dépendance>
3. Configuration (parce que je pense que c'est trop verbeux, la configuration de la source de données est omise ici)
application.properties
mybatis-plus.mapper-locations = classpath: /mapper/*mapper.xmlmybatis-plus.typealiasespackage=com.taven.web.springbootmp.entitymybatis-plus.global-config.id-type=3mybatis-plus.global-config.frat-ster egy = 2mybatis-plus.global-config.db-column-underline = truemybatis-plus.global-config.key-generator = com.baomidou.mybatisplus.incrementer.oraclekeygeneratormybatis-plus.global-config.logic-telete-valulue = 1 Mybatis-plus.global-config.logic-not-delete-valie = 0mybatis-plus.global-config.sql-injector = com.baomidou.mybatisplus.mapper.logicsqlinject .taven.web.springbootmp.mymetaobjecthandlermybatis-plus.configuration.map-underscore-to-camér
Classe de configuration MyBatisPlusConfig
import org.mybatis.spring.annotation.mapperscan; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import com.baomidou.mybatispl com.bauomidou.mybatisplus.incrementter.ikeygenerator; import com.bauomidou.mybatisplus.mapper.isqlinjector; import; com.bauomidou.mybatisplus.plugins.paginationinterceptor; import com.bauomidou.mybatisplus.plugins.performanceInterceptor; com.taven.web.springbootmp.mymetaobjecthandler; @ impletransactionManagement @ configuration @ mapperscan ("com.taven.web.springbootmp.mapper") public Mybatisplusconfig {/ ** * Mybatis-plus Sql Efficacité du plug-in de production PerformanceInterceptor PerformanceInterceptor () {return new PerformanceInterceptor (); } / * * Plug-in de pagination, identifiant automatiquement les multi-locataires dans le type de base de données, veuillez vous référer au site officiel [extension du plugin] * / @Bean Public PaginationInterceptor PaginationInterceptor () {return new PaginationInterceptor (); } @Bean public metaobjecthandler metaobjecthandler () {return new mymetaobjecthandler (); } / ** * Générateur de clé primaire d'injection * / @bean public ikeyGenerator keyGenerator () {return new H2KeyGenerator (); } / ** * Injection SQL Injector * / @Bean public IsqLinjector SQLinjector () {return new LogicsQLinjector (); }} Importer com.bauomidou.mybatisplus.mapper.MetaObjecthandler; import org.apache.ibatis.reflection.metaObject; import org.slf4j.logger; import org.slf4j.loggerfactory; / ** * injecter les champs publics de remplissage, la méthode d'injonction facultative * // @ @ componentpublic Class Gleat MyMetaObjecthandler étend MetaObjectHandler {Logger statique final protégé Logger = loggerfactory.getLogger (application.class); @Override public void insertFill (metaObject metaObject) {logger.info ("faire quelque chose indésirable lorsqu'il est ajouté"); } @Override public void updateFill (metaObject metaObject) {logger.info ("faire quelque chose indésirable lorsqu'il est mis à jour"); }} 2. Génération de code
Exécutez JUnit pour générer un contrôleur, une interface de service, une implémentation, un mappeur et un XML
import org.junit.test; import com.bauomidou.mybatisplus.generator.autogenerator; import com.bauomidou.mybatisplus.generator.config.datasourceconfig; import com.banidou.mybatisplus.generator.config.globalconfig; importer; import; com.bauomidou.mybatisplus.generator.config.packageconfig; import com.bauomidou.mybatisplus.generator.config.strategyconfig; import com.baomidou.mybatisplus.generator.config.rules.dbtype; import; com.baomidou.mybatisplus.generator.config.rules.namingStrategy; / ** * <p> * Test Generation Code * </p> * * @author k dieu * @Date 2017/12/18 * / public Class GeneratorServiceNtity {@Test public Void generateCode () {string PackageName = "com.taven.web.springbootmp"; Booléen ServiceNameStartWithi = false; // utilisateur -> utilisateur, réglé sur true: utilisateur -> iUserService generateByTables (ServiceNameStartWithi, PackageName, "Cable", "Station"); // Modifier pour votre nom de table} private Void GenerateByTables (TableeanConConConConiSi, String PackageName, String ... TableeanConConde) new GlobalConfig (); String dburl = "jdbc: mysql: // localhost: 3306 / communiquer"; DataSourCeConfig dataSourCeConfig = new DataSourCeConfig (); DataSourceConfig.setdbType (dbtype.mysql) .SetUrl (dburl) .sesername ("root") .setpassword ("root") .setDrivername ("com.mysql.jdbc.driver"); StrategyConfig StrategtyConfig = new StrategtyleConfig (); StrategyConfig .setCapitalMode (true) .SetEntityLombOkModel (false) .setDBColumnUnderline (true) .setnaming (namingStrategy.underline_to_camel) .sectunclude (tablename); // modifier et remplacer par le nom de la table dont vous avez besoin, passer plusieurs noms de table pour la configuration de la configuration. Tianwen ") .setOutputDir (" e: // dev // stsdev // printemps-boot-mp // src // main // java ") .setFileOverride (true); if (! ServiceNameStartWithi) {config.setserviceName ("% sservice"); } new AutoGeenerator (). SetGlobalConfig (config) .SetDataSource (DataSourCeConfig) .SetStrategy (StrategyConfig) .SetPackageInfo (new PackageConfig () .SetParent (PackageName) .SetContrller ("Contrôler") .Setentity ("Enttity")) .Execute (); } // private void generateByTables (String packageName, String ... TableNames) {// generateByTables (true, packageName, tableName); //}}La construction a été essentiellement terminée à ce stade, et vous pouvez commencer à l'utiliser ci-dessous!
3. Utilisez mybatis-plus
Tout d'abord, nous exécutons le code généré () ci-dessus et générons le code suivant pour nous en fonction de la structure du tableau (le XML a été déplacé manuellement suivant). Le service et le mappel ont hérité de la classe de base et encapsulé de nombreuses méthodes pour nous. Voyons quelques exemples simples ci-dessous.
/ ** * <p> * Contrôleur frontal * </p> * * @author yin tianwen * @Since 2018-05-31 * / @ contrôleur @ requestmapping ("/ câble") CableController de classe publique {@Autowired Private CableService CableService; / ** * Liste Test de requête * * / @RequestMapping ("/ 1") @ResponseBody Public Object Test1 () {// Construisez l'objet EntityWrapper correspondant à l'entité et au filtre et à la requête entitywrapper <cable> ew = new EntityWrapper <> (); ew.where ("type = {0}", 1) .like ("name", "roi") .and ("core_number = {0}", 24) .and ("is_delete = 0"); List <able> list = CableService.SelectList (EW); List <map <string, objet >> maps = CableService.SelectMaps (ew); System.out.println (liste); System.out.println (cartes); retourner "ok"; } / ** * Test de requête de pagination * / @RequestMapping ("/ 2") @ResponseBody Public Object Test2 () {// Construisez l'objet EntityWrapper correspondant à l'entité et effectuez le filtrage de la requête entitéwrapper <cable> ew = new EntityWrapper <> (); ew.where ("type = {0}", 1) // .lily ("name", "roi") .and ("core_number = {0}", 24) .and ("is_delete = 0"); Page <Cable> Page = Nouvelle page <> (1,10); Page <Cable> PAGERST = CableService.SelectPage (page, EW); retour Pagerst; } / ** * Field de requête personnalisé * / @RequestMapping ("/ 3") @ResponseBody Public Object Test3 () {objet vl = null; // Construisez l'objet EntityWrapper correspondant à l'entité et effectuez la requête de filtrage entitéwrapper <cable> ew = new EntityWrapper <> (); ew.setsqlSelect ("id,` name`, "+" case type / n "+" Lorsque 1 puis '220KV' / n "+" end typename ") .where (" type = {0} ", 1) //like (" name "," king ") .where (false," voltage_level = # {0} ", vl); // quand vl est vide. Page <> (1,10); Page <Cable> PAGERST = CableService.SelectPage (page, EW); retour Pagerst; } / ** * INSERT * / @RequestMapping ("/ 4") @ResponseBody Public Object Test4 () {Cable C = new Cable (); C.SetName ("Test Optical Cable"); CableService.insert (C); retourner "ok"; } / ** * Update * / @RequestMapping ("/ 5") @ResponseBody Public Object Test5 () {Cable C = CableService.SelectById (22284L); C.SetName ("Test Optical Cable 2222"); C.SetType (1); CableService.updateByid (C); retourner "ok"; }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.