MyBatis进阶
1、MyBatis核心配置文件SqlMapConfig.xml
SqlMapConfig.xml中配置的内容如下:
<!-- 配置别名 -->
<typeAliases></typeAliases>
<!-- 配置多数据库支持 -->
<databaseIdProvider type="">
<property name="" value=""/>
</databaseIdProvider>
<!-- 配置全局变量 -->
<settings>
<setting name="" value=""/>
</settings>
<!-- 配置映射 -->
<mappers>
<mapper/>
<package name=""/>
</mappers>
<!-- 对象工厂 -->
<objectFactory type="">
<property name="" value=""/>
</objectFactory>
<!-- 配置插件 -->
<plugins>
<plugin interceptor="">
<property name=""value=""/>
</plugin>
</plugins>
<!-- 配置类型转换器 -->
<typeHandlers>
<package name=""/>
<typeHandler handler=""/><
</typeHandlers>
<!-- 配置属性文件,如:jdbc.properties -->
<properties>
<property name="" value=""/>
</properties>
<!-- 配置数据库环境相关 -->
<environments default="">
<environment id="">
<!-- 数据源连接信息 -->
<dataSource type="">
<property name="" value=""/>
</dataSource>
<!-- 配置事务处理 -->
<transactionManager type="">
<property name="" value=""/>
</transactionManager>
</environment>
</environments>
标签内容较多,红色标注表示常用,需要重点掌握
<properties>:属性文件配置
Settings:全局配置参数
typeAliases:别名配置
typeHandlers:配置类型转换器
objectFactory:对象工厂
plugins:插件配置
environments:环境变量配置集合
environment:具体环境变量配置项
transactionManager:事务处理配置
dataSource:数据源配置
mappers:mapper映射配置
databaseIdProvider:多数据库配置
4.2 properties属性文件配置:
新建properties
driver=com.mysql.jdbc.Driver
username=root
password=1234
url=jdbc:mysql://localhost:3306/mybatis01?characterEncoding=utf-8
修改SqlMapConfig.xml文件
把value值替换成表达式获取
<!-- 数据库相关配置 -->
<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>
1.3 类型别名
类型别名的作用是为缩短类型书写简介,避免代码冗余;
类型别名分为自支持类型和自定义类型
已经为许多常见的Java 类型内建了相应的类型别名。它们都是大小写不敏感的,需要注意的是由基本类型名称重复导致的特殊处理。
比较常用的别名(大小写不敏感):string、int、byte、boolean、hashmap、arraylist等。
别名 | 映射的类型 |
_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 |
自定义类型别名:
配置别名
<typeAliases>
<!-- 为单个pojo设置别名 -->
<typeAlias type="com.itcodeschool.domain.User" alias="User"/>
<!-- 批量设置别名,指定路径到包,会自定将包下所有类设置别名,别名默认类名(类名不去人大小写) -->
<typeAlias type="com.itcodeschool.domain"/>
</typeAliases>
配置别名以后,可以将resultType的com.itcodeschool.domain.User简写为User即可
<!-- id:设置唯一值,resultType 配置返回值类型为User-->
<select id="findUser" resultType="com.itcodeschool.domain.User">
<!-- 编写 SQL 语句 -->
SELECT * FROM User
</select>
mappers(映射器)
Mapper配置的几种方法:
<mapper resource=" " />
使用相对于类路径的资源
如:<mapperresource="sqlmap/User.xml" />
<mapper class=" " />
使用mapper接口类路径
如:<mapperclass="com.itcodeschool.mapper.UserMapper"/>
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。
<package name=""/>
注册指定包下的所有mapper接口
如:<package name="com.itcodeschool.mapper"/>
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。
SqlSessionFactoryBuilder
SqlSessionFactoryBuilder用于创建SqlsessionFactory,SqlsessionFactory一旦创建完成就不需要SqlSessionFactoryBuilder了,因为SqlSession是通过SqlSessionFactory生产,所以可以将SqlSessionFactoryBuilder当成一个工具类使用,最佳使用范围是方法范围即方法体内局部变量。
SqlSessionFactory
SqlSessionFactory是一个接口,接口中定义了openSession的不同重载方法,SqlSessionFactory的最佳使用范围是整个应用运行期间,一旦创建后可以重复使用,通常以单例模式管理SqlSessionFactory。
SqlSession
SqlSession中封装了对数据库的操作,如:查询、插入、更新、删除等。
SqlSession是一个面向用户的接口,sqlSession中定义了数据库操作方法。
每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能共享使用,它也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。
打开一个SqlSession;使用完毕就要关闭它。通常把这个关闭操作放到 finally 块中以确保每次都能执行关闭。