- 比如有两个表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));
}
如有差错,敬请见谅,此为鄙人学习笔记