Mybatis-02(配置文件)

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

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

properties

配置一些常见变量,类似于spring中placeholder的作用。一般可以用来引入数据库配置
在这里插入图片描述

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/demo?characterEncoding=utf-8
username=root
password=1234

在mybatis配置文件中配置
在这里插入图片描述
在这里插入图片描述

settings

设置参数描述有效值默认值
cacheEnabled全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存。truefalse
lazyLoadingEnabled延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态truefalse
aggressiveLazyLoading当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载(参考lazyLoadTriggerMethods)truefalse
multipleResultSetsEnabled是否允许单一语句返回多结果集(需要兼容驱动)。truefalse
useColumnLabel使用列标签代替列名。不同的驱动在这方面会有不同的表现, 具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果truefalse
useGeneratedKeys允许 JDBC 支持自动生成主键,需要驱动兼容。 如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)truefalse
autoMappingBehavior指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套)NONE, PARTIAL, FULLPARTIAL
autoMappingUnknownColumnBehavior指定发现自动映射目标未知列(或者未知属性类型)的行为。 NONE: 不做任何反应WARNING: 输出提醒日志(‘org.apache.ibatis.session.AutoMappingUnknownColumnBehavior’ 的日志等级必须设置为 WARN) FAILING: 映射失败 (抛出 SqlSessionExceptionNONE, WARNING, FAILINGNONE
defaultExecutorType配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新SIMPLE REUSE BATCHSIMPLE
defaultStatementTimeout设置超时时间,它决定驱动等待数据库响应的秒数。任意正整数Not Set (null)
defaultFetchSize为驱动的结果集获取数量(fetchSize)设置一个提示值。此参数只可以在查询设置中被覆盖。任意正整数Not Set (null)
safeRowBoundsEnabled允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为false。truefalse
safeResultHandlerEnabled允许在嵌套语句中使用分页(ResultHandler)。如果允许使用则设置为falsetruefalse
mapUnderscoreToCamelCase是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射truefalse
localCacheScopeMyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。 默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。SESSIONSTATEMENT
jdbcTypeForNull当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。 某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。JdbcType 常量. 大多都为: NULL, VARCHAR and OTHEROTHER
lazyLoadTriggerMethods指定哪个对象的方法触发一次延迟加载用逗号分隔的方法列表。equals,clone,hashCode,toString
defaultScriptingLanguage指定动态 SQL 生成的默认语言。一个类型别名或完全限定类名org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
defaultEnumTypeHandler指定 Enum 使用的默认 TypeHandler 。 (从3.4.5开始) 一个类型别名或完全限定类名。org.apache.ibatis.type.EnumTypeHandler
callSettersOnNulls指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这对于有 Map.keySet() 依赖或 null 值初始化的时候是有用的。注意基本类型(int、boolean等)是不能设置成 null 的truefalse
returnInstanceForEmptyRow当返回行的所有列都是空时,MyBatis默认返回null。 当开启这个设置时,MyBatis会返回一个空实例。 请注意,它也适用于嵌套的结果集 (i.e. collectioin and association)。(从3.4.2开始)truefalse
logPrefix指定 MyBatis 增加到日志名称的前缀。任何字符串Not set
logImpl指定 MyBatis 所用日志的具体实现,未指定时将自动查找SLF4JLOG4J
proxyFactory指定 Mybatis 创建具有延迟加载能力的对象所用到的代理工具CGLIB|JAVASSIST
vfsImpl指定VFS的实现自定义VFS的实现的类全限定名,以逗号分隔。false
useActualParamName允许使用方法签名中的名称作为语句参数名称。 为了使用该特性,你的工程必须采用Java 8编译,并且加上-parameters选项。(从3.4.1开始)truefalse
useActualParamName指定一个提供Configuration实例的类。 这个被返回的Configuration实例用来加载被反序列化对象的懒加载属性值。 这个类必须包含一个签名方法static Configuration getConfiguration(). (从 3.2.3 版本开始)类型别名或者全类名.false

typeAlias

别名映射类型
_bytebyte
_longlong
_shtorshtor
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shtor Shtor
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bidecimalBigDecimal

上面这些是由MyBatis提供的别名映射,开发者也可以自定义别名,定义方式如下

<typeAliases>
		<!-- 别名不区分大小写 -->
		<!-- <typeAlias type="com.sxt.bean.User" alias="user"/> -->
		<!-- 指定类型名称的所属的package -->
		<package name="com.sxt.bean" />
	</typeAliases

在这里插入图片描述

自定义别名使用不区分大小写

typeHandlers

ypeHandlers称做类型处理器。就是实现Java类型和数据库类型之间转换的。 除了系统提供的类型转换器之外,开发者也可以自定义类型转换,如下:

例如List<—>VARCHAR之间的类型转换:

定义自定义类型转换器


/**
 * 自定义的类型转换器 实现list<String> <----> String
 * 
 * @author Administrator
 *
 */
@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(List.class)
public class MytypeHandler extends BaseTypeHandler<List<String>> {

	/**
	 * PreparedStatement ps=coon.createPreparedStatement(sql);
	 * ps.setObject(1,xxx); ps.setObject(2,xxx); ps.setObject(3,xxx);
	 * ps.setObject(4,xxx); ... ps.setObject(5,xxx);
	 * 
	 * 将数据保存到数据库的方法
	 */
	@Override
	public void setNonNullParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType JdbcType)
			throws SQLException {
		// 1.处理自定义的类型数据
		StringBuilder sb = new StringBuilder();
		for (String s : parameter) {
			sb.append(s + ";");
			String msg = sb.toString();
			if (msg.contains(";")) {
				msg = msg.substring(0, msg.lastIndexOf(";"));
			}
			// 设置占位符对应的参数
			ps.setString(i, msg);

		}

	}

	/**
	 * ps.executeQuery() While(rs.next){ a;b;c rs.Object(colnmnIndex) }
	 */
	@Override
	public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException {

		String msg = rs.getString(columnName);

		return Arrays.asList(msg.split(";"));
	}

	@Override
	public List<String> getNullableResult(ResultSet rs, int colnmnIndex) throws SQLException {
		String msg = rs.getString(colnmnIndex);

		return Arrays.asList(msg.split(";"));
	}

	@Override
	public List<String> getNullableResult(CallableStatement cs, int colnmnIndex) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

}

修改配置文件
<!-- 绑定自定义的类型处理器 -->
	<typeHandlers>
		<typeHandler handler="com.sxt.typehandler.MytypeHandler"/>
	</typeHandlers>
javaBean中的数据类型
    private Integer id;	
    
	private String name;
	
	private List<String> games;

测试
	@Test
	public void test2() {
		SqlSession session = Dbutils.getsession();
		 IStudentDao dao = session.getMapper(IStudentDao.class);
		Student s=new Student();
		s.setName("wo");
		s.setGames(Arrays.asList("a","b","c"));
		int i = dao.insert(s);
		System.out.println(i);
		session.commit();
		session.close();
		
	}
	@Test
	public void test3() {
		SqlSession session = Dbutils.getsession();
		 IStudentDao dao = session.getMapper(IStudentDao.class);
		 List<Student> list = dao.query();
		for (Student student : list) {
			System.out.println(student);
		}
		 
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值