在MyBatis中,不免会有一些配置要设置,我们先来看一下MyBatis配置XML文件的层次结构,这些层次是不能够颠倒顺序的,下面是层次结构;

<?xml version = "1.0" encoding = "UTF-8"?>
<configuration><!--配置-->
<properties/><!--属性-->
<settings/><!--设置-->
<typeAliases/><!--类型命名-->
<typeHandlers/><!--类型处理器-->
<objectFactory/><!--对象工厂-->
<plugins/><!--插件-->
<environments><!--配置环境-->
<environment><!--环境变量-->
<transactionManager/><!--事务管理器-->
<datSource/><!--数据源-->
</environment>
</environments>
<databaseIdProvider/><!--数据库厂商标识-->
<mappers/><!--映射器-->
</configuration>

以上就是MyBatis的所有配置属性了,接下来我们来一个个详细分析;

        首先是properties元素;有三种配置方式;property子元素,properties配置文件,以及程序参数传递;
            property子元素

<properties>
<property name = "driver" value = "com.mysql.jdbc.Driver"/>
<property name = "url" value = "jdbc:mysql://localhost:3306/mybatis"/>
<property name = "username" value = "root"/>
<property name = "password" value = "learn"/>
</properties>

          接下来是properties配置文件;先做一个.properties的文件,文件中声明了你要配置的属性值,这样沃恩可以在多个配置文件中重复使用他们;

#数据库配置文件
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis
username = root
password = learn

  然后我们在properties元素中导入进来了;

<properties resource = "jdbc.properties"/>

          程序参数传递;通过以方法参数来传递属性,并覆盖已读取的同名属性;

InputStream cfgStream = null;
Reader cfgReader = null;
InputStream proStream = null;
Reader proReader = null;
Properties properties = null;
try{
//读入配置文件流
cfgStream = Resources.getResourceAsStream("mybatis-config.xml");
cfgReader = new InputStreamReader(cfgStream);
proStream = Resources.getResourceAsStream("jdbc.properties");
proReader = new InputStreamReader(proStream);
properties = new Properties();
properties.load(proReader);
//解密为明文;
properties.setProperty("username",docode(properties.getProperty("username")));
properties.setProperty("password",docode(properties.getProperty("password")));
}catch(IOException ex){
Logger.getLogger(SqlSessionFactoryUtil.class.getName()).log(Level.SEVERE,null,ex);
}
synchronized(CLASS_LOCK){
if(sqlSessionFactory == null){
sqlSessionFactory = new SqlSessionFactoryBuilder().build(cfgReader,properties);
}
}
<settings>
<setting name = "cacheEnabled" value = "true"/>
<setting name = "lazyLoadingEnabled" value = "true"/>
<setting name = "multipleResultSetsEnabled" value = "true"/>
<setting name = "useColumnLabel" value = "true"/>
<setting name = "useGeneraterdKeys" value = "false"/>
<setting name = "autoMappingBehavior" value = "PARTIAL">
<setting name = "defaultExecutorType" value = "SIMPLE"/>
<setting name = "defaultStatementTimeout" value = "25"/>
<setting name = "safeRowRoundsEnabled" 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>

  

第三个设置是别名;因为当我们的类全限定名过长,所以我们就希望用一个简短的名称去指代他,而这个名称可以在MyBatis上下文中使用,分为系统定义别名和自定义别名。额,系统自定义的别名就自己百度去找,避免我有凑文字的嫌疑。。
下面是自定义的别名设置;

<typeAliases>
<typeAlias alias = "role" type = "com.learn.chapter2.po.Role">
</typeAliases>

  

这样子,在接下来的上下文中,当你要用到com.learn.chapter2.po.Role的时候,都可以直接用role来替代了
第四个,typeHandler类型处理器;
        这个处理器的功能在于将你的就javabean的数据类型和你的jdbc数据类型进行转换,相当于是一个转换器,这种也是分为系统自带的和自定义的;但不管是那个,你都要先继承BaseTypeHandler<String>,然后用注解声明你要转化的类型和要转化成的类型,并实现他的四个接口;然后你在配置文件中把这个类型转换器给注册进去就可以了。代码如下:

@MappedTypes({String.class})
@MappedJdbcTypes(JdbcType.VARCHAR)
public class MyStringTypeHandler implements TypeHandler<String>{
private Logger log = Logger.getLogger(MyStringTypeHandler.class);
@Override
public void setParameter(PreparedStatement ps,int index,String value,JdbcType jt) throws SQLException{
log.info("使用我的TypeHandler");
ps.setString(index,value);
}
@Override
public String getResult(ResultSet rs,String colName) throws SQLException{
log.info("使用我的TypeHandler,ResultSet列名获取字符串");
return rs.getString(colName);
}
@Override
public String getResult(ResultSet rs,int index) throws SQLException{
log.info("使用我的TypeHandler,ResultSet下标获取字符串");
return rs.getString(index);
}
@Override
public String getResult(CallableStatement cs,int index) throws SQLException{
log.info("使用我的TypeHandler,CallableStatement下标获取字符串");
return cs.getString(index);
}
}

  

接下来的是一些比较无关紧要的设置,或者说大多数情况下都不会去设置的,像是ObjectFactory对象工厂,plugins插件,environments配置环境,这里可以说一下environments中的各个子元素;
environments表明在缺省的情况下,我们将启用哪个数据源配置;
environment元素是配置一个数据源的开始,属性id是设置这个数据源的标志,以便MyBatis上下文使用它,也就是说会有镀铬environment数据源了,
transactionManager配置的是数据库事务,一帮都是采用JDBC模式;
property元素则是可以配置数据源的各类属性,这里我们配置了autoCommit = false,要求数据源不自动提交;
dataSource标签,是配置数据源连接的信息,type属性是提供我们对数据库连接方式的配置,一般采用POOLED,连接数据库;
最后是引入映射器;
映射器作为MyBatis的核心,是我们必须要掌握的,之后会更详细地讲的,现在先说个例子;
首先,你要先有一个接口类;

public interface RoleMapper{
public Role getRole(Long id);
}

  接下来,我们给出xml文件,定义Mapper映射规则和SQL语句;

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "com.learn.chapter3.mapper.RoleMapper">
<select id = "getRole" parameterType = "long"
resultType = "com.learn.chapter3.po.Role">
select id, role_name as roleName,note from t_role where id = #{id}
</select>
</mapper>

  最后,我们在配置中注册一个映射器就可以了;

<mappers>
<mapper resource = "com/learn/chapter3/mapper/roleMapper.xml"/>
</mappers>

  以上就是MyBatis的所有相关配置属性了,记住顺序一定不能乱,一定要按照(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)的顺序;

MyBatis相关配置的更多相关文章

  1. SpringBoot 整合MyBatis 统一配置bean的别名

    所谓别名, 就是在mappper.xml配置文件中像什么resultType="xxx" 不需要写全限定类名, 只需要写类名即可. 配置方式有两种: 1. 在 applicatio ...

  2. springmvc+spring+mybatis 项目配置

    前提 工作环境:JDK 1.8.Mysql 5.7.18.Intellij IDEA 2018.1.Tomcat 8.5.Maven 框架版本:Spring 4.2.0.RELEASE.SpringM ...

  3. Spring与Mybatis整合配置

    Mybatis核心配置文件: 配置文件内可以不写内容 <?xml version="1.0" encoding="UTF-8" ?> <!DO ...

  4. spring整合mybatis(hibernate)配置

    一.Spring整合配置Mybatis spring整合mybatis可以不需要mybatis-config.xml配置文件,直接通过spring配置文件一步到位.一般需要具备如下几个基本配置. 1. ...

  5. SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)

    1.概念:SpringBoot 整合 MyBatis 2.背景 SpringBoot 得到最终效果是一个简化到极致的 WEB 开发,但是只要牵扯到 WEB 开发,就绝对不可能缺少数据层操作,所有的开发 ...

  6. SpringBoot集成Mybatis(0配置注解版)

    Mybatis初期使用比较麻烦,需要各种配置文件.实体类.dao层映射关联.还有一大推其它配置.当然Mybatis也发现了这种弊端,初期开发了generator可以根据表结构自动生成实体类.配置文件和 ...

  7. [教程] Spring+Mybatis环境配置多数据源

    一.简要概述 在做项目的时候遇到需要从两个数据源获取数据,项目使用的Spring + Mybatis环境,看到网上有一些关于多数据源的配置,自己也整理学习一下,然后自动切换实现从不同的数据源获取数据功 ...

  8. SpringMVC+Spring+mybatis项目从零开始--Spring mybatis mysql配置实现

    上一章我们把SSM项目结构已搭建(SSM框架web项目从零开始--分布式项目结构搭建)完毕,本章将实现Spring,mybatis,mysql等相关配置. 1.    外部架包依赖引入 外部依赖包引入 ...

  9. generator.xml文件与相关配置插件

    一,generator.xml配置信息 1 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...

随机推荐

  1. 打通MySQL的操作权限

    打通MySQL的操作权限 前面已经总结了<XAMPP的配置与使用>,虽然可以直接通过GUI控制面板去启动MySQL服务,但是有些相关的操作则需要在Windows中的CMD命令窗口中去对My ...

  2. checkbox/input文本框与文字对齐

    3种方法都能实现checkbox文本框或radio文本框与文字对齐: <meta charset="utf-8"> <input style="vert ...

  3. JAVA死锁

    死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放.由于线程被无限期地阻塞,因此程序不能正常运行. 简单的说就是:线程死锁时,第一个线程等待第二个线程释放资源,而同时第 ...

  4. 奥酷流媒体服务系统AMS5.0

      2016年6月29日,北极星通对外发布AMS5.0版本,AMS是北极星通公司独立研发的高性能流媒体服务系统软件,可广泛应用于视频直播,视频点播,视频转码,视频录播等场合. AMS5.0增加功能: ...

  5. Python自动化测试、性能测试成长路线图

    Python自动化测试成长路线图 性能测试成长路线图

  6. 简单了解下OSI七层模型的作用以及常见网络协议含义和所用端口

    OSI七层模型及每层的作用 包括:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层物理层用来建立.维护.断开物理连接数据链路层建立逻辑链接.进行硬件地址寻址.差错校验等功能网络层进行逻辑地址 ...

  7. 使用Websocket框架之GatewayWorker开发电商平台买家与卖家实时通讯

    前段时间公司提了一个新的需求,在商品的详情页要实现站内买家和商品卖家实时通讯的功能以方便沟通促成交易,要开发此功能当时首先考虑到的就是swoole和workerman了,从网上大概了解了一下关于这两款 ...

  8. tf.variable和tf.get_Variable以及tf.name_scope和tf.variable_scope的区别

    在训练深度网络时,为了减少需要训练参数的个数(比如具有simase结构的LSTM模型).或是多机多卡并行化训练大数据大模型(比如数据并行化)等情况时,往往需要共享变量.另外一方面是当一个深度学习模型变 ...

  9. web 参考网址

    https://w3c.github.io/ https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket#%E7%A4%BA%E4%BE%8B ...

  10. Luogu P1596 [USACO10OCT]湖计数Lake Counting

    题目描述 Due to recent rains, water has pooled in various places in Farmer John's field, which is repres ...