MyBatis进阶
MyBatis核心配置文件小结:
核心配置文件中包含了MyBatis的核心设置和属性信息如数据库如数据库的连接、事务、连接池信息等。
<configuration>
<!--引入数据库连接的配置文件-->
<properties resource="jdbc.properties"/>
<!--起别名,可以指定实体类alias起别名,也可以直接指定包(默认类名为别名)-->
<typeAliases>
<typeAlias type="实体类全限定名" alias="student"/>
<!--<package name="包路径"/>-->
</typeAliases>
<!--environments配置数据库环境,环境可以有多个。default属性指定使用的是哪个-->
<environments default="mysql">
<!--environment配置数据库环境 id属性唯一标识-->
<environment id="mysql">
<!-- transactionManager事务管理。 type属性,采用JDBC默认的事务-->
<transactionManager type="JDBC"></transactionManager>
<!-- dataSource数据源信息 type属性 连接池-->
<dataSource type="POOLED">
<!-- property获取数据库连接的配置信息 -->
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- mappers引入映射配置文件 -->
<mappers>
<!-- mapper 引入指定的映射配置文件 resource属性指定映射配置文件的名称 -->
<mapper resource="映射文件全限定名"/>
</mappers>
</configuration>
-
:核心根标签。
-
:引入数据库连接信息配置文件标签。
-
:起别名标签。
-
:配置数据库环境标签。
-
:配置数据库信息标签。
-
:事务管理标签。
-
:数据源标签。
-
:数据库连接信息标签。
-
:引入映射配置文件标签。
MyBatis实现接口的动态代理
//接口
public interface UserMapper {
public abstract List<User> selectAll();
}
//映射配置文件
<mapper namespace="com.it.Testo1.mapper.UserMapper">
<sql id="select">select * from User</sql>
<select id="selectAll" resultType="user">
<include refid="select"/>
</select>
</mapper>
//核心配置文件中相关信息
<typeAliases>
//实体类定义别名
<package name="com.it.bean"/>
</typeAliases>
//导入实体类配置映射文件
<mappers>
<mapper resource="com/it/Testo1/xml/UserMapper.xml"/>
</mappers>
//测试类
public void selectAll() throws IOException {
InputStream inputStream=null;
SqlSessionFactory sqlSessionFactory=null;
//读取核心配置文件
inputStream = Resources.getResourceAsStream("MyBatisConfig.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//获取代理对象
StudentMapper mapper = sqlSession.getMapper(UserMapper.class);
//执行查询所有方法
List<User> users = mapper.selectAll();
for (User u : users) {
System.out.println(u);
}
}
动态代理开发模式分析:
- 动态代理对象如何生成:我们只需要编写一个接口,不写实现类,我们通过 getMapper() 方法最终获取到代理对象,然后执行功能,而这个代理对象正是 MyBatis 使用了 JDK 的动态代理技术,帮助我们生成了代理实现类对象。从而可以进行相关操作。
- 生成的代理对象方法如何执行:动态代理实现类对象在执行方法的时候最终调mapperMethod.execute() 方法,这个方法中通过 switch 语句根据操作类型来判断是新增、修改、删除、查询操作,最后一步回到了 MyBatis 最原生的 SqlSession 方式来执行增删改查。底层原理还是实现了JDBC的增删改查操作。
接口代理方式小结
-
接口代理方式可以让我们只编写接口即可,而实现类对象由 MyBatis 生成。
-
实现规则
- 映射配置文件中的名称空间必须和 Dao 层接口的全类名相同。
- 映射配置文件中的增删改查标签的 id 属性必须和 Dao 层接口的方法名相同。
- 映射配置文件中的增删改查标签的 parameterType 属性必须和 Dao 层接口方法的参数相同。
- 映射配置文件中的增删改查标签的 resultType 属性必须和 Dao 层接口方法的返回值相同。
- 获取动态代理对象 方法
SqlSession 功能类中的 getMapper() 方法。
MyBatis映射配置文件-动态SQL
多条件查询:
-
动态SQL标签
- :条件判断标签
- :循环遍历标签
- :条件标签,如果有动态条件,则使用该标签替代where关键字。
-
查询条件
满足test中条件判断则拼接if标签中查询条件
-
获取参数
- 属性
-
collection:参数容器类型,(list-集合,array-数组)。
-
open:开始的 SQL 语句。
-
close:结束的 SQL 语句。
-
item:参数变量名。
-
separator:分隔符。
SQL 片段抽取
-
我们可以将一些重复性的 SQL 语句进行抽取,以达到复用的效果。
-
:抽取 SQL 语句标签。
-
抽取的 SQL 语句
引用:
-
:引入 SQL 片段标签。
动态SQL小结
-
动态 SQL 指的就是 SQL 语句可以根据条件或者参数的不同进行动态的变化。
-
:条件标签。
-
:条件判断的标签。
-
:循环遍历的标签。
-
:抽取 SQL 片段的标签。
-
:引入 SQL 片段的标签。