A bota da primavera é uma coisa nova para mim. Durante meu processo de aprendizado, descobri que ainda é fácil começar. Quando a inicialização da primavera não estiver configurada, ela usará o Spring Data JPA por padrão. Pode -se dizer que essa coisa é uma ferramenta muito simples, mas ainda prefiro usar o Mybatis. Não existe a melhor ferramenta, apenas esta é adequada para mim.
Falando em Mybatis, há uma ferramenta muito útil recentemente - Mybatis -plus (site oficial). A versão atualizada agora é 2.1.2 e esta versão também é usada aqui. Meus recursos favoritos são geradores de código e construtores condicionais, para que possam ser desenvolvidos com mais facilidade.
Há um exemplo de inicialização da primavera no site oficial do Mybatisplus. Eu o segui e o programa não foi executado. Mais tarde, descobri que o banco de dados H2 usado pela demonstração não é o mesmo que MySQL. Portanto, se você deseja integrar o Mybatisplus, não pode olhar para o site oficial e evitar desvios.
A seguir, o processo de integração
1. Primeiro, você precisa obter todos os arquivos JAR necessários. As coisas que você precisa para pom.xml são as seguintes
pom.xml (incompleto)
<!-mybatis-plus BEGIN-> <Depency> <puerpiid> com.baomidou </groupiD> <TRATIFACTID> mybatisplus-spring-boot-starter </artifactId> <versão> 1.0.4 </versão> </dependency> <PuprouDId> com.baomidou </GrupoIdiD> <Version> 2.1.2 </sistER> </dependency> <pendency> <puperid> org.springframework.boot </groupiD> <TRARFACTID> Spring-boot-starter-jdbc </Artifactid> </dependency> <!-Mybatis-plus end-> <!-DRUID alibaTase <PuerpId> com.alibaba </frupiD> <ArtifactId> druid </artifactId> <versão> 1.1.3 </version> </dependency> <!-mysql-> <peDencency> <rugnit> mysql </proupid> <TarfactId> mysql-conconsector-java </artifactId> </purfactId> <stifactid> mysql-conconsection> </artifactId> </sconation> </sconation> </sconation> </sconation> </artiftid> </sconmand> </sconation> </sconation> </sconma </artiftId> </groupId> <stifactid> mysql-conconsector-java </artiftid> <GrupidId> org.mybatis.spring.boot </frugiD> <TRARFACTID> mybatis-spring-boot-starter </stutifactId> <versão> 1.3.1 </version> </dependency>
2. Adicione configurações relacionadas ao Mybatis, como conta, senha, etc. Aqui usei o Application.yml para corresponder.
Application.yml
Servidor: Porta: 8080#Springspring: DevTools: Reiniciar: Ativado: true#Isso é para implantação a quente e não está relacionado ao mybatis#banco de dados Config DataSource: Driver-class-name: com.mysql.jdbc.driver nome de usuário: root url: jdbc: mysql: // mysqldb: 3306/tdx_shop? useunicode = true & caracterEncoding = utf-8 type: com.alibaba.druid.pool.druiddataSource #re está configurando o pool de conexão druida. A seguir, são apresentadas todas as informações de configuração para filtros de druidas: estatística, parede, log4j maxactive: 20 Initialsize: 1 maxwait: 60000 minidle: 1 tempo TheenBeenEvictionRunSmillis: 60000 MineVictableIdLeTEMEMILLIS: 300000 ValidationQuery: selecione 'x' Testwileidle TreeilDorroworrowroworrowroworro: MaxopenPreparedStatements: 20 Propriedades de conexão: druid.stat.merggsql = ture; druid.stat.lowsqlmillis = 5000 #mybatismybatis: mapeper-locations: ClassPath*:/mapper/** mapper.xml #put o arquivo xml no xml loca Aqui está o mapeador em Scan #Entity Scan, vários pacotes são separados por vírgulas ou semicolons. TypeAliasespackage: com.tdx.account_service.entity #Esta é a localização da configuração da classe da entidade: mapa-underscore-to-came-case: True-Eilabled: False #LoggingLogging: Nível: Warn
O material de configuração é semelhante ao que usamos para configurar com MyBatis, mas a Spring Boot não possui um arquivo de configuração XML. Preste atenção ao conteúdo da carta vermelha, basicamente não há problema.
3. Arquivo de configuração Mybatis-plus ------ MyBatisplusConfig. Primeiro, vamos explicar o caminho do arquivo na figura acima. Entre eles, o MybatisplusConfig é colocado na pasta de configuração, enquanto o arquivo XML é colocado no mapeador sob resoues.
Depois, há a parte do conteúdo mybatisplusconfig
Mybatisproperties.java
pacote com.tdx.account_service.config; importar com.alibaba.druid.pool.druiddataSource; importar com.alibaba.druid.support.http.statviewServlet; import com.alibaba.druid.support.httttttlet; com.baomidou.mybatisplus.mybatisconfiguration; importar com.baomidou.mybatisplus.mybatisconfiguration; importar com.baomidou.mybatisplus.entity.enGalConfiguration; importância com.baomidou.mybatisplus.plugins.paginationInterceptor; importar com.baomidou.mybatisplus.plugins.performanceInterceptor; importar com.baomidou.mybatisplus.plugins.parser.isqlparser; importação com.baomidou.mybatisplus.plugins.parser.isqlparserFilter; importar com.baomidou.mybatisplus.plugins.parser.tenant.tenanthandler; import com.baomidou.mybatisplus.plugins.plugins com.baomidou.mybatisplus.spring.mybatissqlSessionFactoryBean; importação com.baomidou.mybatisplus.spring.boot.starter.springbootvfs; import com.baomidou.mybatisplus.toolkit.plugInTilis; net.sf.jsqlparser.expression.longValue; importar org.apache.ibatis.mapping.databaseidProvider; importar org.apache.ibatis.mapping.mappedstatement; importação org.apache.ibatis.plugin.intercetor; importação ou importação.apatis.reflection.ibatis.ibatis.plugin.intertor; importar.apache.reflexão.ibatis.ibatis.ibatis.plugin.intertor; org.mybatis.spring.annotation.mapperscan; importar org.mybatis.spring.boot.autoconfigure.mybatisproperties; import org.springframework.bean.factory.annotation.autowired; org.springframework.boot.context.properties.enableConfigurationProperties; importar org.springframework.boot.web.servlet.filterregistrationBean; importação org.springframework.web.servlet.ServletRectrationBeanBeanBean; org.springframework.context.annotation.bean; importar org.springframework.context.annotation.configuration; importar org.springframework.core.env.environment; import org.springframework.core.io.defaUlTRESOURCHOADER; org.springframework.core.io.ResourceLoader;import org.springframework.util.ObjectUtils;import org.springframework.util.StringUtils;import javax.sql.DataSource;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;/** * code is far away from bug with the animal protecting * ┏┓ ┏┓ * ┏┛━━━━━┛┻┓ * ┃ ┃ * ┃ ━ ┃ * ┃ ━ ┃ * ┃ ┳┛ ┗┳ ┃ * ┃ ┃ * ┃ ┃ * ┃ ┗┳ ┃ * ┃ ┃ * ┃ ┗┓ ┏━┛ * ┃ ┃ ┃ Bless of the beast* ┃ ┃ ┃ ┃ ┃ ┃ ┗┓ ┏┛ * ┃ ┃ ┃ BOLZE DA BEASTA * ┃ ┃ ┃ ┃ ┃ ┃ Sem insetos! * ┃ ┗━━━┓ * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ * ┃┫┫ ┃┫┫ * ┗┻┛ ┗┻┛ * * @Description: Configuração mybatisplus * • Private RelaxedPropertyResolver PropertyResolver; @Autowired Private DataSource DataSource; @Autowired Private MyBatisProperties Properties; @AUTOWIRED PRIFERTELECLOADER RESPONDELOADER = NOVA AFAULTRESOURCELOADER (); @AUTOWIRED (requerir = false) interceptores privados [] interceptores; @AUTOWIRED (requerir = false) Private DatabaseIdProvider DatabaseIdProvider; /** * @Description: Mybatis-plus SQL Execution Eficiência plug-in [pode ser fechado no ambiente de produção] * --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ @Bean Public DataSource DruidDataSource () lança SqLexception {this.ProperTyResolver = new RelaxedPropertyResolver (Ambiente, "Spring.datasource"); System.out.println("=============================================================================================== ==================================================================================================================== =================================================================================================================== ==================================================================================================================== DataSource ,seturl (PropertyResolver.getProperty ("URL"); DataSource.setInitialSize (Integer.Valueof (PropertyResolver.getProperty ("Size inicial"))); DataSource.SetMaxActive (Integer.Valueof (PropertyResolver.getProperty ("Max-Active"))); DataSource.SetFilters (PropertyResolver.getProperty ("Filters"); -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- : Create in 2017/9/19 13:59 */ @Bean public Paginação-Paginação-Páginação () {Paginação-Página de Paginação = Novo Paginação- mybatissqlsessfactoryBean () {mybatissqlsessionfactoryBean mybatisplus = new MyBatissqlSessionFactoryBean (); (Stringutils.hastext (this.properties.getConfigLocation ())) {mybatisplus.setConfigLocation (this.resourcelOader.getResource (this) (! Objectutils.isempty (this.intercepts)) {mybatisplus.setplugins (this.interceptores); Auto-> `0` (" ID do banco de dados Auto-incremento ") input->` 1` (ID de entrada do usuário ") id_worker->` 2` ("global ID exclusivo") uuid-> `3` (" Global Id Unique ") GlobalConfig.SetIdType (2); Mc.SetDefaultScripLanguage (MyBatisxMllanguage.class); (StringUtils.haslength (this.properties.gettypealiasespackage ()))) {mybatisplus.settypealiasespackage (this.properties.gettypealiasespackage ()); } if (stringUtils.HasLength (this.properties.gettypealiasespackage ());} if (stringUtils.haslength (this.properties.getTypeHandLersPackage ()) {mybatisplus.settyPeHandlerSackage (this.Properties.gettyPeHandPeHandPeHandMeHandLage (this.Properties.gettyPeHandsPeHandsPeHandsPeHandsPeHandsPackage (this.Properties.gettyPeHandPeHandsPeHandsPeHandSl)) (! Objectutils.isEmpty (this.properties.resolVemApperLocations ())) {mybatisplus.setmapperlocation (this.properties.resolVemApperLocation (); DruidStatViewServle () {//org.springframework.boot.context.embedded.servletRegistrationBean fornece a classe para registro. ServletRegistrationBean.addinitParameter ("Permitir", "127.0.0.1"); Senha para visualizar as informações. Registre um: FilterRegistrationBean * * @return */@Bean FilterRegistrationBean DruidStatFilter () {FilterRegistrationBean FilterRegistrationBean = New FilterRegistrationBean (New WebStatFilter (); FilterRegistrationBean.addinitParameter ("exclusões", "*. JS,*. GIF,*.Aqui está o arquivo de configuração completo. É importante observar que os pacotes introduzidos não estão incorretos!
4. Você também precisa ativar a digitalização da DAO. É muito simples. Adicione @mapperscan ("com.tdx.account_service.dao*") ao arquivo de inicialização. O seguinte é o completo.
Nesse ponto, a configuração foi concluída e você pode executar o projeto após executá -lo.
Eu acho que o mybatis-plus é a parte mais divertida do gerador de código. A seguir, o processo de usar o gerador de código
Adicione algo ao pom.xml
<Depencency> <PuerpId> org.apache.velocity </groupiD> <TRARFACTID> Velocity-MENGINE-CORE </ArtifactId> <versão> 2.0 </versão
1. Arquivo de configuração do gerador de código
Mybatisplusconfig.java
/*** Copyright (c) 2011-2016, Hubin ([email protected]). * <P> * licenciado sob a licença Apache, versão 2.0 (a "licença"); Você não pode * usar este arquivo, exceto em conformidade com a licença. Você pode obter uma cópia de * a licença em * <p> * http://www.apache.org/license/license-2.0 * <p> *, a menos que exigido pela lei aplicável ou acordada por escrito, o software * distribuído sob a licença é distribuído ou figurado. Consulte a * licença para o idioma específico que rege as permissões e limitações em * a licença. */pacote com.tdx.account_service.generator; importar java.io.file; importar java.util.arraylist; importar java.util.collections; import java.util.hashmap; com.baomidou.mybatisplus.generator.aUtoGenerator; importar com.baomidou.mybatisplus.generator.injectionConfig; import com.baomidou.mybatisplus.generator.config.datasourcuConfig; import.Baomidou.MyBONCONFig.datasourCuConfigu; com.baomidou.mybatisplus.generator.config.globalconfig; importar com.baomidou.mybatisplus.generator.config.packageconfig; import com.baomidou.mybatisplus.generator.config.strategicsrategyfig com.baomidou.mybatisplus.generator.config.templateconfig; importar com.baomidou.mybatisplus.generator.config.converts.mysqltypeConvert; import com.baomou.mybatisplus.generator.config.pig.pig.POMBLE.POMBLE.POMBLE.POMBLE.POMBLE.POMBLE.POMBLE.POMBLE.POMBLE.POMBLE.POMBLE.POMBLEMELTRATE.CONCONFIG.PECO.POMBLE.POMBLEMELTOR.CONCIG.PECOMBOMBOMELTRATE.CONCOMBOMELTRATOR.CONFIG.PECOMBOME com.baomidou.mybatisplus.generator.config.po.tableInfo; importar com.baomidou.mybatisplus.generator.config.rules.dbcolumntype; import com.baomidou.mybatisplus.Generator.contype; com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;/** *code is far away from bug with the animal protecting * ┏┓ ┏┓ *┏┛━━━━━━━┛┻┓ *┃ ┃ *┃ ━ ┃ *┃ ┳┛ ┗┳ ┃ *┃ ┃ *┃ ┃ *┃ ┃ *┗━┓ ┏━┛ * ┃ ┃ ┃ Bless the beast* ┃ ┃ ┃ ┃ code without Bugs! * ┃ ┗━━━┓ * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ * ┃┫┫ ┃┫┫ * ┗┻┛ ┗┻┛ * * @Description: MyBatisplus Code Gerator * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Caminho do arquivo Private Static String autorname = "liang.guangqing"; // Autor private Static String tabela = "SC_USER"; // Nome da tabela Private Static String prefix = "SC_"; // tabela prefixo arquivo estático privado arquivo arquivo = novo arquivo (packagename); Path de sequência estática privada = FILE.GETABSOLUTEPATH (); public static void main (string [] args) {// personalize os campos que precisam ser preenchidos na lista <BOLFILL> tabelafilllist = new ArrayList <> (); tablefilllist.add (novo tabela ("asdd_ss", fieldfill.insert_update)); // Gerador de código Autogerator mpg = new AutoGenerator (). SetGlobalConfig (// Configuração global new GlobalConfig () .SetOutputDir (Path+"/src/main/java") // emput Directory.setFileOverride (true) //ing se overwrite o arquivo.setTiverCord () (true -s) //trecrort (s)/java ") //satiVecord.SetfileOverride (true) //ing se para o supenershet.SettiverCord (). Xml cache secundário.setBaseResultMap (true) // xml ResultMap .SetBaseColumnList (true) // xml columnList .SetOpen (false) // Abra a pasta após a geração de signo. .setxmlName ("%smapper") .SetServicename ("%sService") .SetServiceImplName ("%SServiceImpl") .SetControllerName ("%scontroller"). type.setTyPeConvert (new MySqlTypeConvert () {// Personalize o tipo de campo Tipo de campo Tipo de campo Conversão [opcional] @Override public dbcolumnType ProcessTyPeconvert (String FieldTypes) {System.out.println ("Tipo de conversão:" + fieldType); //fieldtyPe.TenTe.TenTe (SystemPe.T) // retorna dbcolumntype.boolean; .Seturl ("JDBC: mysql: //127.0.0.1: 3306/tdx_shop? caracterencoding = utf8") .SetStrategy (// Configuração de políticas New StradicionConfig () //. naming.setTablePrefix (new String [] {prefix}) // Aqui você pode modificá -lo no seu prefixo de tabela.Setnaming (namingstrategy.underline_to_camel) // tabela de geração de nomes.setResttClud String [] {"test"}) // exclua a tabela gerada // entidade personalizada classe pai // .SetSuperEntityClass ("com.baomidou.demo.testentity") // entidade personalizada, Public Field //.SetSuperentityColumns(New String [] {"test_id"}). .SetSuperMApCerclass ("com.baomidou.demo.testmapper") // Serviço personalizado Class de painel // .SetSuperServiceclass ("com.baomidou.demo.test.Service") // Serviço personalizado Classe de implementação da classe pai // .SetSoSPericeImplasTsCl ("com.baom.baom.baom.baom.baom.Bertice.baom.Bertice.Bansomidou.Bertice.BER.BER.BERSOMIDOM.BER.BER.BER.BER.BER.BERTIMIDOM.BER.BER.BER.BER.BER.BER.BER.BERSOMIDU. .SetSuperControllerClass ("com.tdx."+packagename+". {this.name = nome; .SetentityBooleAnColumnRemoVeSPrefix (true) // .SetRestControllersTyle (true) // .SetControllerMappingHyphenstyle (true)) .setpackageinfo (// packageconfig () // .Setmodulename ("user"). Path.SetController ("Controller") // Aqui está o nome do pacote do controlador, Web padrão .Setentity ("Entidade") .SetMapper ("Dao") .SetService ("Service") .SetServiceImpl ("Service.Impl") //.setxml"MappApp Injeção de injeção () {@Override public void initMap () {map <string, object> map = new hashmap <> (); } .setFileoutConfiglist (Compoletes. <FileOutConfig> singletonList (new FileOutConfig ("/modaMeds/mapper.xml.vm") {// Diretório de arquivo de saída personalizado @Override public Stringfile (TableInfo tabela) {Return Path + "/sride "Mapper.xml"; SRC/Recursos/Modelo Diretor de Modelo. ); // execute para gerar mpg.execute (); // As configurações de injeção de impressão, aqui demonstram como obter o conteúdo de injeção no modelo [Noble] System.err.println (mpg.getcfg (). GetMap (). Get ("ABC")); }}
Ainda existem muitas modificações no arquivo. O mais importante é a informação de conexão do MySQL. Não há razão para que sua conta e senha estejam erradas. Você pode se conectar a ele. Em segundo lugar, defina o caminho do arquivo de modelo que você gerou. O caminho que gerei aqui pode ser visto na figura acima. Está em com.tdx.account_service. Observe que o arquivo XML deve ser colocado em recursos, caso contrário, será reconhecido e disse que esse método não pode ser encontrado.
Os arquivos gerados de acordo com o modelo de código do site oficial estão basicamente em branco. O principal motivo é que o Mybatis-plus integra métodos públicos, e muitas ferramentas comumente usadas podem ser referenciadas. Aqui eu forneço o arquivo controller.java.vm que modifiquei, principalmente de acordo com meus próprios hábitos.
controller.java.vm
pacote $ {package.controller}; importar org.springframework.web.bind.annotation.requestMapping; importar org.springframework.web.bind.annotation.requestparam; #if ($ {reestcontrollStyle}) import.springframwames; org.springframework.web.bind.annotation.restcontroller; #elseimport org.springframework.steretype.controller;#end#if ($ {supercontrollerspackage}) import $ {SuperControllClasspackage}; endiMport org.springframework.beans.factory.annotation.autowired; importar com.baomidou.mybatisplus.mapper.entityWrapper; import com.baomidou.mybatisplus.plugins.page; import $ {package.service}. ${package.Entity}.common.DatatablesJSON;import ${package.Entity}.common.JSONResult;import ${package.Entity}.${entity};import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** *code is far away from bug with the animal protecting * ┏┓ ┏┓ *┏┛━━━━┛┻┓ *┃ ┃ *┃ ┳┛ ┗┳ ┃ *┃ ┃ *┃ ┃ *┃ ┗┳ ┃ *┃ *┃ ┗┳ ┃ *┃ ┃ *┃ ┗┓ ┏━┛ *┃ *┃ ┃ *┗┓ ┏━┛ *┃ ┃ ┃ *┃ *┗┓ ┏━┛ *┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ *┃ * * ┃ ┗━━━┓ * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ * ┃┫┫┃┫ * ┗┻┛ ┗┻┛ * * @Description: $ {entidade} controlador * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */#if ($ {RestControllersTyle})@RestController#else@controlador#end@requestmapping ("#if ($ {package.modulename})/$ {package.modulename}# end/#if ($ {controlermappinghyphenstyle}) $ {controlermappinghyphen}#else $ {table.entityPath} #end ")#if ($ {supercontrollerclass}) public classe $ {tabela.ControllerName} estende $ {supercontrollerclass} {#elsepublic class $ {table.ControllerName} {#END private final Logger Logger = LoggerFactory.getLogger ($ {table.ControllerName} .Class); @AUTowired Public $ {table.Servicename} $ {table.entityPath} Service; /*** @Description: Obtenha a lista de paginação* ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------ Get $ {entity} list ($ {entity} param, @RequestParam (value = "draw", defaultValue = "0") Draw inteiro, @RequestParam (value = "length") integlemjson, @ReQuestParam (value = "start) start) {datatablesjson <$ {{entidade" {{{{{entra)); tente {integer pageno = getPageno (start, comprimento); Página <$ {entity}> página = nova página <$ {entity}> (pageno, comprimento); $ {table.entityPath} Service.SelectPage (página, novo entityWrapper <$ {entity}> (param)); resjson.setDraw (draw ++); resjson.setRecordStotal (Page.gettotal ()); resjson.setRecordsFiltered (Page.gettotal ()); resjson.setData (Page.GetRecords ()); Resjson.SetSuccess (true); } catch (Exceção e) {Resjson.SetSuccess (false); resjson.setError ("Informações de exceção: {"+e.getclass (). getName ()+"}"); logger.info ("Informações de exceção: {}"+e.getMessage ()); } retornar resjson; } /** * @Description: Get $ {entidade} por id * • id) {jsonResult <$ {entity}> resjson = novo jsonResult <> (); tente {$ {entity} param = $ {tabela.entityPath} Service.SelectById (id); resjson.setData (param); Resjson.SetSuccess (true); } catch (Exceção e) {Resjson.SetSuccess (false); resjson.setMessage ("Informações de exceção: {"+e.getclass (). getName ()+"}"); logger.info ("Informações de exceção: {}"+e.getMessage ()); } retornar resjson; } /** * @Description: exclua $ {entidade} por id * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- JsonResult <> (); tente {resjson.SetSuccess ($ {table.entityPath} Service.DeleteById (id)); } catch (Exceção e) {Resjson.SetSuccess (false); resjson.setMessage ("Informações de exceção: {"+e.getclass (). getName ()+"}"); logger.info ("Informações de exceção: {}"+e.getMessage ()); } retornar resjson; } /** * @description : Update ${entity} by id * -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @since : Create in $ {date} */ @RequestMapping (value = "/ update $ {entity} byid", método = requestmethod.post) public objeto update $ {entity} byid ($ {entity} param) {jsonResult <$ {entity}> resjson = novo jsonresult <> (); tente {resjson.SetSuccess ($ {table.entityPath} service.UpDateById (param)); } catch (Exceção e) {Resjson.SetSuccess (false); resjson.setMessage ("Informações de exceção: {"+e.getclass (). getName ()+"}"); logger.info ("Informações de exceção: {}"+e.getMessage ()); } retornar resjson; } /** * @Description: Adicione $ {entidade} * • JsonResult <$ {entity}> resjson = novo jsonResult <> (); tente {resjson.SetSuccess ($ {table.entityPath} service.insert (param)); } catch (Exceção e) {Resjson.SetSuccess (false); resjson.setMessage ("Informações de exceção: {"+e.getclass (). getName ()+"}"); logger.info ("Informações de exceção: {}"+e.getMessage ()); } retornar resjson; }}Além deste arquivo, sigo o site oficial dos outros modelos de código. Aqui, refiro -me a 3 arquivos externos, incluindo abstractcontroller.java (classe base do controlador), datatablesjson.java e jsonresult.java. Em seguida, esses arquivos se referem a outros arquivos. Eu estava confuso. Por que existem tantos arquivos? Parece que, se todos forem publicados, ele ocupará mais espaço. Então, eu escolhi acreditar na nuvem de código. Se precisar, faça o download da nuvem de código de acordo com os poucos arquivos na nuvem de código. Deve-se notar que meus modelos são diretamente substituídos pelo diretório de modelos em mybatis-plus.jar.
Finalmente, é o processo de teste
Os seguintes trechos de código são colocados no arquivo do controlador e, em seguida, o programa é iniciado, correspondendo à porta e ao método de solicitação. Para testes, você precisa operar de acordo com sua própria classe de entidade, por isso é apenas para referência.
/** * página de paginação */@getMapping ("/teste") PÁGINA PÚBLICA <SUSER> test () {return userservice.leclectpage (nova página <suser> (0, 12)); }/*** Teste parcial AR*/@GetMapping ("/test1") PÁGINA PUBLICA <VERSE> TEST1 () {User User = new User (); System.err.println ("Exclua todos:" + user.Delete (null)); //User.SetId(2017091801L); user.setAccout ("teste"+num ++); user.setType ("teste"); 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()); resultado de retorno; } /** * 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(); }这么多的测试,我觉得最有趣的是条件构造器,在官网上有更齐全的,而我这里是按照我自己的需求写的。
最后谢谢大家的观看,写博客经验不足,写得不好请见谅,如果能给你带来帮助请点个赞,若遇到不明白的,或者我有写错的地方请提出,谢谢!也希望大家多多支持武林网。