温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

spring boot DAO之Mybatis的示例分析

发布时间:2021-12-15 11:49:42 来源:亿速云 阅读:187 作者:小新 栏目:软件技术

这篇文章主要介绍了spring boot DAO之Mybatis的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

依赖

        <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.连接数据库的uri spring.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 #全限定名,连接池。默认自动检测classpath spring.datasource.type=com.zaxxer.hikari.HikariDataSource #sql脚本字符 spring.datasource.sql-script-encoding=UTF-8 #mybatis配置 mybatis.check-config-location=false mybatis.configuration.default-fetch-size=1000 mybatis.configuration.map-underscore-to-camel-case=true #mybatis.mapper-locations=

源码-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 are ",; \t\n")    */   private String typeAliasesPackage;   /**    * Packages to search for type handlers. (Package delimiters are ",; \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, this property is not used.    */   @NestedConfigurationProperty   private Configuration configuration; }

源码-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<Interceptor[]> 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() && StringUtils.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 your 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.configurationCustomizers) {         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.properties.getTypeAliasesPackage());     }     if (StringUtils.hasLength(this.properties.getTypeHandlersPackage())) {       factory.setTypeHandlersPackage(this.properties.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 will 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} but this will get typed    * mappers working correctly, out-of-the-box, similar to using Spring Data JPA    * repositories.    */   public static class AutoConfiguredMapperScannerRegistrar       implements BeanFactoryAware, ImportBeanDefinitionRegistrar, 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 MapperFactoryBean}. If    * {@link org.mybatis.spring.annotation.MapperScan} is used then this    * auto-configuration is not needed. If it is _not_ used, however, then this    * will bring in a bean registrar and automatically register components based    * on the same component-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 @Mapper public interface TestMybatisDao {     @Select("select id, name from t_sys_menu where id = #{id}")     SysMenu getById(@Param("id") int id); }

springboot启动类

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

AppContextTest

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

注:mybatis-spring-boot-starter既可以使用xml配置也可以使用注解。

感谢你能够认真阅读完这篇文章,希望小编分享的“spring boot DAO之Mybatis的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI