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