chapter-4--mybatis的配置

一、概述

MyBatis配置项的顺序不能颠倒,否则可能发生异常。

二、各个配置项说明

1、properties

该属性可以给系统配置一些运行参数,可以直接在基本配置文件中即SqlSessionFactory的配置文件中直接配置:

<properties>

      <property name="database.driver" value="com.mysql.cj.jdbc.Driver"/>

      <property name="database.url" value="jdbc:mysql://localhost:3306/wz_db" />

      <property name="database.username" value="root" />

      <property name="database.password" value="123456" />

    </properties>

使用:

<dataSource type="POOLED">

          <property name="driver" value="${database.driver}"/>

          <property name="url" value="${database.url}"/>

          <property name="username" value="${database.username}" />

          <property name="password" value="${database.password}" />

        </dataSource>

或者通过额外的properties配置文件配置:

<properties resource="jdbc.properties" />

在某些情况下,properties文件中的数据库用户名和密码是加密的,这时就需要通过代码传递property参数了。代码如下:

String resource = "mybatis-config.xml"//基础配置文件

InputStream inputStream;

InputSream is = Resource.getResourceAsStream("jdbc.properties");

Properties props = new Properties();

props.load(is);

String userName = props.getProperty("database.username");

String password = props.getProperty("database.password");

//解密用户名和密码

props.put("database.username", CodeUtils.decode(userName));

props.put("database.password", CodeUtils.decode(password));

inputStream = Resource.getResourceAsStream(resource);

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream, props);

总结:三种配置方式优先级:代码方式>properties文件方式>property子元素方式

2、settings

settings是MyBatis中最复杂的配置,它能深刻影响MyBatis底层的运行,常用的配置项有:

关于缓存的cacheEnabled、关于级联的lazyLoadingEnabledaggresiveLazyLoading、关于自动映射的autoMappingBehaviormapUnderscoreToCamelCase、关于执行器类型的defaultExecutorType等。

3、typeAliases 别名

别名不区分大小写

3.1、mybatis已经定义的一些别名:



如果要使用对应类型的数组类型,查表看mybatis是否支持,然后别名加[]即可,如

_int[]。

3.2、自定义别名

3.2.1 通过代码注册别名

通过Configuration获取TypeAliasRegistry类对象:

TypeAliasRegistry aliasRegistry = configuration.getTypeAliasRegistry();

使用registerAlias()方法注册别名:

aliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class);

3.2.2 在配置文件中配置别名

在MyBatis基础配置文件即SqlSessionFactory配置文件中:

<typeAliases>

     <typeAlias alias="role" type="com.mybatis.learn.Role" />

</typeAliases>

3.2.3、通过包名

<typeAliases>

<package name="com.mybatis.learn.chapter03.pojo" />

</typeAliases>

MyBatis将扫描这个包里所有的类,类名的第一个字母变为小写作为其别名,但同时扫描几个包时,可能出现重名的情况如com.chapter03.pojo和com.chapter04.pojo包中都存在类名为User的类,这时候可以通过注解@Alias("user3")进行区分。

4、typeHandler类型转换器

typeHandler的作用是将jdbcType和javaType互相转换。MyBatis提供了大部分数据类型转换,但是对于枚举类型,我们往往需要通过自定义TypeHandler去实现转换。

4.1 自定义TypeHandler

自定义TypeHandler需要实现TypeHandler接口


public class SexEnumTypeHandler implements TypeHandler<sexEnum> {

@Override

public sexEnum getResult(ResultSet rs, String columnName) throws SQLException {

return sexEnum.getSexById(rs.getInt(columnName));

}

@Override

public sexEnum getResult(ResultSet rs, int i) throws SQLException {

return sexEnum.getSexById(rs.getInt(i));

}

@Override

public sexEnum getResult(CallableStatement cs, int i) throws SQLException {

return sexEnum.getSexById(cs.getInt(i));

}


@Override

public void setParameter(PreparedStatement ps, int i, sexEnum sex, JdbcType jdbcType) throws SQLException {

ps.setInt(i, sex.getId());

}

}

枚举类型 sexEnum:

public enum sexEnum{

MALE(0, "男"), FEMALE(1, "女");

    private int id;

    private String sex;

private sexEnum(int id, String sex) {

this.id = id;

this.sex = sex;

}


public static sexEnum getSexById(int id){

for(sexEnum s : sexEnum.values()) {

if(s.getId() == s.id) {

return s;

}

return null;

}

/**getter and setter**/

}

启用自定义TypeHandler:


在映射器配置文件中配置

采用扫包+注解方式启用:


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,423评论 0 4
  • MyBatis 理论篇 [TOC] 什么是MyBatis  MyBatis是支持普通SQL查询,存储过程和高级映射...
    有_味阅读 2,881评论 0 26
  • MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架,其主要就完成2件事情: 封装JDBC...
    慕容小伟阅读 1,007评论 0 2
  • 文:楚浛(引自林秋彤)图:网络 今天旁听了半节关于教师礼仪方面的课,是一位气质优雅的美女老师给小学音乐老...
    楚浛阅读 11,996评论 2 19
  • 很晚了还在想我怎么了 没有眼泪无知的承受着 一阵阵莫名的伤感来袭 心为什么还会痛 我怎么了…… 你没怎么 你很捧 ...
    舍得小坐阅读 261评论 0 0