mybatis 多表关联mapper文件写法操作

 更新时间:2020年12月01日 08:44:41   作者:林奇lc  
这篇文章主要介绍了mybatis 多表关联mapper文件写法操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

两张表SystemParam(系统参数表) Suit (主题)

SystemParam 与 Suit 是多对一

Suit 的higerSuit字段是Suit 的父及主题id 是多对一,需要自连接查询,因为重名所以父表sql字段加别名

mapper方法

Systemparam selectJoinSuit(String strparamcode);

Po类

public class Systemparam {
 //ManyToOne "主题"
 private Suit suitobj;
 private String strparamcode;
 private String strenable;
 private String strparamname;
 //suit表主键
 private String suit;
 private String strparamvalue;
} 

public class Suit {
 //ManyToOne
 private Suit suit;
 //主键
 private String strsuitcode;
 private String strsuitname;
 //父级id
 private String higersuit;
}

resultMap的写法

<resultMap id="BaseResultMap" type="net.transino.model.Systemparam" >
 <id column="strParamCode" property="strparamcode" jdbcType="VARCHAR" />
 <result column="strEnable" property="strenable" jdbcType="VARCHAR" />
 <result column="strParamName" property="strparamname" jdbcType="VARCHAR" />
 <result column="suit" property="suit" jdbcType="VARCHAR" />
</resultMap>

resultMap 使用extends 继承上级map

<resultMap id="ResultMapWithBLOBs" type="net.transino.model.Systemparam" extends="BaseResultMap" >
 <result column="strParamValue" property="strparamvalue" jdbcType="LONGVARCHAR" />
</resultMap>
<resultMap id="JoinsuitMap" type="net.transino.model.Systemparam" extends="ResultMapWithBLOBs" >
 <association property="suitobj" javaType="Suit">
 <id column="strSuitCode" property="strsuitcode" jdbcType="VARCHAR" />
 <result column="strSuitName" property="strsuitname" jdbcType="VARCHAR" />
 <result column="higerSuit" property="higersuit" jdbcType="VARCHAR" />
 <association property="suit" javaType="Suit">
 <id column="pstrSuitCode" property="strsuitcode" jdbcType="VARCHAR" />
 <result column="pstrSuitName" property="strsuitname" jdbcType="VARCHAR" />
 <result column="phigerSuit" property="higersuit" jdbcType="VARCHAR" />
 </association>
 </association>
</resultMap>

select写法

<select id="selectJoinSuit" resultMap="JoinsuitMap" parameterType="java.lang.String">
 select
 systempara0_.*,
 suit1_.*,
 suit2_.strSuitCode pstrSuitCode,
 suit2_.strSuitName pstrSuitName,
 suit2_.higerSuit phigerSuit
 from SystemParam systempara0_
 LEFT OUTER JOIN
 Suit suit1_
 ON systempara0_.suit=suit1_.strSuitCode
 LEFT OUTER JOIN
 Suit suit2_
 ON suit1_.higerSuit=suit2_.strSuitCode
 WHERE
 systempara0_.strParamCode=#{strparamcode,jdbcType=VARCHAR}
</select>

补充知识:Mybatis中resultMap标签实现多表查询(多个对象)

1 n+1

1 在teacher中添加List student,

public class Teacher {
 private int id;
 private String name;
 private List<Student> list;

2 在studentMapper.xml中添加通过tid查询

<select id="selByTid" resultType="Student" parameterType="int">
 select * from student where tid=#{0}
</select> 

3 在TeacherMapper.xml中添加查询全部

<resultMap type="Teacher" id="mymap1"> 
 <id column="id" property="id"/>
 <result column="name" property="name"/>
 <collection property="list" ofType="Student" select="com.bjsxt.mapper.StudentMapper.selByTid" column="id"></collection>
</resultMap> 
<select id="selAll" resultMap="mymap1">
 select * from teacher 
</select> 

其中collection是当属性为集合类型时使用的标签

2 多表联合

<resultMap type="Teacher" id="stumap1">
 <id column="tid" property="id"/>
 <result column="tname" property="name"/>
 <collection property="list" ofType="Student">
 <id column="sid" property="id"/>
 <result column="sname" property="name"/>
 <result column="age" property="age"/>
 <result column="tid" property="tid"/>
 <association property="teacher" select="com.bjsxt.mapper.TeacherMapper.selById" column="tid"></association>
 </collection> 
 </resultMap>
 
 <select id="selAll1" resultMap="stumap1">
 select t.id tid,t.name tname,s.id sid,s.name sname,age,tid from teacher t left join student s on t.id=s.tid 
 </select>

以上这篇mybatis 多表关联mapper文件写法操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 一分钟入门Java Spring Boot彻底解决SSM配置问题

    一分钟入门Java Spring Boot彻底解决SSM配置问题

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域成为领导者
    2021-10-10
  • Java通过Callable实现多线程

    Java通过Callable实现多线程

    这篇文章主要介绍了Java通过Callable实现多线程,Callable的任务执行后可返回值,运行Callable任务可以拿到一个Future对象,Future表示异步计算的结果,它提供了检查计算是否完成的方法,以等待计算的完成,并检查计算的结果,需要的朋友可以参考下
    2023-10-10
  • Java实现单人信息管理程序

    Java实现单人信息管理程序

    这篇文章主要为大家详细介绍了Java实现单人信息管理程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • java实现图片转ascii字符画的方法示例

    java实现图片转ascii字符画的方法示例

    这篇文章主要介绍了java实现图片转ascii字符画的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Java中注解@Async实现异步及导致失效原因分析

    Java中注解@Async实现异步及导致失效原因分析

    Async注解用于声明一个方法是异步的,当在方法上加上这个注解时将会在一个新的线程中执行该方法,而不会阻塞原始线程,这篇文章主要给大家介绍了关于Java中注解@Async实现异步及导致失效原因分析的相关资料,需要的朋友可以参考下
    2024-07-07
  • Java中接口和抽象类的区别与相同之处

    Java中接口和抽象类的区别与相同之处

    这篇文章主要介绍了Java中接口和抽象类的区别与相同之处,本文讲解了抽象类的概念、接口的概念、接口和抽象类的区别与联系等内容,需要的朋友可以参考下
    2015-06-06
  • 基于java编写局域网多人聊天室

    基于java编写局域网多人聊天室

    这篇文章主要为大家详细介绍了基于java编写局域网多人聊天室的相关资料,使用socket基于java编写一个局域网聊天室,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Java实现简单酒店管理系统

    Java实现简单酒店管理系统

    这篇文章主要为大家详细介绍了Java实现简单酒店管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Java锁的升级策略 偏向锁 轻量级锁 重量级锁

    Java锁的升级策略 偏向锁 轻量级锁 重量级锁

    在本文中小编给的大家整理了关于Java锁的升级策略 偏向锁 轻量级锁 重量级锁的相关知识点内容,需要的朋友们参考下。
    2019-06-06
  • 基于线程的wait和notify使用,生产消费案例

    基于线程的wait和notify使用,生产消费案例

    这篇文章主要介绍了基于线程的wait和notify使用,生产消费案例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论