Mybatis的配置

一、XML的配置
1.XML的结构:

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

对于上面XML的设置我们必须按照这个顺序来实现,否则就会出现错误。
2.properties属性
比如我们的数据库在使用配置的时候我们的用户名和密码都是直接指定的,那么这样就会带来一个问题,如果我们的用户名或者密码发生改变以后我们的数据库连接就会出现问题了。所以我们可以采用在配置文件中使用属性来替换需要动态配置的属性值。
eg:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="config/database.properties">
        <property name="username" value="root"/>
    </properties>
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/memo"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>

在上面的属性中username和password将会被properties属性文件中相应的值替换掉。
在 properties 元素体内指定的属性首先被读取; 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文 件,并覆盖已读取的同名属性;
最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的 是 properties 属性中指定的属性。
3.settings的调整设置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="config/database.properties">
        <property name="username" value="root"/>
    </properties>
    <!--mybatis的设置,主要影响mybatis的运行行为-->
    <settings>
        <setting name="logImpl" value="SLF4J"/>
    </settings>

3.1在settings里面有一个特别重要的配置就是日志的配置
(1)首先我们需要知道日志是什么?
日志就是自动打印一些你在程序里面设置的输入信息。它可以记录我们的程序在什么时候什么时间发生了什么样的错误信息。
有了日志以后我们以前java代码里面的System.out.println()就可以替换为我们的

 logger.debug("查询结果是:{}",list);

它里面的{}表示java对应需要输出的一个值。
4. typeAliases的配置
它的意思是给java设置类型别名。它之和XML配置有关,我们一般不推荐使用,因为如果把名字换了别人拿到这个代码的时候根本不知道你的这个类在哪个地方。
(1)默认内建类型别名
在我们的mybatis框架里面已经为我们常见的java类型内建了相应的别名。
(2)自定义类型别名

 <!--自定义类型别名-->
    <typeAliases>
        <!--<typeAlias alias="MemoGroup" type="com.wschase.entity.MemoGroup"/>-->

        <!--
        假如我们有几十个类那么上面起别名的方式就会特别的麻烦,所以我们可以将包直接起一个别名,
        这样的话我们这个包下面的所有的类就可以使用别名了
        -->

        <!--我们并没有起别名,所以它里面的类是直接将自己的类名变为小写作为别名-->
        <package name="com.wschase.entity"/>
    </typeAliases>

5.typeHandlers处理器
我们说我们的java里面都是对象,而我们的SQL里面的是一个个的值,这个时候就需要我们将面向过程转化为面向对象,所以我们有一个处理器专门来做这个事情。无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成 Java 类型。但是我们需要注意的是我们的Mybatis框架已经提供了各个类型的处理器。所以我们一般不会使用自定义的类型处理器,只有在我们自定义的类,比如Person类的时候Mybatis就没有提供这个类型处理器,所以我们就使用自定义的类型处理器。
(1)默认的类型处理器
Mybatis框架默认提供了多种类型的处理器,基本涵盖了Java中使用到的各种数据类型。
(2)自定义类型处理器(了解):我们在XML里面自定义的类型处理器的优先级高于我们注解的处理器。但是我们为什么还会存在注解类型的处理器,因为如果我们程序里面有很多的类型处理器,一个一个的去采用自定义的方式在XML里面写会增加我们的负担,所以我们可以指定一个包,在类里面使用注解的方式指定类型处理器。我们一般不太会使用自定义的类型处理器,只有当你使用的类型,JDBC没有提供这种类型的处理器那么我们才使用自定义类型处理器

 <!--&lt;!&ndash;类型处理器:将我们java的jdbcType的VARCHAR类型都转化为我们自己定义的String的处理类型来处理&ndash;&gt;-->
    <!--<typeHandlers>-->
        <!--&lt;!&ndash;方法1:如果只指定一个自定义类型处理器,那么我们就直接在XML里面使用属性的方式进行自定义类型类型处理器&ndash;&gt;-->
        <!--&lt;!&ndash;<typeHandler handler="com.wschase.plugin.MyStringTypeHandler" javaType="string" jdbcType="VARCHAR"/>&ndash;&gt;-->

        <!--&lt;!&ndash;方法2:只用包来定义自定义类型处理器的时候我们就需要在我们的类里面使用注解::在类型处理器的类上(TypeHandler class)增加 @MappedTypes 注解来指定与其关联的 Java 类型 列表; @MappedJdbcTypes注解来指定与其关联的JDBC类型&ndash;&gt;-->
        <!--<package name="com.wschase.plugin"/>-->
    <!--</typeHandlers>-->

6.对象工厂——ObjectFactory(了解)
(1)
在java中怎么实现对象工厂(就是怎么实例化一个对象):
1.new一下
2.反射实现
3.序列化实现:java对象可以保存到一个文件里,可以通过反序列化构造一个java对象
(2)
MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。 默认的对象工 厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例 化。 如果想覆盖对象工厂的默认行为,则可以通过创建自己的对象工厂来实现。
7.插件(plugins)
Mybatis允许你在已经映射的sql语句执行的过程中进行拦截调用。目前,我们的Mybatis允许使用插件的方式来拦截的方法调用有:(我们需要记住一两个)

*StatementHandler 的 prepare, parameterize, batch, update, query 方法 
*ParameterHandler 的 getParameterObject, setParameters 方法 
*Executor 的 update, query, flushStatements, commit, rollback, getTransaction, close, isClosed 方 法 
*ResultSetHandler 的 handleResultSets, handleOutputParameters 方法

8.配置环境(environments)
Mybatis可以配置多种环境,实现多个数据库之间的映射,但是我们目前一般只会使用一个数据库之间的映射。其次需要注意的是:尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一,每个数据库对应一个SqlSessionFactory 实例。
eg:

<environments default="development">  
    <environment id="development">
        <transactionManager type="JDBC">      
             <property name="..." value="..."/>    
         </transactionManager>    
          <dataSource type="POOLED">      
               <property name="driver" value="${driver}"/>  
                <property name="url" value="${url}"/>      
                <property name="username" value="${username}"/>          
               <property name="password" value="${password}"/>    
               </dataSource>  
          </environment> 
</environments>

在配置环境的时候需要注意的是:
*默认的环境 ID(比如:default=”development”);
*每个 environment 元素定义的环境 ID(比如:id=”development”);
*事务管理器的配置(比如:type=“JDBC”)——MySQL数据库里面有事务管理,那么我们在java里面也应该有事务,什么时候提交什么时候回滚等等 ;
*数据源的配置(比如:type=“POOLED”);
9.事务管理
(1)在mybatis里面有两种事务管理:
1)一个是JDBC,这个配置就是直接使用的JDBC的提交和回滚设置,它依赖从数据库获取的连接来私信啊事务管理作用域。——我们默认使用的事务管理是JDBC
2)一个是MANAGED,这个配置几乎不做什么
(2)数据源
在JDBC中获取连接有两种情况:
    1).通过DriverManger
    2).通过数据源来获取
而在我们的Mybatis里面使用的就是数据源的方式来获取连接。
那我们为什么要使用数据源呢?我们希望的是把获取数据库连接的这种操作,抽象为一种源头,不关心连接是什么东西,只关心这个源头可以提供给我需要的东西就可以了。所以在Mybatis里面就有DataSourse接口。
Mybatis一共有三种内建的数据源实现,
  1)UNPOOLED:
这个数据源的实现只是每次被请求时打开和关闭连接。
  2)POOLED:
这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初 始化和认证时间。——为什么要使用池化:因为我们获取连接的时候是一个很耗时的操作,因为需要建立起TCP连接跟数据库的一个会话,非常耗资源,所以我们希望通过一个容器的方式管理起来,放在一起;这样的思想我们还在线程池里面使用过。用就取,不用就还给我,存放着。所以如果你使用的是池化的数据源,那么关闭连接在真正意义上是没有关闭的。
目前我们暂时使用这种类型的连接池,但是我们需要知道mybatis的核心在于数据库的映射,而不是在于连接池,也就是它的长处并不在于连接池上。它在javax.sql这个包下面

  3)JNDI:(一定要记住它的中文名字)
java命名和目录接口:在一个容器里面它有一个配置信息,这个配置接口的名字就叫服务或者接口,这个服务或接口的名字就叫数据源,把这服务配置以后,java程序在读取的时候并不关心你的地址、用户名、密码什么的,它只关心配置里面的名字。把它配置以后在你的程序里面就可以通过初始化InitialContext initialContext并initialContext.lookup一下就可以获取到数据源,它是通过一种外部配置的方式来实现的。它的思想是:我不在java 程序里面,我是在我电脑上的某一个地方配置某一个信息,说这个信息就是一个数据源,然后我java程序里面只需要通过一个InitialContext然后lookup一下我的这个数据源,我的数据源只给你一个名称,你拿到这个字符串的名字,你就可以获取到这个datasoure就可以获取到一个连接了。
10.映射器
(1)加载类路径下的映射器配置文件
我们目前掌握加载类路径下的映射器配置文件

<!-- 使用 classpath 相对资源 --> 
<mappers>    
     <mapper resource="com/bittech/mybatis/mapper/MemoGroupMapper.xml"/>    
     <mapper resource="com/bittech/mybatis/mapper/MemoInfoMapper.xml"/>    
     <mapper resource="com/bittech/mybatis/mapper/MemoShareMapper.xml"/> 
 </mappers>

(2)加载全路径下的映射器配置文件
(3)加载Mapper接口类:它必须要使用注解,但是我呢在查询、删除、更新、插入sql里面一般不会使用注解(这些注解都在:org.apache.ibatis这个包里面),我们主要使用的是param(参数)这个注解,mybatis的配置我们主要使用的是XML的方式来配置的。
(4)加载指定包下的Mapper接口类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值