mybatis多表查询

MyBatis实现多表联合查询与模糊搜索
本文介绍了如何使用MyBatis进行多表查询,以A、B两个表为例,A表中存储B表的id。在Java代码中,A类包含B类属性。通过定义SQL查询语句,实现查询A、B表的所有数据。当涉及模糊查询且条件在B表时,详细阐述了处理方法,并展示了controller层接收B类对象的示例。
  1. 比如有两个表A和B,A关联B

(1)数据库中A表中存有B表的id 

(2)在后端Java代码程序中,在A类的字段中加入B类属性,如:

public class A implements Serializable {
    private Integer id;

    private String name;

    private B b;
    /**
    *实现get和set方法,toString方法(便于测试)
    */

mapper接口和Service不予赘诉(增删改查)

如果需要查询A,B两张表中的所有数据

<mapper namespace="命名空间,mapper接口全路径" >
  <resultMap id="BaseResultMap" type="A类的全路径" >
    <id column="id" property="id" jdbcType="INTEGER" />
    <result column="user_app_id" property="userAppId" jdbcType="INTEGER" />
    <result column="suggestion_content" property="suggestionContent" jdbcType="VARCHAR" />
    <!--注意这个地方,相当于关联B表
    <result column="appName" jdbcType="VARCHAR" property="appName" />
    是需要接收B表中的字段
    需要的字段必须在这写好,
    column:数据库字段名,property:对应Java代码中的属性名
    -->
    <association property="b" javaType="B">
      <id property="id" column="app.id"/>
      <result column="appName" jdbcType="VARCHAR" property="appName" />
    </association>
  </resultMap>

下面查询语句,由于A表的sql语句多次用到,我们可以做如下定义:

<sql id="suggestionSql">A.id,A.name</sql>

具体的查询语句的XML

<!--查询所有字段-->
 <select id="selectAll" resultMap="BaseResultMap" 
 resultType="A类的全路径">
    select <include refid="suggestionSql"></include>, app.app_name             
    appName,user_app.nickname userAppName
    from A left join app on A.app_id = B.app_id
  </select>

如果是模糊查询,且查询的条件在B表中

 <!-- 根据名称查询符合条件的记录 
    注意:resultMap="BaseResultMap",
    前端查询条件为B类数据(因为查询条件在B类中)
    虽然查询条件在B表中,
    并不能写成:parameterType="B类的全路径"(这样只能拿到表A中的数据)
-->
  <select id="selectSuggestionByName" resultMap="BaseResultMap" resultType="A类全路径">
    select <include refid="suggestionSql"></include>, app.app_name 
    appName,user_app.nickname userAppName
    from A left join app on A.app_id = B.app_id
    <where>
      <if test="nickname != null and nickname != ''">
        AND nickName LIKE "%"#{nickname}"%"
      </if>
    </where>
  </select>

 controller层也是接收B类的对象,形如:

  /**
   * 模糊查询
   */
    @PostMapping(value = "/listAByName")
    public RestApi listAByName(B b, int pageNum, int pageSize) {
        return RestApi.getSuccessApi(AService.selectAByName(b, pageNum,pageSize));
    }

如有差错,敬请见谅,此为鄙人学习笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值