MyBatis使用笔记

--------------------------------------------------------------------
异常经验
运行时报异常
Check syntax #{property|(expression), var1=value1, var2=value2


原因是mapper的xml文件可能有拼写错误,如{}打错为(),修改正确即没问题

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


properties属性配置
properties是一个配置属性的元素,可能在配置文件上下文中使用,有3种配置方式:
[list]
  • property子元素
  • <property name="driver" value="com.mysql.jdbc.Driver"/>

    可以在其他地方以这样的方式引用driver:
    <property name="driver" value="${driver}"/>

  • properties配置文件
  • 新建一个properties配置文件
    #数据库配置文件
    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/mybatis
    username=test
    password=123

    引用配置文件:
    <properties resource="jdbc.properties"/>
  • 程序参数传递
  • 一般通过
    Resources.getResourceAsStream("mybatis-config.xml")
    的方式读入配置文件流数据,然后通过Properties类实现配置文件的载入( load方法)和属性设置( setProperty/getProperty方法),然后通过 SqlSessionFactoryBuilder().build()方法将配置文件载入并生成 SqlSessionFactory
    这一般用于需要将配置文件中的密码加解密的环节
    [/list]
    在实际编码中,应当避免混用以上3种方式,如果出现混用,MyBatis会按照以下优先级处理:
    • 读取作为程序参数传递的属性,优先级最高
    • 读取properties的resource定义的属性文件,优先级次高
    • 读取property属性的值,优先级最低

    优先级高的会覆盖优先级低的属性值首选应当使用properties文件方式,同时应当尽量将 配置文件放在一个文件中,便于管理和维护

    settings设置
    • settings最为复杂,但也是最重要的配置,可以不配置。
    • cacheEnabled:影响所有mapper中配置的缓存全局开关,默认true
    • lazyLoadingEnabled:延迟加载全局开关。特定关联关系中可通过设置fetchType属性覆盖该项的开关状态。默认false
    • aggressiveLazyLoading:true时,对任意属性的调用都会使带有延迟加载属性的对象完整加载;false时每种属性都按需加载。默认true
    • multipleResultSetsEnabled:是否允许单一语句返回多结果集(需要数据库驱动兼容)。默认false
    • useColumnLabel:使用列标签代替列名。不同驱动可能有不同表现。默认true
    • useGeneratedKeys:允许JDBC支持自动生成主键,但需要数据库驱动兼容。设置为true,强制使用自动生成主键,某些数据库驱动如Derby可能不支持,但仍可正常工作。默认false
    • autoMappingBehavior:指定MyBatis如何自动映射列到字段或属性,NONE表示取消自动映射、PARTIAL表示只会自动映射没有定义嵌套结果集映射的结果集、FULL表示会自动映射任意复杂的结果集。默认PARTIAL
    • defaultExecutorType:配置默认的执行器。SIMPLE为普通的执行器、REUSE会重用预处理语句Prepared statements、BATCH将重用语句并执行批量更新。默认SIMPLE
    • defaultStatementTimeout:设置超时时间。应当为正整数。没有设置时使用数据库驱动默认的时间。默认为Not Set(null)
    • safeRowBoundsEnabled:允许在嵌套语句中使用分页。默认为false
    • mapUnderscoreToCamelCase:是否开启驼峰命名规则映射,从数据库经典列名A_COLUMN到JAVA经典命名aColumn映射。默认false
    • localCacheScope:利用本地缓存防止循环引用和加速重复嵌套查询。SESSION表示缓存一个会话中执行的所有查询,STATEMENT表示本地会话仅用于语句执行,对相同的SqlSession的不同调用将不会共享数据缓存。默认值SESSION。
    • jdbcTypeForNull:没有为参数指定JDBC类型,使用空值指定。一般使用NULL、VARCHAR或OTHER。默认值OTHER
    • lazyLoadTriggerMethods:指定触发一次延迟加载的对象方法。默认值为一个方法列表,通过逗号分隔,equals,clone,hashCode,toString
    • defaultScriptingLanguage:指定动态SQL生成的默认语言。配置类的别名或全限定名。默认为org.apache.ibatis.scripting.xmltas.XMLDynamicLanguageDriver
    • callSetterOnNulls:指定当结果集中值为NULL的时候是否调用映射对象的setter方法(map对象为put方法),对于有Map.keySet()依赖或null值的初始化时有用。基本类型不能设置为null。默认false
    • logPrefix:MyBatis增加到日志的前缀。可以设置任意字符串。默认没有设置。
    • logImpl:指定MyBatis的日志的具体实现。可以是SLF4J/LOG4J/LOG4J2/JDK_LOGGING/COMMONS_LOGGING/STDOUT_LOGGING/NO_LOGGING。默认没有设置。
    • proxyFactory:指定MyBatis创建具有延迟加载能力的对象使用的代理工具。可以使用CGLIB或JAVASSIST。默认在3.3.0或以上使用JAVASSIS,其他使用CGLIG。


    --------------------------------------------------------------------

    猜你喜欢

    转载自xwhuang.iteye.com/blog/2338198