目录
7.32 select/insert/update/delete元素
7
7.1 MyBatis的核心对象
7.11 SqlSessionFactory
主要作用:创建SqlSession。
SqlSessionFactory对象的实例可通过SqlSessionFactoryBuilder对象来构建。
而SqlSessionFactoryBuilder可以通过XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例。
实现代码:
// 1获得SqlSessionFactoryBuilder
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
/*
* 2通过ssfb调用builder()方法,方法里需要将🐖配置文件转换为inputstream后作为参数
* 2-1获得inputStream方式一:通过Resource InputStream
* inputStream=Resources.getResourceAsStream("SqlMapConfig.xml");
* 2-2获得inputStream方式二:通过当前测试类的getClassLoader()方法
*/
SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader().getResourceAsStream("SqlMapConfig2.xml"));//配置文件位置
// SqlSessionFactory ssf=ssfb.build(inputStream);
session = ssf.openSession();
应每个数据库对应一个SqlSessionFactory,在构建SqlSessionFactory实例时使用单例模式(因为SqlSessionFactory对象创建后整个应用执行期间都存在,多次建一个数据库资源容易被耗尽)。
7.12 SqlSession
主要作用:执行持久化操作。其对象包含所有操作数据库方法,可直接使用其实例来执行已映射的sql语句(因为底层封装了JDBC连接)。
SqlSession对象线程不安全(SqlSessionFactory对象线程安全)不能共享,所以使用范围为某一次的请求/方法中,不能在放在类中的静态/实例字段,或任何类型管理范围,使用后通常放在finally代码块中关闭。
7.2 配置文件的主要元素
7.22 properties元素
通常用于将内部元素的配置外在化,即通过外部的配置来动态地替换内部定义的属性。
配置数据库连接信息方式1:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<environments default="environment"><!--根元素,其指定默认环境的id-->
<environment id="environment"><!--子元素,可定义多个,id指定所定义环境的id值-->
<transactionManager type="JDBC" /><!--用于配置事务管理,type属性用于指定事务的管理方式(哪种事务管理器)-->
<dataSource type="POOLED"><!--配置数据源,type属性指定使用哪种数据源-->
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/netctoss?serverTimezone=UTC" />
<property name="username" value="root" />
<property name="password" value="1111" />
</dataSource>
</environment>
</environments>
<!-- 指定映射文件的位置 -->
<mappers>
<mapper resource="entity/EmpMapper2.xml" />
</mappers>
</configuration>
配置数据库连接信息方式2(推荐用2,配置更灵活,方便被多个配置文件使用,方便日后的维护和修改。):
# db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/netctoss?serverTimezone=UTC&useSSL=false
#jdbc:mysql://localhost:3306/netctoss?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
username=root
password=1111
initSize=2
maxActive=2
<util:properties id="db"
location="classpath:db.properties"></util:properties>
<!-- 数据库连接池 -->
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="#{db.driver}"></property>
<property name="url" value="#{db.url}"></property>
<property name="username" value="#{db.username}"></property>
<property name="password" value="#{db.password}"></property>
</bean>
7.23 settings元素
主要用于改变MyBatis运行时的行为,例如开启二级缓存,开启延迟加载等。
其内含常见配置:
<settings><!--value为默认值-->
<setting name="cacheEnabled" value="false"/><!--影响所有映射器中配置的缓存全局开关-->
<setting name="lazyLoadingEnabled" value="false"/><!--延迟加载的全局开关-->
<setting name="multipleResultSetsEnabled" value="true"/><!--是否允许单一语句返回多结果集(需要兼容驱动)-->
<setting name="useColumnLabel" value="true"/><!--使用列标签代替列明-->
<setting name="useGeneratedKeys" value="false"/><!--允许JDBC支持自动生成主键,需要驱动兼容-->
<setting name="defaultExecutorType" value="SIMPLE"/><!--配置默认的执行器(simple/reuse/batch)-->
<setting name="defaultStatementTimeout" value="25000"/><!--设置超时时间,决定驱动等待数据库相应的秒数,没有设置时,取的是驱动默认时间。(任何正整数)-->
</settings>
7.24 typeAliases元素
其内提供了相依的类型别名。
作用:为配置文件中的Java类型设置一个简短的别名(与.xml的配置相关)以减少全限定类名的冗余。
<typeAliases>
<typeAlias alias="user" type="po.User" />
</typeAliases>
<!--别名可代替其使用在MyBatis文件的任何位置-->
也可通过自动扫描包的形式自定义别名(适用于PoJo类多时),会将以PoJo类以首字母小写的非限定类名来做别名(只适用于没有注解的情况。否则别名为其注解的值):
<typeAliases>
<package name="po.User" />
</typeAliases>
<!--别名可代替其使用在MyBatis文件的任何位置-->
注:别名不区分大小写。
7.25 typeHandler元素
作用:将预处理语句传入的参数javaType(Java参数)转为jdbcType(JDBC类型),或类型反转。
可用于在配置文件中注册自定义的类型处理器。(两种使用方式:)
1注册一个类的类型处理器
<typeHandlers>
<typeHandler handler="全类名" />
</typeHandlers>
2注册一个包中所有的类型处理器
<typeHandlers>
<package name="包名" /><!-- 系统会自动扫描包下所有的文件 -->
</typeHandlers>
7.26 objectFactory元素
作用:实例化目标类,既可通过默认构造方法实例化,也可在参数映射存在的时候通过参数构造方法实例化。
7.27 plugins元素
作用:配置用户所开发的插件(myBatis允许已映射语句执行过程中的某一点进行拦截调用,其通过插件来实现)(慎重使用)。
7.28 environments元素
作用:对环境进行配置,可配置多种数据源,即配置多种数据库。如7.22图。
myBatis含两种管理器:
1 JDBC(直接使用了JDBC的提交和回滚设置,依赖于从数据源得到的连接来管理事务的作用域)。 2 MANAGED(不提交或回滚一个连接,让容器来管理事务的整个声明周期,默认关闭连接,可将closeConnection属性设为false来阻止这种默认行为)。
注意:在Spring+ MyBatis中不用配置事务管理器,其会用Spring自带的管理器实现事务管理。
在数据源的配置中MyBatis框架提供了三种数据源类型: 1 UPPOOLED:其中driver属性为JDBC驱动的Java类的完全限定名。 2 POOLED:其数据源避免了在创建新的连接实例时所需要的初始化和认证时间,使得并发Web应用可快速地响应请求。 3 JNDI 。
7.29 mappers元素
作用:指定MyBatis映射文件的位置。
引入映射文件方式:
<!--1 使用类路径引入: -->
<mappers>
<mapper resource="全类名" />
</mappers>
<!--2 使用包名引入:-->
<mappers>
<package name="全包名" />
</mappers> <!--3 使用接口类引入:-->
<mappers>
<mapper class="全接口名" />
</mappers> <!--4 使用本地文件引入:-->
<mappers>
<mapper url="全文件名" />
</mappers>
7.3 映射文件
7.31 主要元素
注:select标签返回结果集; insert/update/delete标签返回影响的条数;cache标签给定命名空间的缓存配置;cache-ref标签:其他命名空间缓存配置的引用;resultMap标签:描述如何从数据库结果集中加载对象。
7.32 select/insert/update/delete元素
注意区分属性:
parameterType | 表示传入sql语句的参数类的全限定名或别名,可选属性(其可通过TypeHandler推断出具体传入语句的参数)默认值unset(依赖于驱动)。 |
resultType | 表示sql语句中返回的类的全限定名或别名,集合类型返回的是集合可包含的类型并非集合本身。返回时可使用resultType或resultMap之一。 |
resultMap | 表示外部resultMap的命令引用,返回时可使用resultType或resultMap之一。 |
statementType | 设置MyBatis使用哪个JDBC的Statement工作。 |
resultSetType | 表示结果集类型,默认值unset(依赖于驱动)。 |
keyColumn(仅对insert/update有用) | 用于设置第几列是主键(当主键不是第一列时使用)。 |
7.32 sql元素
详课本118页。
7.33 resultMap元素
作用:其表示结果的映射集,用来定义映射规则,级联的更新以及定义类型转化器等。详课本119页。