SpringBoot Mybatis 配置文件形式详解

目录
  • 1. 概述
  • 2. 单独配置mybatis-config.xml
    • 2.1 配置内容
    • 2.2 辅助类
    • 2.3 调用操作
  • 3. application.yml配置mybatis
    • 3.1 配置内容
    • 3.2 辅助类
    • 3.3 调用操作
  • 4. 结语

开发环境: IDEA 2022.1.4+ Mybatis

1. 概述

在之前BiliBili学习SprintBoot时候,按照视频敲代码,SpringBoot集成MyBatis,是单独写了一个mybatis-config.xml文件。配置数据连接以及mapper等信息。后来问了下从事Java得同事,告知mybatis-config.xml文件其实可以写到application.yml。当时也没弄清楚。后来摸索中,也就渐渐明白了。

2. 单独配置mybatis-config.xml

2.1 配置内容

当时视频学习,也写下学习得总结。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--configuration核心配置文件-->
<!--顺序 properties->settings->typeAliases->typeHandlers->objectFactory->objectWrapperFactory->reflectorFactory->plugins->environments->databaseIdProvider->mappers-->
<configuration>
    <!--jdbc.properties配置文件-->
    <properties resource="jdbc.properties"></properties>

    <!--设置mybatis输出日志 Mybatis默认就是STDOUT_LOGGING-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <!--  类型别名 默认为类名 指定这个后 mapper的xml文件指定返回值时候 可直接写类名(不区分大小写) 建议直接拷贝类名  -->
    <typeAliases>
        <package name="com.ceaning.crudp.entity"/>
    </typeAliases>

    <!-- 环境配置 -->
    <!-- development IDEA默认 开发环境 -->
    <!-- 可以自定义 比如定义test formal 看心情 每个SqlSessionFactory实例只能选择一种环境 这个可随时配置 -->
    <!-- test 测试环境 -->
    <!-- formal 正式环境 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 映射器 每一个mapper.xml都需要在Mybatis的核心文件中注册! -->
    <!-- 注册方式1 使用xml文件 <mapper resource="com/ceaning/efmis/mapper/UserMapper.xml"/> -->
    <!-- 注册方式2 使用class文件 <mapper class="com.ceaning.efmis.mapper.UserMapper"/> -->
    <!-- 注册方式3 mapper代理方式 <package name="com.ceaning.efmis.mapper"/> -->
    <!--
        注册方式2(使用class文件)和注册方式3(使用包扫描注册)
        1.接口和他的Mapper配置文件必须同名
        2.接口和他的Mapper配置文件必须在同一个包下
    -->
    <mappers>
        <package name="com.ceaning.crudp.mapper"/>
    </mappers>
</configuration>

jdbc.properties内容如下:

单独写jdbc得配置,是担心以后要是部署成WAR形式,修改mybatis-config.xml内容得话,内容太多,防止修改错,就单独搞个jdbc配置。(其实我想多了)

driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://127.0.0.1:1433;databaseName=EFMIS
username=sa
password=123qwe,.

2.2 辅助类

辅助类得作用在于初始调用类得时候,实现配置加载,并创建SqlSessionFactory,方便后面进行SQL查询。

public class MybatisUtils {
    //SqlSessionFactory 静态单例模式
    private static SqlSessionFactory sqlSessionFactory;

    //使用Mybatis第一步 获取SqlSessionFactory对象
    static {
        try{
            String resource="mybatis-config.xml";
            InputStream inputStream= Resources.getResourceAsStream(resource);
            sqlSessionFactory= new SqlSessionFactoryBuilder().build(inputStream);
        } catch (Exception e){
            e.printStackTrace();
        }
    }

    //获取SqlSession实例
    //该实例包含了面向数据库执行sql命令所需要的所有方法
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

2.3 调用操作

此处我以登录操作为例。这样就可以连接数据库进行操作。

@PostMapping("/user/login")
    public Result<?> login(@RequestBody User user){
        SqlSession sqlSession= null;
        Map<String, Object> map= new HashMap<>();
        try{
            sqlSession= MybatisUtils.getSqlSession();
            UserMapper mapper= sqlSession.getMapper(UserMapper.class);
            user= mapper.login(user);
            if (user!= null){
                //生成token
                Map<String, String> tokenmap= new HashMap<>();
                tokenmap.put("loginname", user.getLoginname());
                tokenmap.put("password", user.getPassword());
                String token= JwtUtils.getToken(tokenmap);
                //返回数据
                map.put("user", user);
                map.put("token", token);
                return Result.ok(map);
            } else {
                return Result.error(CommonConstant.SYS_ERR_CODE, "用户不存在!");
            }
        } catch (Exception e){
            e.printStackTrace();
            return Result.error("异常!"+ e.getMessage());
        } finally {
            if (sqlSession!= null){
                sqlSession.close();
            }
        }
    }

3. application.yml配置mybatis

3.1 配置内容

多余得内容不用管它。主要是配置数据源spring.datasource。配置数据库连接信息。

Server:
  port: 8090

spring:
  # quartz定时任务配置
  quartz:
    # 数据库存储方式
    job-store-type: jdbc
    org:
      quartz:
        jobStore:
          class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
  #配置数据源
  datasource:
    url: jdbc:sqlserver://127.0.0.1:1433;SelectMethod=cursor;databaseName=EFMIS
    username: sa
    password: 123qwe,.
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
  #json
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  #热部署
  devtools:
    restart:
      enabled: true
      additional-paths: src/main/java
      exclude: static/**
  jta:
    atomikos:
      properties:
        recovery:
          forget-orphaned-log-entries-delay:
mybatis:
  configuration:
    #开启驼峰映射
    map-underscore-to-camel-case: true
    #开启缓存
    cache-enabled: true
  #加载mapper.xml文件
  mapper-locations: classpath:com/ceaning/crudp/mapper/*.xml
  #别名扫描
  type-aliases-package: com.ceaning.crudp.entity
logging:
  config: classpath:logback-spring.xml

3.2 辅助类

@Component
public class SpringUtils implements BeanFactoryPostProcessor {
    /**
     * Spring应用上下文环境
     */
    private static ConfigurableListableBeanFactory beanFactory;

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
        SpringUtils.beanFactory= configurableListableBeanFactory;
    }

    public static <T> T getBean(String name) throws BeansException{
        name= lowerCaseInit(name);
        if(containsBean(name)){
            return (T) beanFactory.getBean(name);
        } else{
            return null;
        }
    }

    /**
     * 获取
     * @param cls
     * @return
     * @param <T>
     * @throws BeansException
     */
    public static <T> T getBean(Class<T> cls) throws BeansException{
        T result= (T) beanFactory.getBean(cls);
        return result;
    }

    /**
     * 判断 BeanFactory是否包含bean对象
     * @param name
     * @return
     */
    public static boolean containsBean(String name){
        return beanFactory.containsBean(name);
    }

    /**
     * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。
     * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
     * @param name
     * @return
     * @throws NoSuchBeanDefinitionException
     */
    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException{
        return beanFactory.isSingleton(name);
    }

    public static Class<?> getType(String name) throws NoSuchBeanDefinitionException{
        return beanFactory.getType(name);
    }

    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException{
        return beanFactory.getAliases(name);
    }

    /**
     * 首字母小写
     * @param name
     * @return
     */
    private static String lowerCaseInit(String name){
        if(name.length()>0){
            char c= name.charAt(0);
            if(c>=65 && c<=90){
                int i= c+ 32;
                return ((char)i)+ name.substring(1);
            } else{
                return name;
            }
        } else{
            return null;
        }
    }
}

3.3 调用操作

此处还是以登录操作为例。同样可以进行数据库连接操作。

@PostMapping("/user/login")
    public Result<?> login(@RequestBody User user){
        Map<String, Object> map= new HashMap<>();
        try{
            UserMapper mapper= SpringUtils.getBean(UserMapper.class);
            user= mapper.login(user);
            if (user!= null){
                //生成token
                Map<String, String> tokenmap= new HashMap<>();
                tokenmap.put("loginname", user.getLoginname());
                tokenmap.put("password", user.getPassword());
                String token= JwtUtils.getToken(tokenmap);
                //返回数据
                map.put("user", user);
                map.put("token", token);
                return Result.ok(map);
            } else {
                return Result.error(CommonConstant.SYS_ERR_CODE, "用户不存在!");
            }
        } catch (Exception e){
            e.printStackTrace();
            return Result.error("异常!"+ e.getMessage());
        }
    }

4. 结语

实际项目中单独配置mybatis-config.xml较少。一般都写在application.yml里。

后面继续学习druid得配置以及操作实现。

到此这篇关于SpringBoot Mybatis 配置文件形式的文章就介绍到这了,更多相关SpringBoot Mybatis 配置内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Springboot mybatis-plus配置及用法详解

    本节内容扩展介绍下针对mybatis的增强工具mybatis-plus,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 二话不多说,我们先写编写个简单的例子,让大家先初步的了解下mybatis-plus. 1.mybatis-plus初步实例 (1)创建一个spring boot web工程(具体创建过程就不再演示了,还不会的同学去看看spring boot专题第一节内容) (2)引入依赖 <!--web项目依赖--> <dependency> <g

  • springboot mybatis druid配置多数据源教程

    目录 1.项目代码结构 2.导入基本依赖 3.配置多数据源 4.配置类 5.启动类 6.测试使用的表 7.测试表对应的实体类 8.持久层:dao层接口 1.项目代码结构 2.导入基本依赖 记得需要导入mysql驱动mysql-connector-java <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-s

  • SpringBoot配置使Mybatis打印SQL执行时的实际参数值操作

    问题描述 在开发过程中,默认配置下SpringBoot和Mybatis正常结合运行,但在打印的日志中动态sql中的参数位置显示的是?,当sql执行违背预期时不免是因为传到Mapper中sql参数值不正确所导致,这时候如果调试能查看sql执行时占位符处的值,这无疑能让问题展示得更加直观,如何在SpringBoot.Mybatis的框架下使日志中打印出sql执行时获得的实际参数呢? 问题表现 解决办法 在SpringBoot项目中的配置文件application.properties或者bootst

  • springboot整合mybatis的超详细过程(配置模式+注解模式)

    目录 一.简单介绍 二具体配置 2.1.配置相关的依赖. 2.2 写.mapper.controller.service 2.2.1mapper文件 2.2.2service文件 2.2.2controller文件 2.3配置相关文件 三.结果截图 四.可能遇到的报错 一.简单介绍 1.配置相关的依赖2.配置模式3写.mapper.controller.service4.配置yaml文件 配置mybatis全局配置文件(这里我使用的是配置模式+注解模式所以需要配置全局文件) 二具体配置 2.1.

  • springboot项目整合mybatis并配置mybatis中间件的实现

    记录创建springboot项目并配置mybatis中间件: 资源准备及版本说明 编程工具:IDEA JDK版本:1.8 Maven版本:Apache Maven 3.6.3 springboot版本:2.4.4 mybatis版本:1.3.2 mysql版本:5.1.48 创建mavem项目 通过IDEA创建很便捷,参考<IDEA创建SpirngBoot项目>. 配置pom.xml 使用mybatis需要添加依赖 <dependency> <groupId>org.m

  • SpringBoot多数据源配置详细教程(JdbcTemplate、mybatis)

    多数据源配置 首先是配置文件 这里采用yml配置文件,其他类型配置文件同理 我配置了两个数据源,一个名字叫ds1数据源,一个名字叫ds2数据源,如果你想配置更多的数据源,继续加就行了 spring: # 数据源配置 datasource: ds1: #数据源1 driver-class-name: com.mysql.jdbc.Driver # mysql的驱动你可以配置别的关系型数据库 url: jdbc:mysql://ip:3306/db1 #数据源地址 username: root #

  • SpringBoot整合Mybatis,解决TypeAliases配置失败的问题

    问题描述 在应用MyBatis时,使用对象关系映射,将对象和Aliase映射起来. 在Mybatis的文档明确写出,如果你没有明确定义实体类的Aliase,框架会自动将Class Name自动作为别名. 那么问题来了,当使用java -jar xxx.jar&启动的时候,会报出以下错误, Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'XXXXX'.

  • SpringBoot Mybatis 配置文件形式详解

    目录 1. 概述 2. 单独配置mybatis-config.xml 2.1 配置内容 2.2 辅助类 2.3 调用操作 3. application.yml配置mybatis 3.1 配置内容 3.2 辅助类 3.3 调用操作 4. 结语 开发环境: IDEA 2022.1.4+ Mybatis 1. 概述 在之前BiliBili学习SprintBoot时候,按照视频敲代码,SpringBoot集成MyBatis,是单独写了一个mybatis-config.xml文件.配置数据连接以及mapp

  • springboot与mybatis整合实例详解(完美融合)

    简介 从 Spring Boot 项目名称中的 Boot 可以看出来,Spring Boot 的作用在于创建和启动新的基于 Spring 框架的项目.它的目的是帮助开发人员很容易的创建出独立运行和产品级别的基于 Spring 框架的应用.Spring Boot 会选择最适合的 Spring 子项目和第三方开源库进行整合.大部分 Spring Boot 应用只需要非常少的配置就可以快速运行起来. Spring Boot 包含的特性如下: 创建可以独立运行的 Spring 应用. 直接嵌入 Tomc

  • Mybatis查询延迟加载详解及实例

    Mybatis查询延迟加载详解及实例 1.1     启用延迟加载 Mybatis的延迟加载是针对嵌套查询而言的,是指在进行查询的时候先只查询最外层的SQL,对于内层SQL将在需要使用的时候才查询出来.Mybatis的延迟加载默认是关闭的,即默认是一次就将所有的嵌套SQL一并查了将对象所有的信息都查询出来.开启延迟加载有两种方式. 第一种是在对应的<collection>或<association>标签上指定fetchType属性值为"lazy".如下示例中我们

  • SpringMvc+Mybatis+Pagehelper分页详解

    最近公司需要做一个告警页面的功能,需要分页,查了很多资料发现PageHelper比较合适 故写一篇从零开始的PageHelper使用的教程,也记录下忙活一天的东西 1.首先需要在项目中添加PageHelper的依赖,这里我用的Maven添加 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>

  • spring Boot与Mybatis整合优化详解

    SpringBoot官方文档http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ 关于spring-boot与mybatis整合优化方面的介绍,就是Mybatis-Spring-boot-starter的介绍: 1.取消spring-mybatis.xml配置 ①自动检测已存在的Datasource 之前,需要在spring-mybatis.xml中配置datasource的Bean,现在只需要在applicat

  • spring、mybatis 配置方式详解(常用两种方式)

    在之前的文章中总结了三种方式,但是有两种是注解sql的,这种方式比较混乱所以大家不怎么使用,下面总结一下常用的两种总结方式: 一. 动态代理实现 不用写dao的实现类 这种方式比较简单,不用实现dao层,只需要定义接口就可以了,这里只是为了记录配置文件所以程序写的很简单: 1.整体结构图: 2.三个配置文件以及一个映射文件 (1).程序入口以及前端控制器配置 web.xml <?xml version="1.0" encoding="UTF-8"?> &

  • SpringBoot初步连接redis详解

    在初次用springboot连接redis的时候查看官方文档和一些博客会发现配置文件非常的多,这就导致了在学习的开始的时候是没有体验的,其实利用springboot连接redis的时候并不需要那么多的配置 首先开启redis服务器: 然后在springboot里面添加配置文件: # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=localhost # Redis服务器连接端口 spring.redi

  • SpringBoot实现国际化过程详解

    这篇文章主要介绍了SpringBoot实现国际化过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 实现方法:thymeleaf模板引擎加上BootStrap 准备工作: 1.将准备好的Bootstrap模板放在templates下让SpringBoot进行自动配置 SpringBoot自动配置会自动到(idea的shif键连按两下进入全局搜索) 2.Bootstrp的引入(这里是maven以depency的方式引入) <!--引入boot

  • springboot整合netty过程详解

    这篇文章主要介绍了springboot整合netty过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言 上一篇讲了netty的一个入门的demo:项目上我也把数据处理做好了,就要开始存数据库了:我用的mybatis框架,如果单独使用还是觉得比较麻烦,所以就用了springboot+mybatis+netty:本篇主要讲netty与springboot的整合,以及我在这个过程中遇到的问题,又是怎么去解决的: 正文 我在做springbo

  • SpringBoot使用Log4j过程详解

    这篇文章主要介绍了SpringBoot使用Log4j过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 log4j.logback.Log4j2简介 log4j是apache实现的一个开源日志组件 logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现 Log4j2是log4j 1.x和logback的改进版,采用了一些新技术(无锁异步.等等),使得日志的吞吐量.性能比lo

随机推荐