为什么要用一对多,多对一?
一、 数据库表之间的关联关系:在关系型数据库中,不同表之间存在一对多、一对一、多对多等关联关系。通过在MyBatis中配置关联关系,可以方便地处理这些表之间的连接和查询操作,使数据的读取和写入更加简单和高效。
二、
避免手动编写复杂SQL:使用MyBatis的关联关系配置,可以避免手动编写复杂的SQL语句来处理多个表之间的关联。通过简单的配置,MyBatis可以自动处理表之间的连接查询,简化了开发者的工作量。
三、
对象关系映射:MyBatis是一个对象关系映射(ORM)框架,它可以将数据库中的表与Java对象之间进行映射。配置关联关系可以帮助开发者实现对象之间的关联,提供了更加面向对象的编程方式。
四、
冗余数据减少:通过合理的关联关系配置,可以避免数据的冗余存储,减少数据库的存储空间占用。同时,在查询数据时,也可以通过关联关系一次性获取到所有相关的数据,提高查询效率。
总的来说,MyBatis的关联关系配置可以帮助开发者处理多表之间的关系,提供了更方便、高效和可维护的数据操作方式,减少了手动编写复杂SQL语句的工作量,同时也符合对象关系映射的思想。
MyBatis一对多的用法
在创建实体类的时候关联两个实体类
一、学生表的实体类
public class Tab_student { private Integer stuno; private String stuname; private String stusex; private Integer classid; /* tab_Class 是tab_student的一个属性 类型是Tab_class是一个类型 */ private Tabc_lass lass; } |
二、班级表的实体类
public class Tabc_class { private Integer id; private String cname; /** * 配置班级和学生的关系 *一对多 * 一个班级很多学生 */ private List<Tab_student> stuList; } |
mapper里的写法
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.example.dao.AppDao"> <!-- 自动映射--> <resultMap id="getStu" type="org.example.entity.Tab_student" autoMapping="true"> <!-- 列名和属性名 一一对应--> <!-- 注意 主键stuno 标签id代表的是主键--> <!-- column 代表的是列的名字--> <!-- property实体类中的属性--> <id column="stuno" property="stuno"></id> <!-- 普通的字段 用result--> <result column="stuname" property="stuname"></result> <result column="stusex" property="stusex"></result> <result column="classid" property="classid"></result> <!-- 多对一 标签 properyty代表在乙方属性的名字--> <!-- javatype代表属性的类型是什么--> <association property="lass" javaType="org.example.entity.Tabc_lass"> <!-- 配置--> <id property="id" column="id"></id> <result property="cname" column="cname"></result> </association> </resultMap> <select id="findAll" resultMap="getStu" resultType="org.example.entity.Tab_student"> select * from tab_student s left join tab_class c on s.classid=c.id </select> </mapper> |
运行之后的结果
[Tab_student(stuno=1, stuname=张三, stusex=男, classid=1, lass=Tabc_lass(id=1, cname=A369, stuList=null)), Tab_student(stuno=2, stuname=李四, stusex=女, classid=2, lass=Tabc_lass(id=2, cname=A370, stuList=null)), Tab_student(stuno=4, stuname=赵六, stusex=男, classid=2, lass=Tabc_lass(id=2, cname=A370, stuList=null)), Tab_student(stuno=3, stuname=王五, stusex=男, classid=3, lass=Tabc_lass(id=3, cname=A371, stuList=null))] |
MyBatis多对一的用法
实体类上的写法与上面一样
mapper写法
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.example.dao.ClassMapper"> <resultMap id="getAllClass" type="org.example.entity.Tabc_lass" autoMapping="true"> <id column="id" property="id"></id> <!-- 多 property 代表的就是tab——Lass中学生的属性--> <collection property="stuList" ofType="org.example.entity.Tab_student" autoMapping="true"> <id property="stuno" column="stuno"></id> </collection> </resultMap> <select id="findall" resultMap="getAllClass" resultType="org.example.entity.Tabc_lass"> select * from tab_class c left join tab_student s on s.classid=c.id </select> </mapper> |
运行之后的结果
[Tabc_lass(id=1, cname=A369, stuList=[Tab_student(stuno=1, stuname=张三, stusex=男, classid=1, lass=null)]), Tabc_lass(id=2, cname=A370, stuList=[Tab_student(stuno=2, stuname=李四, stusex=女, classid=2, lass=null), Tab_student(stuno=4, stuname=赵六, stusex=男, classid=2, lass=null)]), Tabc_lass(id=3, cname=A371, stuList=[Tab_student(stuno=3, stuname=王五, stusex=男, classid=3, lass=null)])] |
以上就是MyBatis一对多,多对一的用法
总体来说就是对象关系的映射