目录

1. mybatis中的一些概念

2. 添加mysql数据库所需的依赖

3. 在application.yml配置数据库

4. 假如使用druid连接池

5. 配置mybatis

5.1 三种执行模式

5.2 配置mybatis-config.xml文件

6 springboot + mybatis应用

6.1 controller层

6.2 service层

6.3 dao层


——spring中要让yml中的配置起作用,就得注入容器,否则spring根本不知道,yml中的配置都是固定了关键字的,比如spring,mybatis等等,spring会用@ConfigurationProperties将yml中的配置信息注入到一个配置类,然后配置类作为配置bean,就能被spring使用了。

1. mybatis中的一些概念

jdbc :是java版本的操作数据库的接口,就是规范大家操作数据库所使用的接口。

数据库驱动程序:是实现那些接口的程序,真正操作数据库的代码。

数据库:数据库不止一种,对于不同的数据库,厂商提供的数据库驱动程序都会有所不同。

数据库连接池:类似于线程池,先把数据库连接创建出来放在池子里,等应用程序要借助连接操作数据库时,即可选取一条可用连接即可,连接池处于应用服务器上。

因此,如果我们使用的是java语言,那么就使用jdbc规范,至于使用什么驱动程序,那要看使用的数据库是什么,比如mysql数据库的话,我们可以使用 com.mysql.cj.jdbc.Driver,但是数据库连接池有很多,如果druid,c3p0等等,推荐使用阿里的druid,因为这个连接池可以提供连接池监控功能。

2. 添加mysql数据库所需的依赖

<!--数据库驱动程序-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope> <!--这个表示只有在运行的时候才用,那么编译的时候是不会用到的-->
        </dependency>
        <!--spring 提供的jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--数据库连接池,用的阿里的druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.13</version>
        </dependency>

3. 在application.yml配置数据库

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/one?useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root

username:用户名,连接数据库需要的认证信息。

password:密码,连接数据库需要的认证信息。

driver-class-name:驱动程序名。

url:数据库地址,url中可以带几个参数,参数的含义如下:

参数名称

参数说明

缺省值

最低版本要求

user

数据库用户名(用于连接数据库)

 

所有版本

password

用户密码(用于连接数据库)

 

所有版本

useUnicode

是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true

false

1.1g

characterEncoding

当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk

false

1.1g

autoReconnect

当数据库连接异常中断时,是否自动重新连接?

false

1.1

autoReconnectForPools

是否使用针对数据库连接池的重连策略

false

3.1.3

failOverReadOnly

自动重连成功后,连接是否设置为只读?

true

3.0.12

maxReconnects

autoReconnect设置为true时,重试连接的次数

3

1.1

initialTimeout

autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒

2

1.1

connectTimeout

和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本

0

3.0.1

socketTimeout

socket操作(读写)超时,单位:毫秒。 0表示永不超时

0

3.0.1

allowMultiQueries

mybatis是否可以执行多条语句

true

 

useSSL

是否使用SSL连接

true

 

serverTimezone

设置时区

UTC

 

如果使用数据库连接池,最好设置2个参数:autoReconnect=true&failOverReadOnly=false

4. 假如使用druid连接池

其实可以不配置连接池,因为springboot有默认的连接池hikari。

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/one?
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource

然后将druid数据库连接池配置到springboot中,不然springboot找不到。

创建一个配置类,yml中的配置复制到这里来,而且还要另外设置属性(主要是设置连接池的属性),自己视情况而自定义:

@Configuration
public class DruidConfiguration {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource DataSource() {
        DruidDataSource dataSource = new DruidDataSource();
//        dataSource.setUrl(); //设置数据库地址
//        dataSource.setUsername(); 设置登录用户名
//        dataSource.setPassword(); 设置登录密码
//配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this)
//        dataSource.setName();
//设置驱动类
//        dataSource.setDriver();
//设置驱动类加载器
//        dataSource.setDriverClassLoader();
//设置驱动名
//        dataSource.setDriverClassName();
//最大连接池数量,默认是8
        dataSource.setMaxActive(8);
//默认0,连接池初始化时,要创建多少个连接
//        dataSource.setInitialSize()
//设置登录超时时间
//        dataSource.setLoginTimeout();
//最大任务数量
//        dataSource.setMaxCreateTaskCount();
//设置连接最大的空闲时间,单位毫秒,默认为25200000L
//        dataSource.setMaxEvictableIdleTimeMillis();
//默认10个,单个连接允许的最大sql缓存数量,因为连接不够,可能要排队,但是队列也有个最大值
//        dataSource.setMaxOpenPreparedStatements();
//        搞不懂
//        dataSource.setMaxPoolPreparedStatementPerConnectionSize();
//获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
//        dataSource.setMaxWait();
//最多允许多少个线程等待连接池
//        dataSource.setMaxWaitThreadCount();
//最小的空闲时间,至少要保证连接至少能够有权力空闲这么多时间,还不被回收,超过这个值,回不回收看时机
//        dataSource.setMinEvictableIdleTimeMillis();
//最少连接数量
//        dataSource.setMinIdle();
//连接出错后,重新尝试连接的间隔时间
//        dataSource.setTimeBetweenConnectErrorMillis();
//回收连接工作间隔多久执行一次
//        dataSource.setTimeBetweenEvictionRunsMillis();

/**
 * ****************************************
 */
//间隔多久将连接池监控日志输出
//        dataSource.setTimeBetweenLogStatsMillis();
//日志的处理类,就是可以自定义如何处理日志,存在哪里呀,日志级别过滤等等
//        dataSource.setStatLogger();
//日志处理类名
//        dataSource.setStatLoggerClassName();
//连接泄露是指一个连接建立的连接时间很长可被认为连接泄露,关闭泄露连接,是否将其记录进入日志
//        dataSource.setLogAbandoned();
//个人感觉这个是设置日志输出到哪里的
//        dataSource.setLogWriter();
//默认false,是否启动dup关闭日志
//        dataSource.setDupCloseLogEnable();
//当发生异常时,允许sql的最大并发量,以此来保护数据库
//        dataSource.setOnFatalErrorMaxActive();
/**
 * *******************************************
 */
//申请连接时,最大尝试申请的次数
//        dataSource.setNotFullTimeoutRetryCount();

//事务查询超时时间
//        dataSource.setTransactionQueryTimeout();
//      搞不懂
//        dataSource.setTransactionThresholdMillis();

//默认false,异步启动,asyncInit是1.1.4中新增加的配置,如果有initialSize数量较多时,打开会加快应用启动时间。
//        dataSource.setAsyncInit();
//通过connectProperties属性来打开mergeSql功能;慢SQL记录
//        dataSource.setConnectProperties();
//这个方法的参数是string
//        dataSource.setConnectionProperties();
//默认启用,是否启用数据源
//        dataSource.setEnable();
//默认是开启true,作用是初始化连接池时会填充到minIdle数量,当网络断开等原因产生的由ExceptionSorter检测出来的死连接被清除后,自动补充连接到minIdle数量,
//连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会继续刷新生命
//        dataSource.setKeepAlive();
//默认为false,当读取数据库超时的时候,是否要关闭该连接
//        dataSource.setKillWhenSocketReadTimeout();
//默认为true,是否记录不同的线程
//        dataSource.setLogDifferentThread();
//默认值为false。是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
//        dataSource.setPoolPreparedStatements();
//默认true,是否允许重置连接池,我们不是可以监控连接池吗,在html页面可以视图化地监控连接池,也可以重置连接池。
//        dataSource.setResetStatEnable();
//默认false,是否可以在一个视图界面里监控多个druid数据源的信息
//        dataSource.setUseGlobalDataSourceStat();
//控制PoolGuard是否容许获取底层连接(Controls if the PoolGuard allows access to the underlying connection.)
// 默认false不开启, 这是一个有潜在危险的功能, 不适当的编码会造成伤害.(关闭底层连接或者在守护连接已经关闭的情况下继续使用它).
// 请谨慎使用,并且仅当需要直接访问驱动的特定功能时使用.注意: 不要关闭底层连接, 只能关闭前面的那个.
//        dataSource.setAccessToUnderlyingConnectionAllowed();
//默认false,是否允许异步关闭连接
//        dataSource.setAsyncCloseConnectionEnable();
//默认false,当获取连接失败后,是否中断
//        dataSource.setBreakAfterAcquireFailure();
//默认true,是否允许清除过滤器
//        dataSource.setClearFiltersEnable();
//默认1,连接出错时,最多进行几次重连
//        dataSource.setConnectionErrorRetryAttempts();
//这是用于设置在连接初始化时执行的sql语句,可以是多条sql
//        dataSource.setConnectionInitSqls();
//这是设置连接创建程序,如果有自定义了创建程序,那么在连接池需要创建新连接时,就调用这个程序
//        dataSource.setCreateScheduler();
//这是设置连接回收程序,当连接池需要回收连接时,就调用这个程序
//        dataSource.setDestroyScheduler();
//设置数据库类型,一般是根据url或者driver-class-name自动识别的
//        dataSource.setDbType();
//默认true,池里的连接是否自动提交sql任务
//        dataSource.setDefaultAutoCommit();
//一种默认的记录目录
//        dataSource.setDefaultCatalog();
//默认不是,连接是否只读
//        dataSource.setDefaultReadOnly();
//默认隔离,设置默认的事务隔离
//        dataSource.setDefaultTransactionIsolation();


//这是一种机制,当数据库发生异常时,当前连接就成了有问题的连接,应该将其去除
//        dataSource.setExceptionSorter();
//        dataSource.setExceptionSorterClassName();
//默认false,申请连接出错时,是否马上返回
//        dataSource.setFailFast();
//这是拦截器,可以拦截任意的数据库请求,类似servlet拦截器一样
//        dataSource.setFilters();
//这个不知道
//        dataSource.setInitExceptionThrow();

//        dataSource.setInitGlobalVariants();

//        dataSource.setInitVariants();


//搞不懂
//        dataSource.setObjectName();


//是否是Oracle数据库,默认不是
//        dataSource.setOracle();


//物理最大使用连接的数量,即最大连接数
//        dataSource.setPhyMaxUseCount();
//物理连接申请的超时时间
//        dataSource.setPhyTimeoutMillis();
//代理过滤器
//        dataSource.setProxyFilters();
//查询超时时间
//        dataSource.setQueryTimeout();
//#当被抛弃的连接,它的被抛弃时间超时的时候,是否立刻删除该连接,默认true
//        dataSource.setRemoveAbandoned();
//被抛弃的最大时间,一个单位秒,一个单位毫秒
//        dataSource.setRemoveAbandonedTimeout();
//        dataSource.setRemoveAbandonedTimeoutMillis();
//        是否共享预处理语句
//        dataSource.setSharePreparedStatements();


/**
 * *************************************************************
 */
        //是否使用本地会话信息?
//        dataSource.setUseLocalSessionState();
//        dataSource.setUseOracleImplicitCache();
//这好像是发送到数据库的请求中将用户名加密
//        dataSource.setUserCallback();
//这好像是发送到数据库的请求中将密码加密
//        dataSource.setPasswordCallback();
//类名
//        dataSource.setPasswordCallbackClassName();

/**
 * *********************************************************************
 */
//默认false,公平锁,设置使用公平锁还是非公平锁,true表示非公平锁
//        dataSource.setUseUnfairLock();
//默认为null,设置检查连接是否有效的sql是什么。在mysql中通常为select ‘x’,在oracle中通常为select 1 from dual
//        dataSource.setValidationQuery();
//设置“检查连接是否有效”的这个检查的超时时间
//        dataSource.setValidationQueryTimeout();
//设置“检查连接是否有效”的检查类
//        dataSource.setValidConnectionChecker();
//设置“检查连接是否有效”的检查类名
//        dataSource.setValidConnectionCheckerClassName();

//默认false,当申请连接时,ValidationQuery检查连接是否有效,会降低性能的
//        dataSource.setTestOnBorrow();
//默认false,当归还连接时,ValidationQuery检查连接是否有效,会降低性能的
//        dataSource.setTestOnReturn();
//默认true,当申请连接时,ValidationQuery检查连接的空闲时间是否超过预定值,如果超过,就检查连接是否有效,不太影响性能
//        dataSource.setTestWhileIdle();
/**
 * *********************************************************************
 */
        return dataSource;
    }
}

5. 配置mybatis

到此,我们数据库有了,访问数据库的API也有了(jdbc),数据库驱动程序也有了(com.mysql.cj.jdbc.Driver),数据库连接池也有了(druid),按理说,我们可以用java语言直接调用jdbc API就可以操作数据库了,对的。 但是纯jdbc去操作数据库太痛苦了,不利于我们在springboot 中开发,所以目前有一些持久化层框架,比如mybatis,hibernate等,我选择mybatis,通过mybatis去方便地编程,进而操作数据库。

pom.xml中添加mybatis依赖:

<!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>

配置mybatis的方法有2种,xml配置,和yml配置。

那下面我就结合一下两者,练一下。

先在application.yml中配置mybatis:

其实我们完全可以在yml里配置完所有属性,但是没必要,不方便,因为属性项太多了,yml主要是配置一些核心的配置,其它的配置项可以放在xml文件中。

mybatis:
  config-location: classpath:mybatis/mybatis-config.xml  #mybatis  xml配置文件
  check-config-location: false    #默认false,是否检查mybatis配置文件是否存在,比如mybatis-config.xml,如果检查不到,可能启动不了
  configuration-properties: classpath:mybatis/mybatis-parameters.properties  #属性文件
  executor-type: SIMPLE  #执行模式,三种模式:默认SIMPLE、REUSE、BATCH
  mapper-locations: classpath:mapper/*Mapper.xml #mapper.xml文件
  type-aliases-package: com.dangh.test.entity #类型别名包扫描路径,mapper.xml中那些实体类,我们可用全限定类名,也可以先指定这个路径,然后直接使用类名,mybatis是可以扫描到的
  type-aliases-super-type: java.lang.Object #个人理解是别名包下那些实体类的超类
#  type-handlers-package:  #类型处理器的包路径,用于jdbcType 和 javaType的转换,mybatis有默认的处理器,一般我们不用管,除非你要自定义类型处理器

有人就会问了,没有给mybatis配置数据库url等信息,它怎么能找到数据库呢, 因为spring 有个dataSource属性,就用于配置数据源信息(数据库的相关信息),mybatis会从这个属性获得数据库的信息的。

5.1 三种执行模式

SIMPLE:默认模式,对于每个sql,都会创建一个statement给它,执行之后,会关闭statement,不怎么耗内存,但是速度稍慢。

REUSE:重用模式,即statement用完后,不用关闭,而是缓存起来,如果后面有相同的sql请求,就直接用这个statement,不用去重新创建了,即有了缓存机制,耗内存,但是速度快。

BATCH:批量处理模式,用于一次性执行多条sql,比如存储过程,事务等等,需要用户自己手动提交,先将多条sql缓存起来,只要用户一提交,就将这些sql一起发到数据库执行,批量处理。

5.2 配置mybatis-config.xml文件

创建mybatis-config.xml,然后报了个错,

springboot mybatis id 雪花_mybatis

解决方法是:下图,file-settings-languages and framework-Schemas and DTDs,把报错的IP地址添加上,就行了。

springboot mybatis id 雪花_springboot_02

具体mybatis-config.xml文件配置详细如下:

需要注意的是,有些属性在yml中配置了,就不要在mybatis-config.xml中配置了,因为都是配置文件,只要有其中一个配置就行,别重复。

<?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>
    <!--可以引用额外的参数配置文件,或者直接设置参数(参数名,参数值),然后在本xml文件中,想要使用参数值的时候,就直接用${参数名}即可-->
    <!--<properties resource = "classpath:mybatis/mybatis-parameters.properties">-->
        <!--<property name = "aaa" value = "hello"/>-->
    <!--</properties>-->

    <!--配置mybatis的全局属性,比如二级缓存,执行模式等等-->
    <!--<settings>-->
        <!--开启二级缓存,默认不开启-->
        <!--<setting name = "cacheEnabled" value = "true"/>-->
    <!--</settings>-->

    <!--别名设置-->
    <!--<typeAliases>-->
        <!--第一种别名方式,一个类一个类的定义别名。在mybatis能够扫描的那些路径下(比如mapper目录),使用别名是可以的,就不用每次都给出全限定类名,给出别名就行-->
        <!--<typeAlias alias = "user" type = "org.mybatis.mapper.User" />-->
        <!--第二种别名方式,直接定义一个路径。在mybatis能够扫描的那些路径下,我们直接使用类名,mybatis根据类名肯定找不到,因为不知道路径,因此就会去下面配置的路径去找-->
        <!--<package name="org.mybatis.mapper" />-->
    <!--</typeAliases>-->

    <!--类型处理器,当然mybatis有成熟的类型处理器,一般不需要我们自己定义处理器-->
    <!--<typeHandlers>-->
        <!--处理java类型的处理器-->
        <!--<typeHandler handler="" javaType=""/>-->
        <!--处理jdbc类型的处理器-->
        <!--<typeHandler handler="" jdbcType=""/>-->
        <!--mybatis每次要进行java类型和jdbc类型的转换时,都去这个包下面找类型处理器来处理-->
        <!--<package name=""/>-->
    <!--</typeHandlers>-->

    <!--对象工厂,在mybatis查询数据库后,会有一个结果集,需要将结果集实例化为一个对象,这就是对象工厂做的事-->
    <!--<objectFactory type="">-->
        <!--<property name="" value=""/>-->
    <!--</objectFactory>-->

    <!--配置数据源环境的,如果在yml中已经配置了数据源,那么此处可以不配置了-->
    <!--<environments default="">--> <!--default表示默认使用的数据源id,当有多个数据源时,如果没有指明使用哪个数据源,默认就是这个default所指-->
        <!--<environment id="">--> <!--配置数据源,指定数据源id-->
            <!--事务管理,默认使用JDBC的事务管理方式,但是还MANAGED事务管理方式,这是容器的方式管理事务,也可以自定义事务管理-->
            <!--<transactionManager type="JDBC"/>-->
            <!--数据源的配置信息,比如url,username等等,其中type有三种:POOLED、UNPOOLED、JNDI-->
            <!--POOLED表示这是一个带有连接池的数据源,具体用什么连接池,可以自己定,也可以使用spring提供的默认连接池-->
            <!--UNPOOLED表示这是一个没有连接池的数据源,每次都是创建连接,执行完sql,就关闭连接-->
            <!--JNDI表示这是使用容器里的数据源,是Tomcat容器中的机制,用于管理数据源,所以mybatis只需要拿着数据源的id就可以了,
            因为JNDI能知道你要访问的是哪个数据源,因此跟连接池也没有关系,只不过tomcat有默认的数据库连接池,若要更改连接池,可以研究一下-->
            <!--<dataSource type="">-->
                <!--<property name="url" value=""/>-->
                <!--<property name="username" value=""/>-->
                <!--<property name="password" value=""/>-->
                <!--<property name="driver" value=""/>-->
            <!--</dataSource>-->
        <!--</environment>-->
    <!--</environments>-->

    <!--插件,用于sql语句执行过程中插入点执行,有点类似监听器或者AOP-->
    <!--<plugins>-->
        <!--<plugin interceptor=""></plugin>-->
    <!--</plugins>-->
    
    <!--用于处理多数据源,数据库类型不同时,同样的操作,可能sql不一样,需要分清sql语句是针对哪种数据库的,在mapper.xml中的语句指定databaseId = "mysql"就是针对mysql数据库,-->
    <!--<databaseIdProvider type="DB_VENDOR">-->
        <!--<property name="MySQL" value="mysql"/>-->
        <!--<property name="Oracle" value="oracle"/>-->
    <!--</databaseIdProvider>-->

    <!--用于定义mybatis的mapper.xml文件-->
    <mappers>
        <!--直接定义mapper.xml文件-->
        <!--<mapper resource="mapper/userMapper.xml"></mapper>-->
        <!--定义一个路径,把所有的mapper.xml文件都放到这个路径下,mybatis就能扫描到了-->
        <package name="mapper"/>
    </mappers>

</configuration>

 settings中可以配置很多属性,具体如下,下面这个表是复制别人的,很棒,所以引用一下,原作者勿喷。

设置参数

描述

有效值

默认值

cacheEnabled

该配置影响的所有映射器中配置的缓存的全局开关。

true | false

true

lazyLoadingEnabled

延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。

true | false

false

aggressiveLazyLoading

当启用时,带有延迟加载属性的对象的加载与否完全取决于对任意延迟属性的调用;反之,每种属性将会按需加载。

true | false

true

multipleResultSetsEnabled

是否允许单一语句返回多结果集(需要兼容驱动)。

true | false

true

useColumnLabel

使用列标签代替列名。不同的驱动在这方面会有不同的表现,具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果。

true | false

true

useGeneratedKeys

允许 JDBC 支持自动生成主键,需要驱动兼容。如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)。

true | false

False

autoMappingBehavior

指定 MyBatis 是否以及如何自动映射指定的列到字段或属性。NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。FULL 会自动映射任意复杂的结果集(包括嵌套和其他情况)。

NONE, PARTIAL, FULL

PARTIAL

defaultExecutorType

配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements);BATCH 执行器将重用语句并执行批量更新。

SIMPLE REUSE BATCH

SIMPLE

defaultStatementTimeout

设置超时时间,它决定驱动等待数据库响应的秒数。

Any positive integer

Not Set (null)

safeRowBoundsEnabled

允许在嵌套语句中使用行分界(RowBounds)。

true | false

False

mapUnderscoreToCamelCase

是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名A_COLUMN 到经典 Java 属性名aColumn 的类似映射。

true | false

False

localCacheScope

MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。

SESSION | STATEMENT

SESSION

jdbcTypeForNull

当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。

JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER

OTHER

lazyLoadTriggerMethods

指定哪个对象的方法触发一次延迟加载。

A method name list separated by commas

equals,clone,hashCode,toString

defaultScriptingLanguage

指定动态 SQL 生成的默认语言。

A type alias or fully qualified class name.

org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver

callSettersOnNulls

指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为put)方法,这对于有 Map.keySet() 依赖或 null 值初始化的时候是有用的。注意原始类型(int、boolean等)是不能设置成 null 的。

true | false

false

logPrefix

指定 MyBatis 增加到日志名称的前缀。

Any String

Not set

logImpl

指定 MyBatis 所用日志的具体实现,未指定时将自动查找。

SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING

Not set

proxyFactory

为 Mybatis 用来创建具有延迟加载能力的对象设置代理工具。

 

 

6 springboot + mybatis应用

6.1 controller层

@Controller 和 @ResponseBody 用于注解 Controller 类,等效于 @RestController 注解。

@RequestMapping 注解用于匹配什么样的请求,可以有6个属性:

1、value:请求的url,比如 /user/getUserInfo。

2、method:请求的方法,比如 RequestMethod.GET,RequestMethod.POST等等。

3、consumes:请求的内容类型,即http请求报文中的 Content-Type 字段是什么。

4、produces:返回报文的内容类型。

5、params:请求中必须包含哪些<参数,参数值>。

6、headers:请求报文中必须包含哪些请求头部字段。

@RequestParam 注解用于匹配请求的参数,一般匹配独立的,单一的参数,可以有3个属性:

1、value:参数名。

2、required:请求是否必须包含该参数,如果没有包含,则抛出异常。

3、defaultValue:如果参数为空,则使用这个默认值作为参数值。

@RequestBody 注解用于匹配请求参数,匹配对象类型的参数,有1个属性,required(同上)。

6.2 service层

service层包含了service接口和service接口实现类,在service接口中定义需要的方法,在service接口实现类中实现具体的方法(需要调用dao层的Mapper)。

@Service 用于注解service接口实现类。

@Autowired 和 @Resource 注解用于引入dao层的mapper,建议使用 @Resource,按照名字(前提是项目里的命名很规范)去引入指定的 mapper。

6.3 dao层

dao层是数据持久层。@Parm 注解用于标注mapper接口中的方法的参数,比如 public User getUser(@Parm("id") int  userId); @Parm括号里的id对应数据库里的字段,userId对应Java中的字段。