Mybatis的动态sql和多表操作

Mybatis的动态sql和多表操作


一、动态sql

1.学习后小总结

  1. 学习过程中使用了resultMap,主要的作用是将查询到的结果映射到一个结果集当中,之后的多表操作中起到了很大的作用。
  2. 在SqlMapConfig文件中,properties标签可以配置外部连接池信息。使用外部文件后注意当前文件连接池value的写法
  3. 在SqlMapConfig文件中,typeAliases标签用于配置别名。typeAlias用于配置具体的类,package用于配置一个包,其包含的类就是他的类名。
  4. 这里还需要注意的是,在.xml文件里面的sql里面的变量名称需要和对应的类保持一致

2.动态语句的if标签和where标签

当我们处理sql语句的时候,有时候需要达到一种,例如:传入值就条件查询没有传值就普通查询的效果。这个时候就需要用到了if标签。如图:
在这里插入图片描述
在这里插入图片描述
这里当图二传入了UserName时,图一的if就会对UserName进行判断。若是不为空那么语句就增加后面的条件,若是为空则进行普通查询。此处需要注意的是UserName需要与前面的类保持一致。

3.动态语句的foreach标签

当我们在查询中,sql语句需要用到in这个功能的时候。例如:select * from user where id in (1, 2, 3, 4, 5); 就需要传入一个数组,然后在.xml文件中运用foreach便利集合进入标签。
在这里插入图片描述
在这里插入图片描述
上图可以看到,在定义集合后并赋值41,42后,将list集合传入了Ids中。注意此处需要在前面的User类中也定义一个ids的集合变量。private List<Integer> ids;之后,xml文件检测到ids不为空则会进行遍历。 在foreach标签中,collection填要遍历的集合,open填开始的部分,close填结束的部分,item填遍历的每个元素,separator填分隔符,中间的内容为:item的值

二、多表操作

1.学习后小总结

  1. 多表操作关系分为,一对一,多对一(也相当于一对一),一对多,多对多。
  2. 在sql语句中多表查询,were = 和left join on区别在于:前者只会显示满足条件的,后者会显示所有的查询,但是条件不满足的会显示为空。
  3. 实现多表主要是依靠xml中的,resultMap标签的映射。
    在这里插入图片描述

2.一对一或多对一

  1. 先在定义变量的类中,定义一个主表实体的对象引用。
  2. 在xml文件中利用result标签的association映射到结果集。
    在账户表中定义用户变量,此时加入一个用户一个账户
    利用result标签的association一对一映射到结果集
    在账户表中定义用户变量,此时加入一个用户一个账户。主语在xml文件中:的<association property="user" column="uid" javaType="user">参数,property是上面定义的user,column是两个表连接的依据,javaType是填写user对应的类。

2.一对多

  1. 现在主表定义从表的集合引用
  2. 在xml文件中定义resultmap的collection
  3. 假定关系是一个用户(user)对应多个账户(account)
  4. 此处我感觉一对多,mybatis是通过id将多条数据整合在一起的。

在这里插入图片描述
在这里插入图片描述

现在user类中定义集合accounts,然后定义resultmap,column对应数据库的列名,property对应类的变量名。 collection中,property对应类的变量名,ofType对应变量名的类。

2.多对多

1.假定是多个用户对应多个角色。那么就应该需要有三个表,user,role,和一个关系表:user_role。然后其他的和一对多差不多。
以下是文件目录,分别对角色和用户以一对多的关系进行分别查询。已满足多对多。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值