博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XML 映射配置文件
阅读量:7013 次
发布时间:2019-06-28

本文共 3448 字,大约阅读时间需要 11 分钟。

hot3.png

一、properties

1、properties配置

用法一:

${username}和${password}被替换成dev_user和F2Fa3!33TYyg

用法二:

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);或SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);

2、如果属性在不只一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:

(1)在 properties 元素体内指定的属性首先被读取。

(2)然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。

(3)最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。

3、为占位符指定一个默认值

添加一个指定的属性来开启这个特性

4、使用三元运算符

二、settings

三、typeAliases

类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。例如:

指定一个包名:

四、typeHandlers

1、无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。

2、你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。具体做法为:实现 org.apache.ibatis.type.TypeHandler 接口, 或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler, 然后可以选择性地将它映射到一个 JDBC 类型。

3、MyBatis 不会窥探数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指明那是 VARCHAR 类型的字段, 以使其能够绑定到正确的类型处理器上。

(1)通过类型处理器的泛型,MyBatis 可以得知该类型处理器处理的 Java 类型,不过这种行为可以通过两种方法改变:在类型处理器的配置元素(typeHandler element)上增加一个 javaType 属性(比如:javaType="String");在类型处理器的类上(TypeHandler class)增加一个 @MappedTypes 注解来指定与其关联的 Java 类型列表。 如果在 javaType 属性中也同时指定,则注解方式将被忽略。

(2)可以通过两种方式来指定被关联的 JDBC 类型:

在类型处理器的配置元素上增加一个 jdbcType 属性(比如:jdbcType="VARCHAR"); 在类型处理器的类上(TypeHandler class)增加一个 @MappedJdbcTypes 注解来指定与其关联的 JDBC 类型列表。 如果在 jdbcType 属性中也同时指定,则注解方式将被忽略。

(3)让 MyBatis 为你查找类型处理器:

五、处理枚举类型

六、对象工厂

// ExampleObjectFactory.javapublic class ExampleObjectFactory extends DefaultObjectFactory {  public Object create(Class type) {    return super.create(type);  }  public Object create(Class type, List
constructorArgTypes, List
constructorArgs) { return super.create(type, constructorArgTypes, constructorArgs); } public void setProperties(Properties properties) { super.setProperties(properties); } public
boolean isCollection(Class
type) { return Collection.class.isAssignableFrom(type); }}

七、插件

MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。

// ExamplePlugin.java@Intercepts({@Signature(  type= Executor.class,  method = "update",  args = {MappedStatement.class,Object.class})})public class ExamplePlugin implements Interceptor {  public Object intercept(Invocation invocation) throws Throwable {    return invocation.proceed();  }  public Object plugin(Object target) {    return Plugin.wrap(target, this);  }  public void setProperties(Properties properties) {  }}

八、配置环境

1、每个数据库对应一个 SqlSessionFactory 实例

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);忽略环境参数:SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, properties);

2、数据源

UNPOOLED

POOLED

JNDI

九、映射器

告诉 MyBatis 到哪里去找映射文件

转载于:https://my.oschina.net/u/2427561/blog/1857728

你可能感兴趣的文章
数据结构和算法面试题系列—排序算法之快速排序
查看>>
打破行业壁垒!阿里云OpenSearch开启个性化搜索里程碑
查看>>
面试官,你再问我 Bit Operation 试试?
查看>>
PSV 3.60 固化升级到 3.68 破解完全攻略
查看>>
Android 路由框架
查看>>
vue踩坑记- Cannot find module 'wrappy'
查看>>
【实操干货】KVM命令管理虚拟机与性能优化
查看>>
机器学习资料合计(一)
查看>>
webpack由浅入深——(webapck简易版)
查看>>
2 - 建立 Django 博客应用
查看>>
【iOS报错】“this class is not key value coding-compliant for the key userPhoneNum”给字典设置键值对的时候报错...
查看>>
UI技术总结--性能优化
查看>>
Android NDK JNI 开发之旅01 环境搭建入门篇
查看>>
Javascript之迭代器模式
查看>>
Flutter花式玩转TextField,写一个验证码输入框超简单!
查看>>
RxJava应用:实现七牛云多图上传
查看>>
Tmux入门教程
查看>>
智能直播审核方案:视频云智能业务截帧策略
查看>>
亲历者说:Kubernetes API 与 Operator,不为人知的开发者战争
查看>>
[ARKit]10-3D模型怎么制作,哪里寻找,如何使用?
查看>>