SpringBoot(16):SpringBoot統合Mybatis-Plus

18160 ワード

Mybatis-Plusは総じてMybatis Generatorより使いやすく、会社独自のフレームワークもこれで便利です.
このセクションのバージョンでは、基本的な特性しか使用されていませんが、ほとんどの削除変更を満たすことができます.
一、環境準備
  • SpringBoot 1.5.10.RELEASE
  • Mybatis-Plus 2.1.9

  • Mybatis-Plus公式アドレス:http://mp.baomidou.com/
    pom依存、便宜上、全部貼っておきましょう:
    
    
    	4.0.0
    
    	cn.saytime
    	springboot-mybatis-plus
    	0.0.1-SNAPSHOT
    	jar
    
    	springboot-mybatis-plus
    	SpringBoot With Mybatis Plus
    
    	
    		org.springframework.boot
    		spring-boot-starter-parent
    		1.5.10.RELEASE
    		 
    	
    
    	
    		UTF-8
    		UTF-8
    		1.8
    		1.3.8.RELEASE
    		1.0.26
    		2.1.9
    		1.0.5
    	
    
    	
    		
    			org.springframework.boot
    			spring-boot-starter
    		
    
    		
    		
    			com.alibaba
    			druid
    			${druid.version}
    		
    
    		
    		
    			mysql
    			mysql-connector-java
    			runtime
    		
    
    		
    		
    			com.baomidou
    			mybatisplus-spring-boot-starter
    			${mybatisplus-spring-boot-starter.version}
    		
    		
    			com.baomidou
    			mybatis-plus
    			${mybatis-plus.version}
    		
    
    		
    			org.springframework.boot
    			spring-boot-starter-test
    			test
    		
    	
    
    	
    		
    			
    				org.springframework.boot
    				spring-boot-maven-plugin
    			
    		
    	
    
    
    
    
    

    二、プロジェクト構造
    最初のプロジェクト構造をリストし、model、mapper、service、mapper xml、controllerについては自動的に生成します.
    SpringBoot(十六):SpringBoot整合Mybatis-Plus_第1张图片
    三、コード詳細
    データの準備
    testライブラリにuserテーブルを作成します.
    CREATE TABLE `user` (
      `id` bigint(20) NOT NULL COMMENT '  ID',
      `name` varchar(50) DEFAULT NULL COMMENT '   ',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='   '
    
    insert into `user` (`id`, `name`) values('1','  ');
    insert into `user` (`id`, `name`) values('2','  ');
    insert into `user` (`id`, `name`) values('3','  ');
    

    application.yml
    構成されたいくつかのパスをあなたのプロジェクトに変更することに注意してください.
    
    spring:
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false
        username: root
        password: root
    
    
    mybatis-plus:
      #      src/main/java    classpath:/com/yourpackage/*/mapper/*Mapper.xml
      #      resource   classpath:/mapper/*Mapper.xml
      mapper-locations: classpath:mybatis/mappers/*Mapper.xml
      #    ,  package         
      typeAliasesPackage: cn.saytime.model
      global-config:
        #      0:"   ID  ", 1:"    ID",2:"    ID (      ID)", 3:"    ID UUID";
        id-type: 0
        #     0:"    ",1:"  NULL   "),2:"    "
        field-strategy: 1
        #       
        #db-column-underline: true
        #  mapper     
        #refresh-mapper: true
        #          
        #capital-mode: true
        # Sequence         
        #key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
        #      (  3   )
        #logic-delete-value: 1
        #logic-not-delete-value: 0
        #sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
        #           
        #meta-object-handler: com.baomidou.springboot.MyMetaObjectHandler
      configuration:
        map-underscore-to-camel-case: true
        cache-enabled: false
        #  JdbcTypeForNull
        jdbc-type-for-null: 'null'
    
    

    druid.properties
    #--------------------------
    #            ,           
    #      ,  ,  
    spring.datasource.initialSize=5
    spring.datasource.minIdle=1
    spring.datasource.maxActive=50
    #              
    spring.datasource.maxWait=60000
    #              ,           ,     
    spring.datasource.timeBetweenEvictionRunsMillis=60000
    #                 ,     
    spring.datasource.minEvictableIdleTimeMillis=300000
    spring.datasource.validationQuery=SELECT 1 FROM DUAL
    spring.datasource.testWhileIdle=true
    spring.datasource.testOnBorrow=false
    spring.datasource.testOnReturn=false
    #   PSCache,         PSCache   
    spring.datasource.poolPreparedStatements=false
    #spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
    #          filters,       sql    ,'wall'     
    spring.datasource.filters=stat,wall,log4j
    #   connectProperties     mergeSql  ; SQL  
    spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    #     DruidDataSource     
    #spring.datasource.useGlobalDataSourceStat=true
    
    

    DruidConfiguration.java
    ここではcontrollerインタフェース方式でプレゼンテーションする必要はなく、testプレゼンテーションを使用してstarter-webを導入していないため、druidのservletは一時的に注釈され、使用するものがあれば開くことができ、依存を加えることができます.
    package cn.saytime.config;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.support.http.StatViewServlet;
    import com.alibaba.druid.support.http.WebStatFilter;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.boot.web.servlet.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.PropertySource;
    
    import javax.sql.DataSource;
    
    /**
     * @author zh
     * @ClassName cn.saytime.config.DruidConfiguration
     * @Description
     */
    @Configuration
    @PropertySource(value = "classpath:druid.properties")
    public class DruidConfiguration {
    
    	@Bean(destroyMethod = "close", initMethod = "init")
    	@ConfigurationProperties(prefix = "spring.datasource")
    	public DataSource druidDataSource() {
    		return new DruidDataSource();
    	}
    
    //
    //	/**
    //	 *     StatViewServlet
    //	 *
    //	 * @return
    //	 */
    //	@Bean
    //	public ServletRegistrationBean druidStatViewServlet() {
    //		//org.springframework.boot.context.embedded.ServletRegistrationBean        .
    //		ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
    //
    //		//       :initParams
    //		//   :
    //		servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
    //		//IP    (     ,deny   allow) :     deny    :Sorry, you are not permitted to view this page.
    ////		servletRegistrationBean.addInitParameter("deny", "192.168.1.73");
    //		//           .
    //		servletRegistrationBean.addInitParameter("loginUsername", "admin");
    //		servletRegistrationBean.addInitParameter("loginPassword", "123456");
    //		//        .
    //		servletRegistrationBean.addInitParameter("resetEnable", "false");
    //		return servletRegistrationBean;
    //	}
    //
    //	/**
    //	 *     :filterRegistrationBean
    //	 *
    //	 * @return
    //	 */
    //	@Bean
    //	public FilterRegistrationBean druidStatFilter() {
    //
    //		FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
    //
    //		//      .
    //		filterRegistrationBean.addUrlPatterns("/*");
    //
    //		//            .
    //		filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
    //		return filterRegistrationBean;
    //	}
    }
    
    

    MybatisConfiguration.java
    ここのMapperScanに注意して、あなたのプロジェクトmapperフォルダのパスに変えてください.
    package cn.saytime.config;
    
    import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * @author zh
     * @ClassName cn.saytime.config.MybatisConfiguration
     * @Description
     */
    @Configuration
    @MapperScan("cn.saytime.mapper*")
    public class MybatisConfiguration {
    
    	/*
        *     ,         
        *    ,     【    】
        */
    	@Bean
    	public PaginationInterceptor paginationInterceptor() {
    		return new PaginationInterceptor();
    	}
    
       /*
        * oracle     JdbcTypeForNull
        *   :https://gitee.com/baomidou/mybatisplus-boot-starter/issues/IHS8X
                ,   yml:
        mybatis-plus:
          confuguration
            dbc-type-for-null: 'null'
       @Bean
       public ConfigurationCustomizer configurationCustomizer(){
           return new MybatisPlusCustomizers();
       }
    
       class MybatisPlusCustomizers implements ConfigurationCustomizer {
    
           @Override
           public void customize(org.apache.ibatis.session.Configuration configuration) {
               configuration.setJdbcTypeForNull(JdbcType.NULL);
           }
       }
       */
    
    }
    
    

    コード作成ツールクラスGenerator.java
    データベースリンクと出力パスに変更すればいいです.
    package cn.saytime.util;
    
    import com.baomidou.mybatisplus.generator.AutoGenerator;
    import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
    import com.baomidou.mybatisplus.generator.config.GlobalConfig;
    import com.baomidou.mybatisplus.generator.config.PackageConfig;
    import com.baomidou.mybatisplus.generator.config.StrategyConfig;
    import com.baomidou.mybatisplus.generator.config.rules.DbType;
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
    
    /**
     * @author zh
     * @ClassName cn.aduu.util.Generator
     * @Description
     * @date 2018-02-22 11:37:14
     */
    public class Generator {
    
    	public static void main(String[] args) {
    		String packageName = "cn.saytime";
    		boolean serviceNameStartWithI = false;//auth -> UserService,    true: auth -> IUserService
    		generateByTables(serviceNameStartWithI, packageName, "saytime", "test", "user");
    
    		System.out.println("completed...");
    	}
    
    	/**
    	 * @param serviceNameStartWithI
    	 * @param packageName     
    	 * @param author    
    	 * @param database      
    	 * @param tableNames   
    	 */
    	private static void generateByTables(boolean serviceNameStartWithI, String packageName, String author, String database, String... tableNames) {
    		GlobalConfig config = new GlobalConfig();
    		String dbUrl = "jdbc:mysql://127.0.0.1:3306/" + database + "?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false";
    		DataSourceConfig dataSourceConfig = new DataSourceConfig();
    		dataSourceConfig.setDbType(DbType.MYSQL)
    				.setUrl(dbUrl)
    				.setUsername("root")
    				.setPassword("root")
    				.setDriverName("com.mysql.jdbc.Driver");
    		StrategyConfig strategyConfig = new StrategyConfig();
    		strategyConfig
    				.setCapitalMode(true)
    				.setEntityLombokModel(false)
    				.setDbColumnUnderline(true)
    				.setNaming(NamingStrategy.underline_to_camel)
    //				.setSuperMapperClass("cn.saytime.mapper.BaseMapper")
    				.setInclude(tableNames);//           ,       
    		config.setActiveRecord(false)
    				.setAuthor(author)
    				.setOutputDir("e:\\codeGen")
    				.setFileOverride(true)
    				.setEnableCache(false);
    		if (!serviceNameStartWithI) {
    			config.setServiceName("%sService");
    		}
    		new AutoGenerator().setGlobalConfig(config)
    				.setDataSource(dataSourceConfig)
    				.setStrategy(strategyConfig)
    				.setPackageInfo(
    						new PackageConfig()
    								.setParent(packageName)
    								.setController("web")
    								.setEntity("model")
    								.setMapper("mapper")
    								.setService("service")
    								.setServiceImpl("service.impl")
    								.setXml("mybatis.mappers")
    				).execute();
    	}
    
    }
    

    四、自動生成コード
    Generator Mainメソッドを実行し、出力パスに進むと、コードファイルが生成されていることがわかります.
    cn
        saytime
            model
                User.java
            mapper
                UserMapper.java
            service
                impl
                    UserServiceImpl.java
                UserService.java
            web
                UserController.java
            mybatis
                mappers
                    UserMapper.xml
    
    

    model,mapper,serviceをcnにコピーする.saytimeディレクトリの下でmybatis/mappersフォルダをsrc/main/resourcesディレクトリの下にコピーします.ここではcontrollerは表示されませんので、webはコピーされません.最終的なプロジェクト構造図は以下の通りです.
    SpringBoot(十六):SpringBoot整合Mybatis-Plus_第2张图片
    絵輪部分は自動的に生成されるコードで、具体的なコードの内容はここでは貼られません.
    五、テスト
    SpringbootMybatisPlusApplicationTests.java
    package cn.saytime;
    
    import cn.saytime.model.User;
    import cn.saytime.service.UserService;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import java.util.List;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SpringbootMybatisPlusApplicationTests {
    
    	@Autowired
    	private UserService userService;
    
    	@Test
    	public void contextLoads() {
    
    		//     
    		List users = userService.selectList(null);
    		System.out.println(users);
    
    	}
    
    }
    
    

    出力結果:
    [User{, id=1, name=  }, User{, id=2, name=  }, User{, id=3, name=  }]
    

    六、より多くの使用方法
    いくつかのよく使われる添削方法を列挙して、実は最も速い方法は公式サイトに行って例を見ることです.
  • クエリーid=1のユーザー
  • User user = userService.selectById(1);
    
  • クエリーname=張三のユーザー
  • User user = userService.selectOne(new EntityWrapper().eq("name", "  "));
    
  • クエリーid>1のユーザー
  • List userList = userService.selectList(new EntityWrapper().gt("id", 1));
    
  • id=1のユーザ名を変更
  • User user = userService.selectById(1);
    user.setName("  2");
    boolean b = userService.updateById(user);
    
  • ユーザーの追加
  • User user = new User();
    user.setName("  ");
    boolean insert = userService.insert(user);
    
  • ユーザの削除
  • boolean b = userService.deleteById(1);
    
  • ページング・クエリー・ユーザー
  • クエリーid>1ページに1つのデータ、2ページ目、すなわち3番目のデータ.
    Page<User> userPage = new Page<>();
    userPage.setCurrent(2);
    userPage.setSize(1);
    userService.selectPage(userPage, new EntityWrapper<User>().gt("id", 1));
    List<User> userList = userPage.getRecords();
    System.out.println(userList);
    
    [User{, id=3, name=  }]
    

    基本的な方法は、上記のように、公式ドキュメントを照会する他の要件があります.