一对多和多对一其实很好理解。一对多,一个班级对应多个学生。多对一,多个学生在同一个班级
首先数据库student和class
CREATE TABLE class(
cid int primary key auto_increment,
cname VARCHAR(20)
)
INSERT into class VALUES (null,'一班');
INSERT into class VALUES (null,'二班');
INSERT into class VALUES (null,'三班');
CREATE TABLE student(
sid int primary key auto_increment,
sname VARCHAR(20),
sage int,
ssex VARCHAR(20),
cid int REFERENCES class(cid)
)
INSERT into student VALUES (null,'张三',18,'男',1);
INSERT into student VALUES (null,'张四',19,'女',1);
INSERT into student VALUES (null,'张五',28,'男',1);
INSERT into student VALUES (null,'李五',26,'女',2);
INSERT into student VALUES (null,'李六',18,'男',2);
INSERT into student VALUES (null,'李七',20,'女',2);
INSERT into student VALUES (null,'王五',24,'男',3);
INSERT into student VALUES (null,'王六',19,'女',3);
INSERT into student VALUES (null,'王七',22,'男',3);
创建实体类student和class
public class Class {
private int cid;
private String cname;
private List<Student> studentList;
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public List<Student> getStudentList() {
return studentList;
}
public void setStudentList(List<Student> studentList) {
this.studentList = studentList;
}
public Class(){
}
public Class(int cid, String cname, List<Student> studentList) {
this.cid = cid;
this.cname = cname;
this.studentList = studentList;
}
}
public class Student { private int sid; private String sname; private int sage; private String ssex; private Class aclass; private int cid; public int getCid() { return cid; } public void setCid(int cid) { this.cid = cid; } public int getSid() { return sid; } public void setSid(int sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public int getSage() { return sage; } public void setSage(int sage) { this.sage = sage; } public String getSsex() { return ssex; } public void setSsex(String ssex) { this.ssex = ssex; } public Class getAclass() { return aclass; } public void setAclass(Class aclass) { this.aclass = aclass; } public Student(){ } public Student(int sid, String sname, int sage, String ssex, Class aclass, int cid) { this.sid = sid; this.sname = sname; this.sage = sage; this.ssex = ssex; this.aclass = aclass; this.cid = cid; } }Mybatis总配置jdbc
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <package name="bean"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!-- 从配置文件中加载属性 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/r0221"/> <property name="username" value="sa"/> <property name="password" value="1"/> </dataSource> </environment> </environments> <mappers> <!-- 加载前面编写的SQL语句的文件 --> <mapper resource="org.lc.mapper/StudentMapper.xml"/> <mapper resource="org.lc.mapper/ClassMapper.xml"/> </mappers> </configuration>
class和student的接口


MybatisUtil的配置
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String r="mybatis-config.xml";
InputStream is= Resources.getResourceAsStream(r);
sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
public static void closesession(SqlSession session){
if(session!=null){
session.close();
}
}
}
首先多对一,多个学生对应一个班级
<?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="info.StudentInfo">
<resultMap id="studentMap" type="Student">
<result property="sid" column="sid"></result>
<result property="sname" column="sname"></result>
<result property="ssex" column="ssex"></result>
<result property="sage" column="sage"></result>
<result property="cid" column="cid"></result>
<association property="aclass" resultMap="classMap" javaType="Class"></association>
</resultMap>
<resultMap id="classMap" type="Class">
<result property="cid" column="cid"></result>
<result property="cname" column="cname"></result>
</resultMap>
<select id="findAll" resultType="Student" resultMap="studentMap">
select s.*,c.cname from student s ,class c where s.cid=c.cid
</select>
测试类

同理一对多
<?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="info.ClassInfo">
<resultMap id="classMap" type="Class">
<result property="cid" column="cid"></result>
<result property="cname" column="cname"></result>
<collection property="studentList" ofType="Student" >
<result property="sid" column="sid"></result>
<result property="sname" column="sname"></result>
<result property="ssex" column="ssex"></result>
<result property="sage" column="sage"></result>
<result property="cid" column="cid"></result>
</collection>
</resultMap>
<select id="findAll" resultType="Class" resultMap="classMap">
select s.*,c.cname from student s ,class c where s.cid=c.cid and c.cid=#{cid}
</select>
</mapper>

本文介绍了如何使用MyBatis框架实现数据库中一对多和多对一的关系映射。通过创建student和class两个表作为示例,展示了数据库结构和实体类的设计。同时,提供了MyBatis的配置文件,包括总配置、学生和班级的Mapper接口,以及查询所有学生和班级的SQL语句。最后,给出了测试类的简单说明。
1271

被折叠的 条评论
为什么被折叠?



