0.核心配置文件
- mybatis-config.xml
- MyBatis 的配置文件控制了 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
- 必须按照以下顺序配置,否则会报错(可以缺,不能乱)
- configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- environment(环境变量)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
1.environments
- 环境
- MyBatis 可以配置多个环境。每个 SqlSessionFactory 实例只能选择一种环境。
- 主要结构:
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- environment(环境变量)
environment(环境变量)
1 <!--default为默认环境--> 2 <environments default="development"> 3 <!--环境1--> 4 <environment id="development"> 5 <transactionManager type="JDBC"> 6 <property name="..." value="..."/> 7 </transactionManager> 8 <dataSource type="POOLED"> 9 <property name="driver" value="${driver}"/> 10 <property name="url" value="${url}"/> 11 <property name="username" value="${username}"/> 12 <property name="password" value="${password}"/> 13 </dataSource> 14 </environment> 15 16 <!--环境2--> 17 <environment id="development"> 18 <transactionManager type="JDBC"> 19 <property name="..." value="..."/> 20 </transactionManager> 21 <dataSource type="POOLED"> 22 <property name="driver" value="${driver}"/> 23 <property name="url" value="${url}"/> 24 <property name="username" value="${username}"/> 25 <property name="password" value="${password}"/> 26 </dataSource> 27 </environment> 28 ? 29 </environments>
- 配置了多个环境以后只需要在SqlSesssionFactoryBuilder中写入环境名称即可
可以接受环境配置的两个方法签名是:?
1 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment); 2 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);
transactionManager(事务管理器)
在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):
- JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
- MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。使用 Spring + MyBatis,则没有必要配置事务管理器
dataSource(数据源)
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
- 有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):
- UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。 性能表现则依赖于使用的数据库,对某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。
- POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。一般都是使用这个,其他下文不做说明。
- JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。
POOLED可使用的参数
driver
– 这是 JDBC 驱动的 Java 类全限定名(并不是 JDBC 驱动中可能包含的数据源类)。url
– 这是数据库的 JDBC URL 地址。username
– 登录数据库的用户名。password
– 登录数据库的密码。
2.properties
- 属性
- 配置文件中的所有属性可以在典型的 Java 属性文件(db.properties)中配置,也可以在properties里定义。
外部配置文件
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3308/mybatis?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8 username=root password=mysql
外部配置和properties中都给了相同参数的配置的时候,会优先读取外部配置文件!
<!--引入外部配置文件--> <properties resource="db.properties"> <property name="username" value="root"/> <property name="password" value="mysql"/> </properties> <!--那么environment中的变量就可以读取properties配置的参数--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <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>
3.typeAliases
- 别名
- 其实就是简化mapper.xml文件中参数类型"com.rzp.pojo.User",不使用别名就太长了。
- 有两种起法:
- 给类起别名
- 给包起别名
给类起别名
- 类型别名可为要使用的“类”(比如实体类User)设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。
<typeAliases> <typeAlias alias="User" type="com.rzp.pojo.User"/> </typeAliases>
那么Mapper.xml使用配置时:
1 <mapper namespace="com.rzp.dao.UserMapper"> 2 <!--可以直接使用User而不需要像第二个方法update里写全路径--> 3 <select id="getUserList" resultType="User"> 4 select * from mybatis.user 5 </select> 6 7 <update id="updateUser" parameterType="com.rzp.pojo.User"> 8 update mybatis.user set name = #{name}, pwd = #{pwd} where id = #{id}; 9 </update> 10 </mapper>
给包起别名
- 类型别名可为“包”起别名,使用的时候直接把类名全部小写即可
<typeAliases> <package name="com.rzp.pojo"/> </typeAliases>
1 <mapper namespace="com.rzp.dao.UserMapper"> 2 <!--user大写也可以,但是官方推荐小写--> 3 <select id="getUserList" resultType="user"> 4 select * from mybatis.user 5 </select> 6 </mapper>
- 另外,如果这种情况下想自定义别名,可以为类增加注解:
@Alias("author") public class Author { ... }
Java内置类的默认别名
- 简单列举几个,其他可以去查,大致规则:
- 前面加下划线,是指8大基本类型
- 不加下划线是包装类,使用小写
别名 | 映射的类型 |
---|---|
_int | int |
int | Integer |
decimal | BigDecimal |
map | Map |
4.setting
-
- 设置
- 其中重要:
设置名 | 描述 | 有效值 | 默认值 |
---|---|---|---|
cacheEnabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 | true | false | true |
lazyLoadingEnabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 |
true | false | false |
mapUnderscoreToCamelCase | 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 | true | false | False |
logImpl | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 | SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING | 未设置 |
<settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="mapUnderscoreToCamelCase" value="false"/> </settings>
5.mappers
- 映射器
- 有4种使用方式,不同点见注释
1 <!-- 使用相对于类路径的资源引用,不要求同名同路径,只要xml里的namespace配置正确就可以--> 2 <mappers> 3 <mapper resource="org/mybatis/builder/AuthorMapper.xml"/> 4 </mappers> 5 <!-- 使用映射器接口实现类的完全限定类名,要求接口和xml文件必须在同一个包下而且同名! --> 6 <mappers> 7 <mapper class="org.mybatis.builder.AuthorMapper"/> 8 </mappers> 9 ? 10 <!-- 将包内的映射器接口实现全部注册为映射器,要求接口和xml文件必须在同一个包下而且同名! --> 11 <mappers> 12 <package name="org.mybatis.builder"/> 13 </mappers> 14 ? 15 <!-- 使用完全限定资源定位符(URL),不推荐使用!! --> 16 <mappers> 17 <mapper url="file:///var/mappers/AuthorMapper.xml"/> 18 </mappers> 19 ?
接口和xml文件必须在同一个包下而且同名:
其他配置
- 并不是很重要,需要再去官网看。
-
- ypeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- mybatis-generator-core --根据数据库自动生成增删改查,但是可能出问题
- mybatis-plus --增删改查的语句都不用写了
- 通用mapper
- 还有其他插件,可以在maven仓库找
原文地址:https://www.cnblogs.com/renzhongpei/p/12571473.html
时间: 2024-10-12 11:29:58