前言
因为懒惰,在一个查询中,一个表被联查了两次,提供一种不需要再业务层进行二次调用的方式。
提示:以下是本篇文章正文内容,下面案例可供参考
一、Mybatis是什么?
二、使用步骤
1.方式一代码如下
1.1Java类 1->n(1对多,1对1)
public class Project extends BaseEntity{
private static final long serialVersionUID = 1L;
private Long projectId;
/** 项目名称 */
@Excel(name = "项目名称")
private String projectName;
/** 所属部门id */
@Excel(name = "所属部门id")
private Long deptId;
private Long constrDeptId;
/** 所属部门*/
private Dept dept;
private Dept constructionTeam;
/**项目阶段*/
private List projectStages = new ArrayList<>();
/** -1:未开始,0:已开始,1:已结束 */
@Excel(name = "-1:未开始,0:已开始,1:已结束")
private String status;
/** 计划开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "计划开始时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date planStartTime;
/** 实际开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "实际开始时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date actualStartTime;
/** 计划结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "计划结束时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date planEndTime;
/** 实际结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "实际结束时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date actualEndTime;
}
1.1.1重点标注
1.2 xml代码
/p>
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select project_id, project_name, dept_id, constr_dept_id, status, plan_start_time, actual_start_time, plan_end_time, actual_end_time, del_flag, create_by, create_time, update_by, update_time, remark from _project
select project_id, project_name, dept_id, constr_dept_id, status, plan_start_time,
actual_start_time, plan_end_time, actual_end_time, del_flag, create_by, create_time,
update_by, update_time, remark,
d.dept_name,ur.dept_name as team_dept_name,r.pro_stage_name,r.pro_stage_name,r.constr_dept_id
from _project
left join _dept d on dept_id = d.dept_id
left join _dept ur on constr_dept_id = ur.dept_id
left join _project_stage r on project_id = r.project_id
and project_name like concat('%', #{projectName}, '%')
and dept_id = #{deptId}
and constr_dept_id = #{constrDeptId}
and status = #{status}
and plan_start_time = #{planStartTime}
and actual_start_time = #{actualStartTime}
and plan_end_time = #{planEndTime}
and actual_end_time = #{actualEndTime}
where project_id = #{projectId}
insert into _project
project_id,
project_name,
dept_id,
constr_dept_id,
status,
plan_start_time,
actual_start_time,
plan_end_time,
actual_end_time,
del_flag,
create_by,
create_time,
update_by,
update_time,
remark,
#{projectId},
#{projectName},
#{deptId},
#{constrDeptId},
#{status},
#{planStartTime},
#{actualStartTime},
#{planEndTime},
#{actualEndTime},
#{delFlag},
#{createBy},
#{createTime},
#{updateBy},
#{updateTime},
#{remark},
update _project
project_name = #{projectName},
dept_id = #{deptId},
constr_dept_id = #{constrDeptId},
status = #{status},
plan_start_time = #{planStartTime},
actual_start_time = #{actualStartTime},
plan_end_time = #{planEndTime},
actual_end_time = #{actualEndTime},
del_flag = #{delFlag},
create_by = #{createBy},
create_time = #{createTime},
update_by = #{updateBy},
update_time = #{updateTime},
remark = #{remark},
where project_id = #{projectId}
delete from _project where project_id = #{projectId}
delete from _project where project_id in
#{projectId}
1.2.1重点标注
要将你所需要的字段清楚的写出来,并且名相同&&值不同的字段要起别名;
如果你只想要某个表的name/特殊字段,不想用对象封装,也可以用这种方式:
2.方式二代码如下:
代码如下(示例):
2.1java:
public class Project extends BaseEntity{
private static final long serialVersionUID = 1L;
/** $column.columnComment */
private Long projectId;
/** 项目名称 */
@Excel(name = "项目名称")
private String projectName;
/** 所属部门id */
@Excel(name = "所属部门id")
private Long deptId;
private Long constrDeptId;
private String deptName;
private String teamDeptName;
/** 所属部门*/
private Dept dept;
private Dept constructionTeam;
/**项目阶段*/
private List projectStages = new ArrayList<>();
/** -1:未开始,0:已开始,1:已结束 */
@Excel(name = "-1:未开始,0:已开始,1:已结束")
private String status;
/** 计划开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "计划开始时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date planStartTime;
/** 实际开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "实际开始时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date actualStartTime;
/** 计划结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "计划结束时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date planEndTime;
/** 实际结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "实际结束时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date actualEndTime;
}
2.2 xml:
/p>
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select project_id, project_name, dept_id, constr_dept_id, status, plan_start_time,
actual_start_time, plan_end_time, actual_end_time, del_flag, create_by, create_time,
update_by, update_time,
d.dept_name, ur.dept_name as team_dept_name
from _project
left join _dept d on dept_id = d.dept_id
left join _dept ur on constr_dept_id = ur.dept_id
left join _project_stage r on project_id = r.project_id
总结一对一/一对多可以将对象封装到对象中,直接通过多表联查查询;
也可以将需要的属性拿出来,通过< resultMap > 映射出来
您也可以构造一个VO对象,然后在业务层多次调用数据库,构造出前端需要的数据;
尽量不要懒惰哦!