Mybatis的xml配置开发详解

本文详细解析了MyBatis框架中XML配置文件的使用方法,包括SQL映射、主配置文件设置及动态SQL的实现。通过具体代码示例,介绍了如何使用<select>、<update>、<insert>、<delete>标签执行数据库操作,以及如何利用<if>、<where>、<foreach>标签实现动态SQL,提高查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XML配置开发

sql映射(sql mapper) 可以把数据库表中的一行数据 映射为 一个Java对象
在当前文件中,可以使用特定的标签,表示数据库的特定操作

  • :表示执行查询 放的是select语句
  • :表示更新数据库的操作 放的是update语句
  • :表示插入 放的是insert语句
  • :表示删除,放的是delete语句
    xml配置开的主配置文件: 注解开发就是 class=“xxx”
 <mappers>
     <mapper resource="cn/com/dao/IUserDao.xml"/>
 </mappers>
 <select id="findAll" resultType="cn.Ycy.com.mybatis.dao.userDao">
		select * from user;
</select>
  •    id:是要执行的sql语法的唯一标识, mybatis会使用这个id的值来找到要执行的sql语句,可以自定义,id的值类似实现接口中的方法名
  •    resultType:表示结果类型的,是sql语句执行后的得到的ResultSet,遍历这个ResultSet得到的Java对象类型。就是保存这个对象的全限定名称 ,对应着一般实现implement的执行sql后的返回类型resultType
    代码展示:
	//在接口中
	List<user>selectAll4(Integer min, Integer max);
	//在mapper文件:
	<select id="selectAll4" resultType="cn.com.Ycy.mybatis.domain.user">
		select * from user where id between #{0} and #{1};
	</select>

	//在测试类中:
		@Test
		public  void testSelectAll4(){
			SqlSession sqlSession = mybatisUtils.getSqlSession();
			userDao user = sqlSession.getMapper(userDao.class);
			List<user> userList = user.selectAll2(50,100);
			for(user users: userList){
				System.out.println(users);
			}
		sqlSession.close();
	}
xml配置开发的动态SQL

    定义:sql的内容是变化的,可以根据条件获取到不同的sql语句,主要是where部分发生变化。
动态sql的实现:使用的是mybatis提供的标签 < if > < where > < foreach >

  • < if >是判断条件的
      语法: < if test=“判断Java对象的属性值”>
                  部分sql语句
               < /if>
    代码演示:
接口中:
//动态sql if的使用
List<user>selectIf(user user);
mapper中:
<select id="selectIf" resultType="cn.com.Ycy.mybatis.domain.user">
	select * from user
	where
	<if test="username !=null and username !=''">
		username=#{username}
	</if>
	<if test=" id > 10">
		or id > #{id}
	</if>
</select>

测试类中:
	@Test
	public void testIf(){
	userDao users = mybatisUtils.getSqlSession().getMapper(userDao.class);
	user user1 = new user();
	user1.setUsername("王武");
	user1.setId(11);
	List<user> u = users.selectIf(user1);
	for(user user: u){
		System.out.println(user);
	}
}

代码分析:
当我们的第一个if不符合要求时,sql语句就是
select * from user where or id > 11;就会出现错误
解决方法:

解决方法:
	<select id="selectIf" resultType="cn.com.Ycy.mybatis.domain.user">
		select * from user
		where 1 > 0
		<if test="username !=null and username !=''">
			and username=#{username}
		</if>
		<if test=" id > 10">
			or id > #{id}
		</if>
	</select>
加上恒成立的条件
  • < where > 用来包含多个 当多个if有一个成立,会自动增加一个where关键字并去掉 if中多余的 and or等
    代码如下:
接口中:
//where 的使用
List<user>selectWhere(user user);
mapper中:
<!--  where的使用  -->
<select id="selectWhere" resultType="cn.com.Ycy.mybatis.domain.user">
select * from user
	<where>
	<if test="username !=null and username != ''">
	username=#{username}
	</if>
	<if test="id > 20">
		or id > #{id}
	</if>
	</where>
</select>
测试类中:
//测试where
@Test
public void testWhere(){
userDao users = mybatisUtils.getSqlSession().getMapper(userDao.class);
user user1 = new user();
//        user1.setUsername("王武");
user1.setId(21);
List<user> u = users.selectWhere(user1);	
	for(user user: u){
		System.out.println(user);
	}

						}
  • < foreach > 循环java中的数组、List集合的,主要在sql的in语句中
    学生的id 是1000 1001 1002 的三个学生
    select * from user id in(1000,1001,1002);

         < foreach collection=“list” item=“mylist” open="(" close=")" separator=",">
            #{mylist}
         < /foreach >
collection:表示接口的方法参数的类型,如果是数组就是用array,如果是list集合就使用list
item:自定义的,表示数组和集合成员的变量
open:循环开始的字符
close:循环结束时的字符
separator:集合成员之间的分隔符

接口中:
//foreach 的用法1
List<user>selectForeach(List<Integer>list);
mapper中:
	<select id="selectForeach" resultType="cn.com.Ycy.mybatis.domain.user">
		select * from user where id in
		<foreach collection="list" item="mylist" open="(" close=")" separator=",">
			#{mylist}
		</foreach>
	</select>
测试类中:
//foreach的用法1的测试
@Test
public void testForeach1(){
userDao users = mybatisUtils.getSqlSession().getMapper(userDao.class);
List<Integer>list = new ArrayList<>();
list.add(29);
list.add(30);
list.add(31);
list.add(32);
List<user> u = users.selectForeach(list);
	for(user user: u){
		System.out.println(user);
	}
}
注解开发详解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值