首先 数据库量表之间字段关系(没有主外键)

studentmajor表的id字段对应student表里major字段
两个实体类
package com.model;
import java.util.Date;
public class Student {
private Integer sno;
private String sname;
private String ssex;
private Integer sclass;
private StudentMajor studentmajor;
public Student() {
super();
}
public Student(Integer sno, String sname, String ssex, Integer sclass, StudentMajor studentmajor) {
super();
this.sno = sno;
this.sname = sname;
this.ssex = ssex;
this.sclass = sclass;
this.studentmajor = studentmajor;
}
public StudentMajor getStudentmajor() {
return studentmajor;
}
public void setStudentmajor(StudentMajor studentmajor) {
this.studentmajor = studentmajor;
}
public Integer getSno() {
return sno;
}
public void setSno(Integer sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSsex() {
return ssex;
}
public void setSsex(String ssex) {
this.ssex = ssex;
}
@Override
public String toString() {
return "Student [sno=" + sno + ", sname=" + sname + ", ssex=" + ssex + ", sclass=" + sclass + ", studentmajor="
+ studentmajor + "]";
}
public Integer getSclass() {
return sclass;
}
public void setSclass(Integer sclass) {
this.sclass = sclass;
}
}
package com.model;
import java.util.List;
public class StudentMajor {
private Integer id;
private String mcode;
private String mname;
private List<Student> students;
public StudentMajor() {
super();
}
public StudentMajor(Integer id, String mcode, String mname, List<Student> students) {
super();
this.id = id;
this.mcode = mcode;
this.mname = mname;
this.students = students;
}
@Override
public String toString() {
return "StudentMajor [id=" + id + ", mcode=" + mcode + ", mname=" + mname + ", students=" + students + "]";
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getMcode() {
return mcode;
}
public void setMcode(String mcode) {
this.mcode = mcode;
}
public String getMname() {
return mname;
}
public void setMname(String mname) {
this.mname = mname;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
}
定义两个接口
package com.dao;
import java.util.List;
import java.util.Map;
import com.model.Student;
public interface StudentMapper {
/**
* 全表查询
*/
public List<Student> selectall();
/**
* 根据专业查人员,给一对多用
*/
public List<Student> selectz(Integer major);
}
package com.dao;
import java.util.List;
import com.model.StudentMajor;
public interface StudentMajorMapper {
/**
* 全表查询
* @return
*/
public List<StudentMajor> selectAll();
/**
* 根据主键查数据,给多对一用
* @param id
* @return
*/
public StudentMajor select(Integer id);
}
定义两个实体类的映射方法
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.StudentMapper">
<!-- 多对一查询 -->
<resultMap type="Student" id="slist">
<!-- 跟一对一一样用association标签,实体类定义的成员,要跟数据库字段名对应上 -->
<association property="studentmajor" column="major"
select="com.dao.StudentMajorMapper.select"/> <!-- 用接口里定义的方法,根据student表中的major字段查出对应数据 -->
</resultMap>
<!-- 查全部 -->
<select id="selectall" resultMap="slist" >
select * from student
</select>
<!-- 根据专业查人员 -->
<select id="selectz" parameterType="Integer" resultType="student">
select * from student s where s.major=#{major}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.StudentMajorMapper">
<!-- 一对多查询关联 -->
<resultMap type="StudentMajor" id="slist">
<!-- 实体类属性对应数据库的主键字段,不然主键会查不到 -->
<id property="id" column="id"/>
<!-- 用collection标签 ,也是实体类属性要对应数据库字段-->
<collection property="students" column="id"
select="com.dao.StudentMapper.selectz">
</collection>
</resultMap>
<!-- 全表查询 -->
<select id="selectAll" resultMap="slist">
select * from studentmajor
</select>
<!-- 根据主键查 -->
<select id="select" parameterType="Integer" resultType="StudentMajor">
select * from studentmajor where id=#{id}
</select>
</mapper>
JUnit测试
package com.util;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.dao.StudentMajorMapper;
import com.dao.StudentMapper;
import com.model.Student;
import com.model.StudentMajor;
public class JJJtest {
private SqlSession ss;
private StudentMapper sm;
private StudentMajorMapper smm;
@Before
public void setUp() throws Exception {
ss=SqlSessionUtil.getSqlSession();
sm=ss.getMapper(StudentMapper.class);
smm=ss.getMapper(StudentMajorMapper.class);
}
@After
public void tearDown() throws Exception {
ss.commit();
ss.close();
}
//一对多查询
public void test() {
List<StudentMajor> list=smm.selectAll();
for(StudentMajor a:list){
System.out.println(a);
}
}
//根据专业查人员,给一对多用
public void selectz(){
List<Student> l=sm.selectz(3);
for(Student a:l){
System.out.println(a);
}
}
//多对一查询
@Test
public void selectall() {
List<Student> st=sm.selectall();
for(Student tt:st){
System.out.println(tt);
}
}
//根据主键查询,给多对一用
public void select(){
StudentMajor a=smm.select(1);
System.out.println(a);
}
}
一对多查询结果
多对一查询结果
以上所述是小编给大家介绍的Mybatis 一对多和多对一关联查询问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# mybatis一对多
# mybatis多对一
# mybatis
# 关联查询
# 关于QueryWrapper
# 实现MybatisPlus多表关联查询方式
# Mybatis多表关联查询的实现(DEMO)
# mybatis-plus多表关联查询功能的实现
# mybatis如何使用注解实现一对多关联查询
# MyBatis实践之动态SQL及关联查询
# MyBatis 三表外关联查询的实现(用户、角色、权限)
# Mybatis关联查询之一对多和多对一XML配置详解
# Mybatis实现一对一、一对多关联查询的方法(示例详解)
# Mybatis-Plus多表关联查询的使用案例解析
# MyBatis的关联查询实现(一对一、一对多、多对多)
# 主键
# 实体类
# 查询结果
# 小编
# 在此
# 给大家
# 要对
# 要跟
# 所述
# 给我留言
# 感谢大家
# 量表
# 疑问请
# 有任何
# 字段名
# setSname
# getSname
# getSsex
# toString
# Override
相关文章:
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
定制建站如何定义?其核心优势是什么?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
智能起名网站制作软件有哪些,制作logo的软件?
淘宝制作网站有哪些,淘宝网官网主页?
网站制作员失业,怎样查看自己网站的注册者?
建站之星安装后如何配置SEO及设计样式?
北京网站制作的公司有哪些,北京白云观官方网站?
建站org新手必看:2024最新搭建流程与模板选择技巧
制作网站的软件免费下载,免费制作app哪个平台好?
如何通过VPS搭建网站快速盈利?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
如何快速辨别茅台真假?关键步骤解析
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
贸易公司网站制作流程,出口贸易网站设计怎么做?
用v-html解决Vue.js渲染中html标签不被解析的问题
威客平台建站流程解析:高效搭建教程与设计优化方案
临沂网站制作公司有哪些,临沂第四中学官网?
创业网站制作流程,创业网站可靠吗?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何生成腾讯云建站专用兑换码?
如何快速建站并高效导出源代码?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
三星网站视频制作教程下载,三星w23网页如何全屏?
,购物网站怎么盈利呢?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
微信h5制作网站有哪些,免费微信H5页面制作工具?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何在云指建站中生成FTP站点?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
如何高效完成自助建站业务培训?
建站之星如何防范黑客攻击与数据泄露?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
如何快速搭建高效WAP手机网站吸引移动用户?
网站制作说明怎么写,简述网页设计的流程并说明原因?
javascript基本数据类型及类型检测常用方法小结
建站主机服务器选购指南:轻量应用与VPS配置解析
ui设计制作网站有哪些,手机UI设计网址吗?
高端建站三要素:定制模板、企业官网与响应式设计优化
c# 在高并发下使用反射发射(Reflection.Emit)的性能
如何零成本快速生成个人自助网站?
如何安全更换建站之星模板并保留数据?
建站主机是什么?如何选择适合的建站主机?
已有域名和空间如何快速搭建网站?
建站之星下载版如何获取与安装?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何快速完成中国万网建站详细流程?
*请认真填写需求信息,我们会在24小时内与您取得联系。