【理论】mybatis对象-关系映射



类与类的关系:
继承(子类,父类)
实现(interface实现)
关联(拥有关系)
组合/聚合(整体与部分:组合是耦合度高的; 聚合 :耦合度低,整体受影响,部分不被影响)、
依赖:人依赖于空气、水(方法的参数及返回值形式 );
关联、组合、聚合:以成员变量的方式存在 ;关系形式为:1V1,1V多,多V多;
设计的时候要考虑关联关系之间的扩展:在中国夫妻关系1V1;在国外为1V多;

迪米特法则:参数类、返回类可以作为类的朋友; 最少知道原则;

一对一关系: 丈夫(id、姓名)老婆(id、姓名、外键)
预加载查询方式: 在增加丈夫和父亲中要在JDBC中增加一个语句, 允许多条语句在标签内部同时执行的命令;但是目前我们学习这个拿不到老婆新生成的id。
根据丈夫信息查询的语句书写: 根据丈夫的id查询丈夫和妻子的信息;

关联关系
husWithWifeMap">
< association property=" wife" javaType=" WifeBean">
association 在关联关系为唯一方的对象的时候使用,在没有list的时候使用;

处理业务:根据id首先删除丈夫有关的对象,然后删除丈夫;
在sql语句 中;是一条语句的结束,我们要使用这个;来结束一条语句。
delete from t_wife where fk_hus_id = #{id};
delete from t_husband where id = #{id};
可以做多条语句同时执行,受影响的行数结果以最后一次执行的语句的结果返回的值;

及时加载查询模式:多条语句查询中首先查出妻子中包含的老公ID,再根据老公ID查询老公所有信息;
public WifeBean getWifeWithHusbandById(@Param("id")Long id);
在妻子端的代码
wifeWithHusMap">
fetchType="lazy" select="com.lovo.mybatis.mapper.HusbandMapper.getHusbandById" column="fk_hus_id">
//其中select是调用哪里的制定的select方法,colimn是将上面获取的结果集中的值fk_hus_id通过占位符传到这个指定SQL标签里面去,在哪里通过#{id} 获取值;
fetchType="lazy" 为延时加载模式;
//通过映射让妻子这边的方法,去执行查询丈夫的信息;并将查询的结果关联到属性:丈夫
查询加载的三种方式
预加载(left join on 连表查询中)
及时加载(刚才上面用到的这个select和colimn的方法)
延时加载(懒加载--通过代理模式来实现);主要用于提高性能、当查A就只查A就断开了
首先、在上面的中的属性中设置为延迟加载模式 fetchType="lazy"
其次、设置在logger4J的配置:

一对多关系
1、添加儿子
insert into t_son (son_name,fk_parents_id)values
(#{son.name},#{son.parents.id})
2、根据ID查询一个父亲下的所有儿子;

【细节点】:1、不能用* 2、做映射,将父亲的信息以关联关系,进行存储;

3、在父亲mapper中,根据ID查询父亲;
name" column=" parent_name" javaType="java.lang.String"/>
< collection property="sons" javaType="java.util.List" fetchType=" lazy" select=" getSonsByParentId" column=" id">
//查询父亲的信息
//查询儿子的信息,该处直接查询,并没有在MAPPer.java中申明这个方法;
【细节点】: 查询的list用 property="sons" javaType="java.util.List" select="调用本层的根据id查询父亲对象" column="id">
【细节点】:配置文件是接口的实现,配置文件可以实现比接口更多的文件;

4、根据id查询父亲类;

你可能感兴趣的:(J2EE)