千家信息网

spring boot DAO之Mybatis的示例分析

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍了spring boot DAO之Mybatis的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。依赖
千家信息网最后更新 2026年11月04日spring boot DAO之Mybatis的示例分析

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

依赖

                    org.springframework.boot            spring-boot-starter-data-jpa                            mysql            mysql-connector-java                            org.mybatis.spring.boot            mybatis-spring-boot-starter            1.3.2        

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=

源码-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 configurationCustomizers;  public MybatisAutoConfiguration(MybatisProperties properties,                                  ObjectProvider interceptorsProvider,                                  ResourceLoader resourceLoader,                                  ObjectProvider databaseIdProvider,                                  ObjectProvider> 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 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@Mapperpublic 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")@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());    }}

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

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

数据 篇文章 数据库 示例 分析 源码 检测 配置 价值 兴趣 同时 字符 密码 时候 更多 朋友 注解 用户 用户名 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 中国互联网科技工作委员会毛军 互联网科技未来 美国互联网科技 有马互联网科技 成都互联网科技公司 贷财互联网科技 西安互联网科技公司 友谊互联网络科技 滨湖区互联网智能科技产品供应 北京大学互联网科技怎么样 杭州壁岐互联网科技有限公司 洛阳昕诺飞互联网科技有限公司 互联网数据科技专业 沐思想互联网科技有限公司 南京一网一红互联网科技有限公司 神州科技互联网有限公司 上海同邻互联网科技有限公司规模 科技互联网行业投资研究 互联网科技博主张洲 重庆互联网络科技 青岛互联网科技公司 杭州互联网科技公司 成都仁贤领冠互联网科技有限公司 开启互联网科技时代小说 港股科技和互联网 特约风豹互联网科技为什么扣费 互联网界的黑科技 互联网科技创新创业项目 山东亿川互联网科技有限责任公司
0