Spring Boot DAO's MyBatis

Source: Internet
Author: User
Tags static class

Dependent

        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-jpa</artifactId>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>1.3.2</version>        </dependency>

Application-database.properties

#初始化数据库的时候,如果错误,是否继续启动。spring.datasource.continue-on-error=false#jdbc driver.默认通过uri来自动检测。spring.datasource.driver-class-name=com.mysql.jdbc.Driver#jdbc url.连接数据库的urispring.datasource.url=jdbc:mysql://172.28.1.227:3310/fc?useUnicode=true&autoReconnect=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useServerPrepStmts=false#数据库连接用户名spring.datasource.username=fcdev#数据连接密码spring.datasource.password=123456#全限定名,连接池。默认自动检测classpathspring.datasource.type=com.zaxxer.hikari.HikariDataSource#sql脚本字符spring.datasource.sql-script-encoding=UTF-8#mybatis配置mybatis.check-config-location=falsemybatis.configuration.default-fetch-size=1000mybatis.configuration.map-underscore-to-camel-case=true#mybatis.mapper-locations=

SOURCE-mybatisproperties

@ConfigurationProperties (prefix = mybatisproperties.mybatis_prefix) public class Mybatisproperties {public static  Final String mybatis_prefix = "MYBATIS";   /** * location of MyBatis XML config file.  */Private String configlocation;   /** * Locations of MyBatis mapper files.  */private string[] mapperlocations; /** * Packages to search type aliases. (Package delimiters is ",;  \t\n ") */private String typealiasespackage; /** * Packages to search for type handlers. (Package delimiters is ",;  \t\n ") */private String typehandlerspackage;   /** * Indicates whether perform presence check of the MyBatis XML config file.  */Private Boolean checkconfiglocation = false;   /** * Execution mode for {@link org.mybatis.spring.SqlSessionTemplate}.  */Private Executortype executortype;   /** * externalized properties for MyBatis configuration.  */Private Properties configurationproperties; /** * A Configuration object for customize default settings. If {@link #cOnfiglocation} * is specified, the property is not used. */@NestedConfigurationProperty private configuration;}

Source-mybatisautoconfiguration

@org. Springframework.context.annotation.configuration@conditionalonclass ({sqlsessionfactory.class, Sqlsessionfactorybean.class}) @ConditionalOnBean (Datasource.class) @EnableConfigurationProperties ( Mybatisproperties.class) @AutoConfigureAfter (datasourceautoconfiguration.class) public class mybatisautoconfiguration {private static final Logger Logger = Loggerfactory.getlogger (mybatisautoconfiguration.class  );  Private final mybatisproperties properties;  Private final interceptor[] interceptors;  Private final Resourceloader Resourceloader;  Private final Databaseidprovider Databaseidprovider;  Private final list<configurationcustomizer> configurationcustomizers; Public Mybatisautoconfiguration (Mybatisproperties properties, objectprovider<intercept                                  Or[]> Interceptorsprovider, Resourceloader Resourceloader,              Objectprovider<databaseidprovider> Databaseidprovider,                    Objectprovider<list<configurationcustomizer>> Configurationcustomizersprovider) {this.    Properties = properties;    This.interceptors = Interceptorsprovider.getifavailable ();    This.resourceloader = Resourceloader;    This.databaseidprovider = Databaseidprovider.getifavailable ();  This.configurationcustomizers = Configurationcustomizersprovider.getifavailable (); } @PostConstruct public void Checkconfigfileexists () {if (This.properties.isCheckConfigLocation () && Stringu Tils.hastext (This.properties.getConfigLocation ())) {Resource Resource = This.resourceLoader.getResource (      This.properties.getConfigLocation ()); Assert.state (Resource.exists (), "Cannot find config location:" + resource + "(please add config file or check y    Our Mybatis configuration) ");  }} @Bean @ConditionalOnMissingBean public sqlsessionfactory sqlsessionfactory (DataSource DataSource) throws Exception {Sqlsessionfactorybean factory = new SQLSessionfactorybean ();    Factory.setdatasource (DataSource);    FACTORY.SETVFS (Springbootvfs.class); if (Stringutils.hastext (This.properties.getConfigLocation ())) {Factory.setconfiglocation (    This.resourceLoader.getResource (This.properties.getConfigLocation ()));    } Configuration Configuration = This.properties.getConfiguration (); if (configuration = = NULL &&!)    Stringutils.hastext (This.properties.getConfigLocation ())) {configuration = new configuration (); } if (configuration! = NULL &&!) Collectionutils.isempty (This.configurationcustomizers)) {for (Configurationcustomizer Customizer:this.configurati      Oncustomizers) {customizer.customize (configuration);    }} factory.setconfiguration (configuration); if (this.properties.getConfigurationProperties () = null) {factory.setconfigurationproperties (    This.properties.getConfigurationProperties ()); } if (! Objectutils.isempty (this.interceptors)) {Factory.setplugins (tHis.interceptors);    } if (This.databaseidprovider! = null) {Factory.setdatabaseidprovider (This.databaseidprovider); } if (Stringutils.haslength (This.properties.getTypeAliasesPackage ())) {Factory.settypealiasespackage (This.propert    Ies.gettypealiasespackage ()); } if (Stringutils.haslength (This.properties.getTypeHandlersPackage ())) {Factory.settypehandlerspackage (this.prope    Rties.gettypehandlerspackage ()); } if (! Objectutils.isempty (This.properties.resolveMapperLocations ())) {Factory.setmapperlocations (    This.properties.resolveMapperLocations ());  } return Factory.getobject ();    } @Bean @ConditionalOnMissingBean public sqlsessiontemplate sqlsessiontemplate (sqlsessionfactory sqlsessionfactory) {    Executortype Executortype = This.properties.getExecutorType ();    if (executortype! = null) {return new Sqlsessiontemplate (Sqlsessionfactory, Executortype);    } else {return new sqlsessiontemplate (sqlsessionfactory); }  }  /**   * This would just scan the same base package as Spring Boot does. If you want * More power, you can explicitly use * {@link Org.mybatis.spring.annotation.MapperScan} and this would get   Typed * mappers working correctly, Out-of-the-box, similar to using Spring Data JPA * repositories. */public static class Autoconfiguredmapperscannerregistrar implements Beanfactoryaware, Importbeandefinitionregistr    AR, resourceloaderaware {private beanfactory beanfactory;    Private Resourceloader Resourceloader; @Override public void Registerbeandefinitions (Annotationmetadata importingclassmetadata, Beandefinitionregistry      Registry) {Logger.debug ("Searching for mappers Annotated with @Mapper");      Classpathmapperscanner scanner = new Classpathmapperscanner (registry);        try {if (This.resourceloader! = null) {Scanner.setresourceloader (This.resourceloader);     } list<string> Packages = Autoconfigurationpackages.get (this.beanfactory);   if (logger.isdebugenabled ()) {for (String pkg:packages) {logger.debug ("Using auto-configuration          Base package ' {} ', pkg);        }} scanner.setannotationclass (Mapper.class);        Scanner.registerfilters ();      Scanner.doscan (Stringutils.tostringarray (packages));  } catch (IllegalStateException ex) {logger.debug ("Could not determine auto-configuration package, automatic mapper      Scanning disabled. ", ex);  }} @Override public void Setbeanfactory (Beanfactory beanfactory) throws beansexception {this.beanfactory =    Beanfactory; } @Override public void Setresourceloader (Resourceloader resourceloader) {This.resourceloader = Resourceloader    ; }}/** * {@link Org.mybatis.spring.annotation.MapperScan} ultimately ends up * creating instances of {@link Mapperf Actorybean}. If * {@link Org.mybatis.spring.annotation.MapperScan} is used then this * auto-configuration is not needed. If it is _not_ uSED, however, then this * would bring in a beans registrar and automatically register components based * on the same COM   Ponent-scanning path as Spring Boot itself. */@org. Springframework.context.annotation.Configuration @Import ({autoconfiguredmapperscannerregistrar.class}) @    Conditionalonmissingbean (mapperfactorybean.class) public static class Mapperscannerregistrarnotfoundconfiguration {     @PostConstruct public void Afterpropertiesset () {logger.debug ("No {} found.", MapperFactoryBean.class.getName ()); }  }}

Testmybatisdao

@Repository@Mapperpublic interface TestMybatisDao {    @Select("select id, name from t_sys_menu where id = #{id}")    SysMenu getById(@Param("id") int id);}

Springboot Startup class

@MapperScan(basePackages="com.example.spring.dao")@SpringBootApplicationpublic class DataDemoApplication {    public static void main(String[] args) {        SpringApplication.run(DataDemoApplication.class, args);    }}

Appcontexttest

@RunWith(SpringRunner.class)@SpringBootTestpublic class AppContextTest {    @Autowired    private TestMybatisDao testMybatisDao;    @Test    public void mybatisTest(){        SysMenu sysMenu = testMybatisDao.getById(1);        System.out.println("menuName = " + sysMenu.getName());    }}

Note: Mybatis-spring-boot-starter can use both XML configuration and annotations.

MyBatis Custom Configuration: http://blog.51cto.com/881206524/2122449

Spring Boot DAO's MyBatis

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.