![10272c889cbe2d0f356ff9df53ab8787.png](https://i-blog.csdnimg.cn/blog_migrate/0926936d181d0940ab0c70a0d2bf4cd0.png)
MyBatis中核心配置文件还有这几个标签
1.<typeAliases>标签
- 该标签是给java类型定义类的别名的,以便于我们以后方便的在配置文件中使用
- 使用方式有两种,一种是你可以在<typeAliases>标签下的子标签<typeAliase type=“” alias=“”>中使用,它有两个属性,一个是type存放的是你的实体类,可以写时上实体类的全限定路径,alias中写你设定的别名。<typeAlias>中, 可以省略alias属性, 表示类别名为类名, 大小写不敏感。
- 第二种是方便在要操作的表文件很多时直接在<typeAliases>标签中的<package>标签中直接在name属性上面写上包的路径即可。
![fa662452f26f41402905a3f7d900039d.png](https://i-blog.csdnimg.cn/blog_migrate/512220129f8d7974892e2afc51c779a4.jpeg)
![51795afeff9299b0183e339381b3eb48.png](https://i-blog.csdnimg.cn/blog_migrate/e079357be3a5a8d6f127d5f6b776e495.jpeg)
2 . MyBatis中的事务管理
- MyBatis中配置了事务管理器, type属性设置为JDBC. 表示MyBatis采用和原生JDBC相同的事务管理机制.
- 在MyBatis执行的开始时, 将自动提交功能关闭了. 所以, 在执行DML操作时, 需要手动提交事务.也就是在我们进行事务操作时候要在完成时进行手动提交。
![f6f8007c55509974d39ae901932d4c7c.png](https://i-blog.csdnimg.cn/blog_migrate/dfd11b717dc66166b032ff2bbfea8c85.jpeg)
当然我们也可以在在创建session对象的时候,将自动提交事务给打开。我们可以写一个MyBatis的工具类。并在里面打开自动提交,当然不建议使用自动提交。
package com.bjsxt.Util;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
private static SqlSessionFactory factory;
static {
try {
InputStream is = Resources.getResourceAsStream("mybatis.xml");
factory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static SqlSession getConnection() {
SqlSession session = null;
if (factory != null) {
// 设置为true则为自动提交
// session = factory.openSession(true);
session = factory.openSession();
}
return session;
}
}
3.接口綁定
接口绑定就是将对应的mapper.xml映射文件与我们自己定义的接口绑定起来,得到接口类型的对象, 方便方法的调用。在MyBatis中, 提供了一套接口绑定方案. 程序员可以提供一个接口, 然后提供对应接口的一个mapper.xml文件. MyBatis会自动将接口和xml文件进行绑定。
实现方式:
![5bf073dc3eacbbd21d2ca0af21b7a47b.png](https://i-blog.csdnimg.cn/blog_migrate/b5a772fc43d2d57dc35c14a0a8f1db66.jpeg)
- 这里面我们要注意:
- xml文件名要和接口名一致
- namespace属性必须为接口的全限定路径
- id属性必须和接口对应的方法名一致
![a5d224488db1e1523d438822d579754d.png](https://i-blog.csdnimg.cn/blog_migrate/4da1313b20f7e8a355bb364ad335dfd9.jpeg)
写好之后还要修改MyBatis的核心配置文件中扫描映射的方式
有两种:
a)扫描单个接口, 可以使用mapper标签的class属性
![43ea2b3f6edc09bac69362de2b881a77.png](https://i-blog.csdnimg.cn/blog_migrate/3b016634e1b3f327fd7ea099db78e7b7.png)
b)当扫描多个接口时, 为简化配置, 可以使用package标签, 表示扫描对应包下的所有接口.
![e575f4ef2495d0817829d35471b61f6a.png](https://i-blog.csdnimg.cn/blog_migrate/56819ef91731e88ec276ee61deb552c7.png)
4.通过接口绑定解决多参数的传递
方式一:
a)接口中定义方法
![5e797d2cfd6d072bc01f4c3f85a9cad1.png](https://i-blog.csdnimg.cn/blog_migrate/60858081d8c03eea4d0b0e1bfe197308.png)
b)映射文件中提供对应的标签. 此时, SQL语句中获取方式有两种, 通过#{index}或#{param+数字}的方式.
![26843525405a5feab164b6c91631fe30.png](https://i-blog.csdnimg.cn/blog_migrate/8a828f73cf26615f07f0c9d06a5a0694.png)
方式二:
a)接口中定义方法, 参数中使用@Param注解设定参数名用于在SQL语句中使用.
![e3ad371b82560cbc098c2b2ced959931.png](https://i-blog.csdnimg.cn/blog_migrate/13b1b038848976604467bf260901abdd.png)
b)映射文件中提供对应的标签. 此时, SQL语句中获取方式有两种, 通过#{参数名称}或#{param+数字}的方式.
![911f89648666aa1cc211c284f02607a6.png](https://i-blog.csdnimg.cn/blog_migrate/209cdb895fc4d760fbaf08c527550f35.jpeg)
5.动态Sql语句
(1) 什么是动态SQL? 有什么作用?
根据条件的不同Sql语句也会随之发生改变,就叫做动态SQL可以根据传入的参数不同而执行不同的SQL语句。
(2) 动态SQL常用的标签有哪些?
<if> 、<where>、<choose><when><otherwise>、<set>、<trim>、<bind>、<foreach>
1. 动态SQL_if_where:
If标签表示进行条件判断,if标签的test标签用于指定条件判断,在使用时为了保存拼接的条件语句正确,所以要在sql语句后加上where 1=1 或者与where语句一起使用。where标签是用于管理where语句,如果没有条件,则不会生成where语句,如果有条件便会自动生成where语句,如果第一个条件中有and则去除它。
![9aafc74b28d153866b42cc14e2920010.png](https://i-blog.csdnimg.cn/blog_migrate/01affa2b9750c6962e5eda60602352a8.jpeg)
![869a19f148b14a26b370f527b66264c0.png](https://i-blog.csdnimg.cn/blog_migrate/b25c768d678607b9a5c12d14cfb761c8.jpeg)
![a27b0ea9a79fb3c8196a79125a0e0361.png](https://i-blog.csdnimg.cn/blog_migrate/3bd013d555f55383394cb72aa70d5df3.jpeg)
2. 动态SQL_choose_when_otherwise与set
与switch case类似,当进行多个条件进行判断时可以使用它,而Set标签用于update语句中的set字句,当满足条件时将会自动添加set语句,去除set子句中的多余的逗号,当不满足条件时将不会生成set语句。
![16d53c75b4158f8981d332971396aba5.png](https://i-blog.csdnimg.cn/blog_migrate/deb1737c3cc3b60826e67becb648d817.jpeg)
set语句
![33526c11435129d89cb6328f76a2568d.png](https://i-blog.csdnimg.cn/blog_migrate/4414064e2ceb7f9850135f587f69a1ba.jpeg)
![9b991fa1712d339c00ef093957aa7cbe.png](https://i-blog.csdnimg.cn/blog_migrate/6258017467978aafbda99da9059c44d1.jpeg)
3. 动态SQL_trim_bind
Trim是在sql语句的前后添加或者删除某些内容,trim标签中prefix: 属性表示向sql语句前面添加内容,prefixOverrides: 从前sql语句后面删除内容 suffix: 表示向sql语句后面添加内容suffixOverrides: 从sql语句后面删除内容.
Bind标签可以加在sql语句中是对sql语句的再加工,bind的name属性是参数的名字,value属性是如何对参数进行修改,在进行模糊查询时可以使用
![3e2492ba2a6e7db1eae245b655045305.png](https://i-blog.csdnimg.cn/blog_migrate/91b838d0b775d2011864c74382ed1844.jpeg)
![96d5a7b5f8c5b87dddc4a61de86da4cb.png](https://i-blog.csdnimg.cn/blog_migrate/7a4ae6d6cf3f3840d3bac65c3543bbb6.jpeg)
![34b82fcc6545a45ce6f869fc4b2776c2.png](https://i-blog.csdnimg.cn/blog_migrate/84c7b61f2daab6d2996bb9a5496b579b.png)
4.<foreach>
在sql语句中遍历集合参数时侯使用,在sql语句含有in查询时使用。Foreach标签中,collection属性存放的时待遍历的集合open属性是设置开始符号,item属性设置迭代变量,separator属性是设置项目分隔符,close属性是设置结束符号
![b65158a9716f8782066cc1d646bbf9b0.png](https://i-blog.csdnimg.cn/blog_migrate/f1cc882a5c0ba5e61c0088eda203fae8.jpeg)