Mybatis配置解析
3.1 核心配置文件
- mybatis-config.xml
3.2 环境变量(environments)
虽然您可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一个环境。
因此,如果要连接到两个数据库,则需要创建两个 SqlSessionFactory 实例,每个实例对应一个。对于三个数据库,您需要三个实例,依此类推。
有两种 TransactionManager事务管理器:
- JDBC – 此配置仅直接使用 JDBC 提交和回滚工具。它依赖于从数据源检索到的连接来管理事务的范围。
- Managed– 此配置几乎不执行任何操作。它从不提交或回滚连接。
数据源:连接数据库
-
有三种内置数据源类型(即 type=“[UNPOOLED|POOLED|JNDI]“):
-
UNPOOLED – 此数据源实现只是在每次请求连接时打开和关闭连接。
-
POOLED – 此数据源实现将 JDBC 连接对象池化,外部响应更快
-
JNDI – 此数据源的实现旨在与容器(如 EJB 或应用程序服务器)一起使用,这些容器可以集中或外部配置数据源,并在 JNDI 上下文中放置对它的引用
mysql默认的的事务管理器是JDBC,连接池:POOLED
3.3 属性(properties)
属性外部设置可动态替换,可以在典型的 Java 属性文件(db.properties)实例中进行配置,也可以通过属性元素的子元素传入。
编写配置文件:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf-8
username=root
password=123456789
在核心配置文件中引入外部配置文件,如果两个外部文件中有同一个字段,优先使用外部配置文件
<properties resource="db.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.4 类型别名(typeAliases)
类型别名只是 Java 类型的较短名称。它仅与 XML 配置相关,并且只是为了减少完全限定类名的冗余类型而存在。
第一种方式:
<typeAliases>
<typeAlias type="com.liu.pojo.User" alias="User"/>
</typeAliases>
第二种方式:指定一个包名,mybatis会在包名下搜索JavaBean,用实体类的首字母小写代替的类名代替别名
<typeAliases>
<typeAlias type="com.liu.pojo"/>
</typeAliases>
扫描包的情况下,或者通过实体类上增加注解名来代替别名
@Alias("author")
常用内置别名:
_byte | 字节 |
---|---|
_long | 长 |
_short | 短 |
_int | int |
_integer | int |
_double | 双 |
_float | 浮 |
_boolean | 布尔 |
字符串 | 字符串 |
字节 | 字节 |
长 | 长 |
短 | 短 |
int | 整数 |
整数 | 整数 |
双 | 双 |
浮 | 浮 |
布尔 | 布尔 |
日期 | 日期 |
十进制 | 大十进制 |
大十进制 | 大十进制 |
对象 | 对象 |
地图 | 地图 |
哈希映射 | 哈希映射 |
列表 | 列表 |
数组列表 | 阵列列表 |
收集 | 收集 |
迭 代 | 迭 代 |
3.5 设置(settings)
比如数据库中的字段last_name对应实体类中的lastName,这个会自动帮助你生成!
日志实现:
开启缓存和懒加载:
其他配置:
plugins:
- mybatis-generator-core
- mybatis-plus
- 通用mapper
3.6 映射器(mappers)
未注册会报错!!
MapperRegistry:注册绑定Mapper文件,每写一个dao实现类就需要绑定
方式一(推荐):使用相对于类路径的资源引用,无论文件在哪都可以执行
<mappers>
<mapper resource="com/liu/dao/UserMapper.xml"/>
</mappers>
方式二:使用映射器接口实现类的完全限定类名,通过class
- 接口和Mapper配置文件必须在同一个包下且必须同名
<mappers>
<mapper class="com.liu.dao.UserMapper"/>
</mappers>
方式三:通过包名实现
- 接口和Mapper配置文件必须在同一个包下且必须同名
<mappers>
<package name="com.liu.dao.UserMapper"/>
</mappers>
3.7 生命周期和作用域
SqlSessionFactoryBuilder:
- 一旦创建就不需要它了
- 局部变量
SqlSessionFactory:
- 数据库连接池
- 一旦创建就一直存在,不能多次重建它
- 全局作用域
SqlSession:
- 连接到连接池的一个请求
- 关闭请求,会回收供下一个使用
- 方法或者请求作用域
3.8 解决数据库与字段不一致的问题
当数据库的字段与实体类的字段不一致的时候,会查出null值
解决方法:
- 别名:将sql查询的字段取别名
- resultMap结果映射集
3.resultMap标签
<resultMap id="UserMap" type="User">
<!--column数据库中的字段,property实体类中的属性-->
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="pwd" property="password"/>
</resultMap>
<select id="getUserById" resultMap="UserMap">
select * from mybatis.user where id = #{id}
</select>
“name” property=“name”/>
select * from mybatis.user where id = #{id}