--------------------------------------------------------------------
异常经验
运行时报异常
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。
--------------------------------------------------------------------
分享到:
相关推荐
本笔记源代码涵盖了MyBatis的基本使用、配置、映射器接口、XML配置文件、注解方式的映射以及动态SQL等内容。 1. **MyBatis 概述**: MyBatis 是一个轻量级的持久层框架,它避免了几乎所有的JDBC代码和手动设置参数...
总的来说,“传播智客-mybatis课堂笔记(2天)”涵盖了MyBatis的基础到进阶知识,对于学习者来说是一份宝贵的参考资料,有助于快速提升MyBatis的使用技能。通过这份笔记,学员可以系统地学习MyBatis的各个方面,并在...
总之,"MyBatis学习笔记1"是一份关于MyBatis框架基础和进阶使用的教程,通过学习,读者可以掌握MyBatis的基本使用方法,理解其核心机制,并能进行源码级别的探索,提升数据库操作的效率和灵活性。配合"mybatis_test...
mybatis学习笔记 mybatis学习笔记 mybatis学习笔记 mybatis学习笔记 mybatis学习笔记 mybatis学习笔记
在"MyBatis学习笔记.zip"这个压缩包中,包含了四天的学习内容,分别以"MyBatis_day1"、"MyBatis_day2"、"MyBatis_day3"和"MyBatis_day4"命名,这些笔记可能详细阐述了MyBatis的核心概念和使用方法。让我们逐一解析...
Mybatis学习笔记(狂神).md
SpringMVC-MyBatis学习笔记
在深入探讨MyBatis之前,我们先来看看使用原始JDBC编程时可能会遇到的一些问题: 1. **数据库连接的创建与释放**:在传统JDBC编程中,数据库连接的创建与释放是非常频繁的操作,这会导致大量的系统资源消耗,进而...
使用 Mybatis 的主要原因在于它可以极大地简化传统的 JDBC 编程,通过 XML 或注解的方式,将 Java 类和数据库表之间的映射关系定义清楚,从而减少了手动设置参数和获取结果集的工作。Mybatis 支持动态 SQL,允许在 ...
MyBatis 是一款深受开发者喜爱的持久层框架,它允许开发者使用 SQL 语句来操作数据库,同时提供了强大的映射机制,将 SQL 与 Java 代码分离,简化了开发过程。这篇“mybatis 学习笔记”将带你深入理解 MyBatis 的...
【SpringMVC与MyBatis整合详解...通过SpringMVC和MyBatis的整合,我们可以构建出一个高效、稳定且易于维护的云笔记应用。在实际开发中,还需要关注性能优化、用户体验设计、错误处理等方面,以打造高质量的云服务产品。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC ...通过阅读这份“mybatis笔记”,你可以更深入地了解如何使用 MyBatis 进行数据访问,提升你的开发效率。
尚硅谷的Mybatis Plus笔记和源码资源,对于学习和理解这个框架的内部实现以及如何在项目中有效使用它,是非常宝贵的资料。 1. **Mybatis Plus概述** Mybatis Plus是对Mybatis的增强工具,它在Mybatis的基础上做了...
个人学习myBatis持久层框架时记录的MyBatis学习笔记,供参考
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将...
通过阅读这份笔记和研究提供的源码,你将能够更好地掌握Mybatis的使用技巧,并能够在实际开发中游刃有余。此外,源码部分可能包括了示例项目,你可以运行并调试,以直观地看到Mybatis的各种功能在实际代码中的应用。...
个人mybatis学习笔记,是个人学习后记录所得,记录内容仅供参考,如如果有什么不对的地方,欢迎指正。
11. **Spring与MyBatis整合**:在实际开发中,MyBatis常与Spring框架结合使用,通过Spring的Dependency Injection(DI)和Transaction Management(TM)功能,简化MyBatis的使用和事务管理。 12. **MyBatis Plus**...