mybatis foreach标签_MyBatis框架

10272c889cbe2d0f356ff9df53ab8787.png

MyBatis中核心配置文件还有这几个标签

1.<typeAliases>标签

  • 该标签是给java类型定义类的别名的,以便于我们以后方便的在配置文件中使用
  • 使用方式有两种,一种是你可以在<typeAliases>标签下的子标签<typeAliase type=“” alias=“”>中使用,它有两个属性,一个是type存放的是你的实体类,可以写时上实体类的全限定路径,alias中写你设定的别名。<typeAlias>中, 可以省略alias属性, 表示类别名为类名, 大小写不敏感。
  • 第二种是方便在要操作的表文件很多时直接在<typeAliases>标签中的<package>标签中直接在name属性上面写上包的路径即可。

fa662452f26f41402905a3f7d900039d.png

51795afeff9299b0183e339381b3eb48.png

2 . MyBatis中的事务管理

  • MyBatis中配置了事务管理器, type属性设置为JDBC. 表示MyBatis采用和原生JDBC相同的事务管理机制.
  • 在MyBatis执行的开始时, 将自动提交功能关闭了. 所以, 在执行DML操作时, 需要手动提交事务.也就是在我们进行事务操作时候要在完成时进行手动提交。

f6f8007c55509974d39ae901932d4c7c.png

当然我们也可以在在创建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
  • 这里面我们要注意:
  • xml文件名要和接口名一致
  • namespace属性必须为接口的全限定路径
  • id属性必须和接口对应的方法名一致

a5d224488db1e1523d438822d579754d.png

写好之后还要修改MyBatis的核心配置文件中扫描映射的方式

有两种:

a)扫描单个接口, 可以使用mapper标签的class属性

43ea2b3f6edc09bac69362de2b881a77.png

b)当扫描多个接口时, 为简化配置, 可以使用package标签, 表示扫描对应包下的所有接口.

e575f4ef2495d0817829d35471b61f6a.png

4.通过接口绑定解决多参数的传递

方式一:

a)接口中定义方法

5e797d2cfd6d072bc01f4c3f85a9cad1.png

b)映射文件中提供对应的标签. 此时, SQL语句中获取方式有两种, 通过#{index}或#{param+数字}的方式.

26843525405a5feab164b6c91631fe30.png

方式二:

a)接口中定义方法, 参数中使用@Param注解设定参数名用于在SQL语句中使用.

e3ad371b82560cbc098c2b2ced959931.png

b)映射文件中提供对应的标签. 此时, SQL语句中获取方式有两种, 通过#{参数名称}或#{param+数字}的方式.

911f89648666aa1cc211c284f02607a6.png

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

869a19f148b14a26b370f527b66264c0.png

a27b0ea9a79fb3c8196a79125a0e0361.png

2. 动态SQL_choose_when_otherwise与set

与switch case类似,当进行多个条件进行判断时可以使用它,而Set标签用于update语句中的set字句,当满足条件时将会自动添加set语句,去除set子句中的多余的逗号,当不满足条件时将不会生成set语句。

16d53c75b4158f8981d332971396aba5.png

set语句

33526c11435129d89cb6328f76a2568d.png

9b991fa1712d339c00ef093957aa7cbe.png

3. 动态SQL_trim_bind

Trim是在sql语句的前后添加或者删除某些内容,trim标签中prefix: 属性表示向sql语句前面添加内容,prefixOverrides: 从前sql语句后面删除内容 suffix: 表示向sql语句后面添加内容suffixOverrides: 从sql语句后面删除内容.

Bind标签可以加在sql语句中是对sql语句的再加工,bind的name属性是参数的名字,value属性是如何对参数进行修改,在进行模糊查询时可以使用

3e2492ba2a6e7db1eae245b655045305.png

96d5a7b5f8c5b87dddc4a61de86da4cb.png

34b82fcc6545a45ce6f869fc4b2776c2.png

4.<foreach>

在sql语句中遍历集合参数时侯使用,在sql语句含有in查询时使用。Foreach标签中,collection属性存放的时待遍历的集合open属性是设置开始符号,item属性设置迭代变量,separator属性是设置项目分隔符,close属性是设置结束符号

b65158a9716f8782066cc1d646bbf9b0.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值