Mybatis笔记之配置文件
-
接口式编程, 原生 : DAO
===>
DaoImpl Mybatis: Mapper===>
xxMapper.xml -
SqlSession 代表和数据库的一次会话, 使用结束必须关闭
-
SqlSession 与 Connection 一样 线程不安全, 导致线程冲突 每次使用都应该创建新的对象
-
-
两个重要配置文件
-
mybatis全局配置文件:包含数据库连接池信息,事务管理器信息等,系统运行环境
-
sql映射文件:保存了sql语句映射信息(返回结果信息,sql语句, 占位符参数) , 将接口方法与 sql语句绑定起来,将sql抽取出来
-
2. 配置文件标签
mybatis全局配置文件标签:配置文件在 Configuration()里面可以看到
标签顺序(不能乱) |
---|
![]() |
2.1 配置文件
properties
: 引入来自外部的properties
配置文件的内容
<properties resource="dbconfig.properties"></properties>
属性:
-
resource
: 引入类路径下的资源 -
url
: 引入磁盘路径/网络路径的资源
2.2 设置
设置Mybatis运行时行为
settings
:
-
mapUnderscoreToCamelCase
:是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。属性: true/false
2.3 别名处理器
别名处理器
typeAliases
: 为 java类型起别名
-
为每个类起别名:
<typeAlias type="类型" alias= "完整别名">
属性:-
type : 指定要起别名的类型全类名,默认别名就是类名小写 user
-
alias: 自定义别名
-
-
批量起别名
<package name="包全路径"/>
为某个包下所有类批量起别名 属性:-
name: 指定当前包下的所有后代包每个类都起一个默认别名(类名小写)别名不区分大小写
-
批量起别名情况下出现别名冲突: 在类中设置注解
@Alias("...")
为类型指定新的别名
-
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
object | Object |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
2.4 类型处理器
类型处理器
<typeHandlers>
:
2.5 环境处理器
环境处理器
<environments default: "id">
根据 enviroment 的 id 快速切换环境
id : 标识不同的环境 , 可以在 environments default标签中设置 不同的id , 快速切换
2.5.1 environment
<environment>
: 配置一个具体的环境信息 必须有 以下两个标签:
-
事务管理器
<transactionMangager type = "">
:type: 表示事务管理器类型 【JDBC事务控制方式 | Managed(服务器容器方式)】两种
-
JDBC(JdbcTransactionFactory)
jdbc事务控制方式 -
Managed(ManagedTransactionFactory)
服务器容器方式 -
自定义事务管理器 : 实现 接口 TransactionFactory
-
-
数据源类型
<dataSource type=" ">
: type : 表示数据源-
Unpooled(UnpooledDataSourceFactory)
: 不使用连接池 -
pooled(pooledDataSourceFactory)
: 使用连接池 -
jndi(JndiDataSourceFactory)
:Jndi方式 -
自定义数据源:实现接口 DataSourceFactory
-
<environments default="oracle_development"> <!-- 切换到oracle开发环境 -->
<environment id="mysql_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>
<!--oracle开发环境-->
<environment id="oracle_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>
2.6 数据库厂商
配置数据库厂商
<databaseIdProvider type = "DB_vendor">
type: 表示数据库厂商🔴需要在 xxxMapper.xml 的 select 等 sql标签中 设置
databaseId = " "
<select id="getUser" resultType="user" databaseId="mysql"> select * from jdbc_learn.user where id = #{id} </select>
🚀 如何有两个注入的select 标签 , 一个带有 databaseId 一个没有databaseID , 则没有DatabaseId的select标签将会被舍弃
-
得到数据厂商的标识:
type = "DB_vendor"
: VendorDatabaseIdProvider mybatis根据数据库厂商执行不同的SQL【驱动自带】 -
设置数据库厂商
别名
:<property name = "MySQL" value = "mysql">
-
【需要在Mapper.xml中设置 databaseId = "..."】
-
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
</databaseIdProvider>
2.7 Mappers标签
作用:将 sql映射 注册到 全局配置中
-
引用类路径下的映射文件:
resource = "xxx.xml"
-
引用磁盘/网路路径下的映射文件:
url = "xxx.xml"
-
引用接口 :
class = ""
-
👺 注意事项1: 接口文件 与 映射.xml 文件 同名
-
👹 注意事项2: 接口文件与映射文件 在同一个包下
-
-
基于
注解
注册sql映射xxxMapper 文件
🔴 重要,复杂的DAO接口 ===> SQL映射文件
🔵 不重要,简单的DAO接口 ===> 注解方式
-
批量注册:
<package name = "接口的报名">
-
作用: 将同个包下的 所有的 同名的 xml 文件和接口sql映射 注册到Mybatis中
-
👹注意事项:接口文件与映射文件 在同一个包下
-
<!-- 每个Mapper.xml都需要在Mybatis核心配置文件中注册 -->
<mappers>
<mapper resource="com/lzw/dao/UserMapper.xml"/>
<mapper url = "....UserMapper.xml"/>
<mapper class = "接口路径"/>
<package name="com.lzw.dao"/>
</mappers>
/* *
* 基于注解注册 Mapper sql映射文件
* @Author zhongweiLee
* @Description
* @Date 20:47 2022/4/13
* @ParamsType
* @ParamsName
* @return
**/
public interface UserMapperAnnotation {
@Select("select * from user where id = #{id}")
public User getUserById(Integer id);
}
/*-----------------------------------------------------------------------*/
@Test
/* *
* 使用注解注册sql映射文件 测试
* @Author zhongweiLee
* @Description
* @Date 14:40 2022/4/13
* @ParamsType []
* @ParamsName []
* @return void
**/
public void test2(){
/* ***
*
* 1. 获取sqlSessionFactory对象
* 2. 获取sqlSession
* 3. sqlSession.getMapper(接口.class) 获取接口实现类对象
* 会为接口自动创建一个代理对象,代理对象执行增删改查操作
* 4. 调用接口方法 mapper.getUser()方法
*/
try (SqlSession sqlSession = MybatisUtils.getSqlSession()) {
// UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//使用注解注册sql映射文件 测试
UserMapperAnnotation mapper = sqlSession.getMapper(UserMapperAnnotation.class);
System.out.println(mapper.getClass());//获取当前mapper所属类
User user = mapper.getUserById(1);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}
}
本文来自博客园,作者:{zhongweiLeex},转载请注明原文链接:{https://www.cnblogs.com/lzw6/}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY