1.4 MyBatis全局配置文件

MyBatis的配置文件包含了会深深影响MyBatis行为的设置和属性信息。配置文件的顶层结构如下

configuration(配置)
	properties(属性)
	settings(设置)
	typeAliases(类型别名)
	typeHandlers(类型处理器)
	objectFactory(对象工厂)
	plugins(插件)
	environments(环境配置)
		environment(环境变量)
			transactionManager(事务管理器)
			dataSource(数据源)
	databaseIdProvider(数据库厂商标识)
	mappers(映射器)

1.properties属性

1.1 定义全局变量属性

在这里插入图片描述

1.2 在实际开发中,我们会面临各种各样的系统环境,这样我们会不断修改全局配置文件的数据库信息,为了更加灵活的切换,我们可以通过properties引入一个外部属性文件。

在这里插入图片描述

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
username=root
password=123456

在配置文件里引入通过el表达式引入
在这里插入图片描述
如果出现 Could not find resource db.properties 错误
则在pom文件中添加
在这里插入图片描述

2.setting设置属性

这是MyBatis中纪委重要的调整设置,它们会改变MyBatis的运行时行为

在官网可以查看相应的设置
链接: 点这里查看.

一个完整的设置

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="multipleResultSetsEnabled" value="true"/>
  <setting name="useColumnLabel" value="true"/>
  <setting name="useGeneratedKeys" value="false"/>
  <setting name="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

3.typeAlias

类型别名可谓java类型设置一个缩写名字。他仅限于xml配置,意在降低冗余的全限定类名书写。
MyBatis中默认的别名

别名映射的类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
objectObject
mapMap
hashmapHashMap
listList
arraylistArrayList
collectionCollection
iteratorIterator

在这里插入图片描述
执行结果
在这里插入图片描述
也可以自定义名称
在这里插入图片描述
注意:自定义名称后是不区分大小写的

在这里插入图片描述
在这里插入图片描述
如果我们的类型非常多,而且也需要给每个类型设置别名,那么这个工作就非常繁琐了,这时我们可以通过批量扫描自动生成别名
在这里插入图片描述

4.typeHandles

typeHandlers称为类型处理器,就是实现Java类型和数据库类型之间的转换。除了系统提供的类型转换器之外,我们也可以自定义类型转换器。我们自己实现一个List<—>varchar之间的类型转换

4.1 自定义类型转换器

package com.biao.typehandler;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(List.class)
public class lidtVarcharTypeHandler extends BaseTypeHandler<List<String>> {

    /**
     * 插入数据的时候要实现的数据转换:List转换为字符串
     *
     * PreparedStatement ps=conn.createPreparedStatement(sql);
     * ps.setInt(1,14)
     * ...
     * ps.executeUpdate();
     *
     * @param preparedStatement ps
     * @param i 执行的SQL语句要插入参数的位置
     * @param strings 要插入的位置的数据的list类型
     * @param jdbcType
     * @throws SQLException
     */
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, List<String> strings, JdbcType jdbcType) throws SQLException {
        //处理数据 将List 转换为特定格式的字符串
        StringBuffer stringBuffer=new StringBuffer();
        String msg=null;
        if(strings!=null){
            for (String s:
                 strings) {
                stringBuffer.append(s).append(";");
            }
            msg=stringBuffer.toString();
            msg=msg.substring(0,msg.length()-1);
        }

        //给对应位置的占位符赋值
        preparedStatement.setString(i,msg);

    }

    /**
     * 获取非空的结果集
     * @param resultSet
     * @param s
     * @return
     * @throws SQLException
     */
    @Override
    public List<String> getNullableResult(ResultSet resultSet, String s) throws SQLException {
        return null;
    }

    @Override
    public List<String> getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return null;
    }

    @Override
    public List<String> getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return null;
    }
}

在这里插入图片描述

4.2 修改配置文件

在这里插入图片描述

4.3 修改映射文件

在这里插入图片描述

4.4 测试

在这里插入图片描述

4.5 返回查询

在这里插入图片描述
在这里插入图片描述

5.Mappers

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。 但首先,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。例如:

<!-- 使用相对于类路径的资源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
  <mapper url="file:///var/mappers/BlogMapper.xml"/>
  <mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值