mybatis关系表
<select id="selectSingleQuestion" resultType="remarkPaper">
select
FrontTitle as fontTitle,BackTitle as backTitle, Answer as answer
from fillblankproblem
where ID
<foreach item="item" index="index" collection="list" open= " in (" separator="," close=")">
#{item.titleId}
</foreach>
</select>
多对一
package com.abc.beans; public class Country {
private Integer cid;
private String cname; public Country() {
super();
// TODO Auto-generated constructor stub
} public Country(String cname) {
super();
this.cname = cname;
} public Integer getCid() {
return cid;
} public void setCid(Integer cid) {
this.cid = cid;
} public String getCname() {
return cname;
} public void setCname(String cname) {
this.cname = cname;
} @Override
public String toString() {
return "Country [cid=" + cid + ", cname=" + cname + "]";
} }
package com.abc.beans;
public class Minister {
private Integer mid;
private String mname;
// 关联属性
private Country country;
public Minister() {
super();
// TODO Auto-generated constructor stub
}
public Minister(String mname) {
super();
this.mname = mname;
}
public Integer getMid() {
return mid;
}
public void setMid(Integer mid) {
this.mid = mid;
}
public String getMname() {
return mname;
}
public void setMname(String mname) {
this.mname = mname;
}
public Country getCountry() {
return country;
}
public void setCountry(Country country) {
this.country = country;
}
@Override
public String toString() {
return "Minister [mid=" + mid + ", mname=" + mname + ", country=" + country + "]";
}
}
<!-- 多表连接查询 -->
<!-- 定义结果映射关系 -->
<resultMap type="Minister" id="ministerMap">
<id column="mid" property="mid" />
<result column="mname" property="mname" />
<association property="country" javaType="Country">
<id column="cid" property="cid" />
<result column="cname" property="cname" />
</association>
</resultMap>
<select id="selectMinisterById" resultMap="ministerMap">
select mid,mname,cid,cname
from minister, country
where countryId=cid and mid=#{xxx}
</select>
多对一(2)
package com.abc.beans;
public class Country {
private Integer cid;
private String cname;
public Country() {
super();
// TODO Auto-generated constructor stub
}
public Country(String cname) {
super();
this.cname = cname;
}
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
@Override
public String toString() {
return "Country [cid=" + cid + ", cname=" + cname + "]";
}
}
package com.abc.beans;
public class Minister {
private Integer mid;
private String mname;
// 关联属性
private Country country;
public Minister() {
super();
// TODO Auto-generated constructor stub
}
public Minister(String mname) {
super();
this.mname = mname;
}
public Integer getMid() {
return mid;
}
public void setMid(Integer mid) {
this.mid = mid;
}
public String getMname() {
return mname;
}
public void setMname(String mname) {
this.mname = mname;
}
public Country getCountry() {
return country;
}
public void setCountry(Country country) {
this.country = country;
}
@Override
public String toString() {
return "Minister [mid=" + mid + ", mname=" + mname + ", country=" + country + "]";
}
}
<!-- 多表单独查询 -->
<select id="selectCountryByMinister" resultType="Country">
select cid,cname from country where cid=#{jjj}
</select>
<!-- 定义结果映射关系 -->
<resultMap type="Minister" id="ministerMap">
<id column="mid" property="mid" />
<result column="mname" property="mname" />
<association property="country"
javaType="Country"
select="selectCountryByMinister"
column="countryId"/>
</resultMap>
<select id="selectMinisterById" resultMap="ministerMap">
select mid,mname,countryId from minister where mid=#{xxx}
</select>
使用mybatis进行foreach遍历
在SQL开发过程中,我们会经常使用到in进行搜索,Mybatis中提供了foreach功能,它允许你指定一个集合,然后对集合中的数据进行迭代赋值,如何使用这一功能,很简单,主要是细节要注意。我们先看下foreach的语法
<foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach>
foreach元素的属性包含 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名,非限定词
index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,这边使用"(",则会在sql进行拼接加上"(", 如where id in (
separator表示在每次进行迭代之间以什么符号作为分隔 符,如如where id in ( 1,
close表示以什么结束,这边使用"(",则会在list遍历后进行拼接加上")",如where id in (1,2)
collection表示要遍历的集合
针对collection参数,我们需要考虑入参,而不能随便写,如果如参数List<String>则这样设定
如果参数的类型是List集合, 则在使用时,collection属性要必须指定为 list <select id="findByIds" resultMap="User"> Select id ,name from t_a where id in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> </select>
以上的查询,最终会转换成这样的sql,
select id ,name from t_a where id in (1,2)
但是实际开发中,我们不能局限于list集合,也有可能是数组,数组的方式只要做一下修改即可
<foreach item="item" index="index" collection="array" ....
in最好写在open里面,写在外面有些时候有问题。
mybatis关系表的更多相关文章
- MyBatis 关系映射XML配置
关系映射 在我看来这些实体类就没啥太大关联关系,不就是一个sql语句解决的问题,直接多表查询就完事,程序将它设置关联就好 xml里面配置也是配置了sql语句,下面给出几个关系的小毛驴(xml) 一对多 ...
- MyBatis 多表查询
1.多表设计 多表查询 a.多表设计 (1)一对一 在任意一方设计外键保存另一张表的主键,维系表和表的关系 (2)一对多 在多的一方设计外键保存一的一方的主键,维系表和表的关系 (3)多对多 设计一张 ...
- Mybatis多表操作
一:引言 在学习完前面的mybatis基本语法后,大家都有个认知,这个Mybatis太强大了,比之前使用JDBC写方便多了,但是你们当初在使用原生JDBC写SQL查询的时候有没有遇到过多表查询呢?肯定 ...
- 【MyBatis】MyBatis 多表操作
MyBatis 多表操作 文章源码 一对一查询 需求:查询所有账户信息,关联查询下单用户信息. 注意:因为一个账户信息只能供某个用户使用,所以从查询账户信息出发关联查询用户信息为一对一查询.如果从用户 ...
- 三、mybatis多表关联查询和分布查询
前言 mybatis多表关联查询和懒查询,这篇文章通过一对一和一对多的实例来展示多表查询.不过需要掌握数据输出的这方面的知识.之前整理过了mybatis入门案例和mybatis数据输出,多表查询是在前 ...
- mysql 关系表 分组读取的方法
关系表 是一个一对多的表 我们用的时候往往希望得到 array( a=>array(1,2,3,4....), b=>array(3,4,5,6,7...) ) 这样的数组 所以我们可以使 ...
- EF架构~关系表插入应该写在事务里,但不应该是分布式事务
回到目录 这个标题很有意思,关系表插入,就是说主表和外表键在插入时,可能会有同步插的情况,如在建立主表时,扩展表需要同步完成数据的初始化工作,而对于多表插入时,我们为了保证数据的一致性会针它写在事务中 ...
- EF架构~关于多对多关系表无法更新与插入的问题
回到目录 在EF里,我们设计模型时,会设计到多对多关系,在EF里会把这种关系会转成两个一对多的关系表,这是比较友好的,因为多对多来说,对于业务本身没什么意思,所以隐藏了,没什么坏处,但对于这个隐藏来说 ...
- 基于.net mvc的校友录(七、文件上传以及多对多关系表的LINQ查询实现)
图片的上传与调用 图片的上传就是文件的上传,在前台使用的是type="file"的input,但是,要将表单声明为multipart/form-data模式,方法是在BeginFo ...
随机推荐
- SQL 练习30
查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况) SELECT Student.*,CId,score from Student LEFT JOIN SC ON Student.SId = ...
- Java实现WebSocket服务
一.使用Tomcat提供的WebSocket库 Java可以使用Tomcat提供的WebSocket库接口实现WebSocket服务,代码编写也非常的简单.现在的H5联网游戏基本上都是使用WebSo ...
- 项目报错:Invalid bound statement (not found):
出现这种错误有好多种情况,常见的错误有以下这些: 1.检查xml文件所在package名称是否和Mapper interface所在的包名 <mapper namespace="com ...
- Qt Model/View(模型/视图)结构(无师自通)
Model/View(模型/视图)结构是 Qt 中用界面组件显示与编辑数据的一种结构,视图(View)是显示和编辑数据的界面组件,模型(Model)是视图与原始数据之间的接口. GUI 应用程序的一个 ...
- Commons-Collections(二)之set
MultiSet set我们都知道,它是无序的,并且是不允许出现重复元素的.但有些场景我们不需要顺序,但是我们需要知道指定key出现的个数(比如每样产品ID对应的剩余数量这种统计信息),那么用Mult ...
- 《深入理解java虚拟机》第3版笔记3
第3章 垃圾收集器与内存分配策略 可达性分析算法 在Java技术体系里面,固定可作为GC Roots的对象包括以下几种: 在虚拟机栈(栈帧中的本地变量表)中引用的对象,譬如各个线程被调用的方法堆栈中使 ...
- CentOS7部署SSH服务
1 ssh服务部署 输入命令 yum list | grep ssh 查看可安装的软件包,选择openssh-service.x86_64 输入下面命令进行安装openssh服务 yum instal ...
- Docker容器 关于镜像构建的安全问题
写在前面 确保容器中服务与应用安全是容器化演进的关键点.容器安全涉及到应用开发与维护的整个生命周期,本文主要从镜像构建的视角来看docker容器的一些安全问题及应对措施. 一.权限管理 1.避免以容器 ...
- Spring Boot 入门系列(二十四)多环境配置,3分钟搞定!
之前讲过Spring Boot 的系统配置和自定义配置,实现了按照实际项目的要求配置系统的相关熟悉.但是,在实际项目开发过程中,需要面对不同的环境,例如:开发环境,测试环境,生产环境.各个环境的数据库 ...
- java设计模式—单例模式(包含单例的破坏)
什么是单例模式? 保证一个了类仅有一个实例,并提供一个访问它的全局访问点. 单例模式的应用场景? 网站的计数器,一般也是采用单例模式实现,否则难以同步: Web应用的配置对象的读取,一般也应用单例模式 ...