springboot整合mybatis

整合mybatis

基础配置

  • 启动类添加@MapperScan

  • 配置文件

    #=================================数据库相关配置====================================
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://10.1.1.1:3306/db?useUnicode=true&characterEncoding=utf-8&userSSL=false
    spring.datasource.username=root
    spring.datasource.password=xxxxxx
    #如果不使用默认的数据源 (com.zaxxer.hikari.HikariDataSource)
    spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
    
    
    # mybatis 下划线转驼峰配置,两者都可以
    #mybatis.configuration.mapUnderscoreToCamelCase=true
    mybatis.configuration.map-underscore-to-camel-case=true
    
    #打印sql,方便调试
    mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
    

configuration

mappers

<mappers>
    <mapper resource="mapper/VideoMapper.xml"/>
</mappers>

typeAliases

<typeAliases>
    <typeAlias type="com.xdclass.xdmybatis.domain.Video" alias="Video"></typeAlias>
	<package name="com.xdclass.xdmybatis.domain"/>
	<<可以将包里的所以类自动取别名>>
</typeAliases>

environments

<!--引入properties文件-->
<properties resource="db.properties"/>
<!--环境的配置-->
<environments default="development">
    <environment id="development">
       <!-- 配置事务-->
        <transactionManager type="JDBC"></transactionManager>
       <!-- 配置数据源-->
        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.driver}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </dataSource>
    </environment>
</environments>

setting

属性名 含义 简介 有效值 默认值
cacheEnabled 是否使用缓存 是整个工程中所有映射器配置缓存的开关,即是一个全局缓存开关 ture|false ture
lazyLoadingEnabled 是否开启延迟加载 控制全局是否使用延迟加载。当有特殊关联关系需要单独配置时,可以使用fetchType属性来覆盖此配置 ture|false false
aggressiveLazyLoading 是否按需加载属性 开启时,不论调用什么方法加载某个对象,都会加载该对象的所有属性,关闭后只会按需加载 ture|false false
multipleResultSetsEnabled 是否允许单一语句返回多结果集 即mapper配置中一个单一的sql配置是否能够返回多个结果集 ture|false true
useColumnLabel 使用列标签代替列名 设置是否使用列标签代替列名 ture|false true
useGenerateKeys 是否支持JDBC自动生成主键 设置之后将会强制使用自动生成主键的策略 ture|false false
autoMappingBehavior 指定MyBatis自动映射字段或属性的方式 有三种方式,NONE时将自动映射;PARTIAL时只会自动映射没有定义结果集的结果映射;FULL时会映射任意复杂的结果集 NONE;PARTIAL;FULL PARTIAL
autoMappingUnknownColumnBehavior 设置当自动映射时发现未知列的动作 有三种动作,NONE时不做任何操作;WARNING时会输出提醒日志;FAILING时会抛出SqlSessionException异常表示映射失败 NONE,WARNING,FAILING NONE
defaultExectorType 设置默认的执行器 有三种执行器,SIMPLE为普通执行器;REUSE执行器会重用处理语句;BATCH执行器将重用语句并执行批量更新 SIMPLE,REUSE,BATCH SIMPLE
defaultStatementTimeout 设置超时时间 该超时时间即数据库驱动连接数据库时,等待数据库回应的最大秒数 任意正整数
defaultFetchSize 设置驱动的结果集 为了防止从数据库查询出来的结果过多,而导致内存溢出,可以通过设置fetchSize参数来控制结果集的数量 任意正整数
safeRowBoundsEnabled 允许在嵌套语句中使用分页 如果允许在sql的行内嵌套语句中使用分页,就设置该值为false true|false false
safeResultHandlerEnabled 允许在嵌套语句中使用分页,ResultHanlder,即结果集处理 如果允许对sql的结果集使用分页,就设置该值为false true|false true
mapUnderscoreToCamelCase 是否开启驼峰命名规则映射 数据库中的字段名称和Java实体类映射 true|false false
localCacheScope MyBatis利用本地缓存机制防止循环引用和加速重复嵌套查询 默认值Session,这种情况下会缓存一个会话中执行的所有查询。若设置为STATEMENT,本地会话仅用在语句执行上,对相同SqlSession的不同调用将不会共享数据 SESSION|STATEMENT SESSION
jdbcTypeForNull JDBC类型的默认设置 当没有为参数提供特定的jdbc类型时,为空值指定jdbc类型。某些驱动需要指定列的JDBC类型,多数情况直接用一般类型即可,比如NULL、VARCHAR或者OTHER 常用NULL、VARCHAR、OTHER OTHER
lazyLoadTriggerMethods 指定哪个对象的方法触发一次延迟加载 配置需要出发延迟加载的方法的名字,该方法就会出发一次延迟加载 一个逗号分隔的方法名称列表 equals,clone,hasCode,toString
defaultScriptingLanguage 动态sql默认语言 指定动态sql生成的默认语言 一个类型别名或者一个类的全路径 org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
callSettersOnNulls 是否为空值情况下调用Set方法 指定当结果集中值为null时是否调用映射对象setter(map对象为put)方法,这对于有Map.keySet()依赖或null值初始化时是有用的。注意基本类型不能设置为null true|false false
returnInstanceForEmptyRow 返回空实体集对象 当返回行的所有列都是空时,MyBatis默认返回null。当开启这个设置时,MyBatis会返回一个空实列。同时,从MyBatis3.4.2开始,它也适用于嵌套的结果集 true|false false
logPrefix 日志前缀 指定MyBatis增加日志名称的前缀 任意字符串
logImpl 日志实现 指定MyBatis所用的日志的具体实现,未指定将自动查找 SLF4J|LOG4J|LOG4J2|JDK_LOGGING|COMMONS_LOGGING|STDOUT_LOGGING|NO_LOGGING
proxyFactory 代理工厂 指定MyBatis创建具有延迟加载能力的对象用到的代理工具 CGLIB|JAVASSIST JAVASSIST
vfsImpl vfs实现 指定vfs的实现 自定义VFS的实现的类全限定名,已逗号分隔
useActualParamName 适用方法签名 允许适用方法签名中的名称作为语句参数名称。要适用该特性,工程必须采用java8编译,并且加上-parameters选项(从3.4.1开始) true|false false
configurationFactory 配置工厂 指定提供配置实列的类。返回的配置实列用于加载反序列化的懒加载参数。这个类必须有一个签名的静态配置getconfiguration()方法(从3.2.3开始) 一个类型别名或者一个类的全路径名 无/
shrinkWhitespacesInSql Removes extra whitespace characters from the SQL. Note that this also affects literal strings in SQL. (Since 3.5.5) true|false false
defaultSqlProviderType Specifies an sql provider class that holds provider method (Since 3.5.6). This class apply to the type(or value) attribute on sql provider annotation(e.g. @SelectProvider), when these attribute was omitted. A type alias or fully qualified class name no set

基础语法

  • Select

    @Select("select * from video")
        @Results({
                @Result(column = "cover_img",property = "coverImg"),
                @Result(column = "create_time",property = "createTime")
        })
    
  • Insert

    @Insert("INSERT INTO `video` ( `title`, `summary`, " +
                "`cover_img`, `view_num`, `price`, `create_time`," +
                " `online`, `point`)" +
                "VALUES" +
                "(#{title}, #{summary}, #{coverImg}, #{viewNum}, #{price},#{createTime}" +
                ",#{online},#{point});")
    @Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")
    
  • Delete

    @Delete("DELETE FROM video WHERE id =#{id}")
    
  • UpdateProvider(动态语句构建)

    InsertProvider DeleteProvider SelectProvider

    @UpdateProvider(type = VideoProvider.class,method = "updateVideo")
    int update(Video Video);
    
    public class VideoProvider {
        public String updateVideo(final Video video){
            return new SQL(){{
                UPDATE("video")
                //条件写法.
                if(video.getTitle()!=null){
                    SET("title=#{title}");
                }
                WHERE("id=#{id}");
            }}.toString();
        }
    }
    

PageHelper分页使用

config类

@Configuration
public class MyBatisConfig {
    @Bean
    public PageHelper pageHelper(){
        PageHelper pageHelper = new PageHelper();
        Properties p = new Properties();
        // 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用
        p.setProperty("offsetAsPageNum","true");
        //设置为true时,使用RowBounds分页会进行count查询
        p.setProperty("rowBoundsWithCount","true");
        p.setProperty("reasonable","true");
        pageHelper.setProperties(p);
        return pageHelper;
    }
}

pom.xml

		<!-- 分页插件依赖 -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper</artifactId>
			<version>4.1.0</version>
		</dependency>

使用

PageHelper.startPage(page,size);
PageInfo<Video> pageInfo = new PageInfo<>(list);//参数,查询出的数据
//总条数 pageInfo.getTotal()
//总页数 pageInfo.getPages()
//当前页 page
//数据   pageInfo.getList()
posted @ 2023-06-04 17:35  dzy2831  阅读(36)  评论(0)    收藏  举报