SSM项目日常之查询操作
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术:IntelliJ IDEA java
作者:刘剑鸿
撰写时间:2021/5.99
在日常实际项目开发中,经常会用到需要两张表或多张表中的数据处理。例如:联表查询,多表新增、多表修改…
下面介绍的是在ssm项目中的简单的一个多表查询Demo。
首先理解这三种不同的javabean,首先要理解java分层思想中的Controller+Service +Dao三层的功能划分。
这三层的功能分别为:
Controller: 用来处理业务(Service)调度和管理跳转。执行的过程为:引用对应的Service层,结合SpringMVC注释,跳转到指定的页面,当然也能接受页面传递的请求数据,也可以做些计算处理.
Service: 用来管理具体功能。执行的过程为:引用对应的dao层的数据库操作。
Dao: 只完成数据库的增删改查,可以1对多,多对多,一对一(多对一)关联,模糊,动态,子查询。但是无论多么复杂的查询,dao只负责封装增删改查。对于具体如何增删改查,dao层是不管的。
了解了这三层的执行流程后,就可以分别对应理解vo,bo,pojo三者之间的关系:
下面是我将要介绍多表之间的数据结构
图中:contract表为主表,其他都为副表。
在pojo中也是简单的把要查询的字段写出来
public class Contract {
private int contractId;
private int contractDetailId;
private int estateId;
private int pay_wayId;
private String contractname;
private String period_begin;
private String period_finish;
private String estatename;
private String pay_wayname;
public Contract() {
super();
}
}
有参无参构造方法,tosting方法、getter和setter的方法我就省略不写了。
我的思路是在打开查询页面就触发该查询方法。所以控制器写法为:
@RequestMapping("/contractview")
public String contractview(Model model){
List<Contract> list = userService.SelectAllCon();
model.addAttribute("contract",list);
return "contractview";//
}
@RequestMapping("/contractview")这个是注解
List<Contract> list = userService.SelectAllCon();这个将要Service层的执行方法
return "contractview";//将要返回的视图
Service层:
public interface UserService {
List<User> SelectAll();
}
Impl层:
public class UserServiceImpl implements UserService {
public List<User> SelectAll() {
return userMapper.SelectAll();
}
}
一般还要有其他的复杂的操作写法都是出现在这里,不过本次只是简单的查询
Dao层:public interface UserMapper {
List<User> SelectAll();
}
Xml层的SQL语句:
<select id="SelectAll" resultType="Contract">
SELECT
contract.contractId,contract.contractDetailId,contract.estateId, contract.pay_wayId,contractname, period_begin,period_finish,estatename, pay_wayname
FROM
contract inner join contractdetail on contract.contractDetailId = contractdetail.contractDetailId
inner join estate on contract.estateId = estate.estateid
inner join pay_way on contract.pay_wayId = pay_way.pay_wayId;
</select>
当处理较为复杂的数据时,应该根据情况选择处理的方法,不管是多表联查还是分别查询,争取用最简单的方法将问题得到解决。