0. 核心配置文件
mybatis-config.xml
MyBatis 的配置文件控制了 MyBatis 行为的设置和属性信息. 配置文档的顶层结构如下:
必须按照以下顺序配置, 否则会报错(可以缺, 不能乱)
- configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
- 1.environments
环境
MyBatis 可以配置多个环境. 每个 SqlSessionFactory 实例只能选择一种环境.
主要结构:
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- environment(环境变量)
- <!--default 为默认环境 -->
- <environments default="development">
- <!-- 环境 1-->
- <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>
- <!-- 环境 2-->
- <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>
配置了多个环境以后只需要在 SqlSesssionFactoryBuilder 中写入环境名称即可
可以接受环境配置的两个方法签名是:
- ?
- SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
- 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+8
- 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 使用配置时:
- <mapper namespace="com.rzp.dao.UserMapper">
- <!-- 可以直接使用 User 而不需要像第二个方法 update 里写全路径 -->
- <select id="getUserList" resultType="User">
- select * from mybatis.user
- </select>
- <update id="updateUser" parameterType="com.rzp.pojo.User">
- update mybatis.user set name = #{name}, pwd = #{pwd} where id = #{id};
- </update>
- </mapper>
给包起别名
类型别名可为 "包" 起别名, 使用的时候直接把类名全部小写即可
- <typeAliases>
- <package name="com.rzp.pojo"/>
- </typeAliases>
- <mapper namespace="com.rzp.dao.UserMapper">
- <!--user 大写也可以, 但是官方推荐小写 -->
- <select id="getUserList" resultType="user">
- select * from mybatis.user
- </select>
- </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 种使用方式, 不同点见注释
- <!-- 使用相对于类路径的资源引用, 不要求同名同路径, 只要 xml 里的 namespace 配置正确就可以 -->
- <mappers>
- <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
- </mappers>
- <!-- 使用映射器接口实现类的完全限定类名, 要求接口和 xml 文件必须在同一个包下而且同名! -->
- <mappers>
- <mapper class="org.mybatis.builder.AuthorMapper"/>
- </mappers>
- ?
- <!-- 将包内的映射器接口实现全部注册为映射器, 要求接口和 xml 文件必须在同一个包下而且同名! -->
- <mappers>
- <package name="org.mybatis.builder"/>
- </mappers>
- ?
- <!-- 使用完全限定资源定位符(URL), 不推荐使用!! -->
- <mappers>
- <mapper url="file:///var/mappers/AuthorMapper.xml"/>
- </mappers>
- ?
接口和 xml 文件必须在同一个包下而且同名:
其他配置
并不是很重要, 需要再去官网看.
- ypeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
mybatis-generator-core -- 根据数据库自动生成增删改查, 但是可能出问题
mybatis-plus -- 增删改查的语句都不用写了
通用 mapper
还有其他插件, 可以在 maven 仓库找
来源: http://www.bubuko.com/infodetail-3477855.html