结果需要涉及到多张表的时候,需要如何去使用sql语句?
详细的教学在菜鸟 https://www.runoob.com/sql/sql-join-inner.html
01.sql语句的语法,这里是内联多张表,使用join … on …
02.写相关的dao层接口
涉及到多张表,建议使用map数据类型,由于返回的对象是多个,所以需要使用到list数据类型。
package com.cy.dao;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
@Mapper
public interface sysMenuDao {
List<Map<String,Object>> findObjects();
}
03.相关的xml映射文件
<select id="findObjects" resultType="map">
<!-- 方案1
select c.*,p.name parentName
from sys_menus c left join sys_menus p
on c.parentId=p.id
-->
<!-- 方案2 -->
select c.*,(
select p.name
from sys_menus p
where c.parentId=p.id
) parentName
from sys_menus c
</select>
c和p都是表的别名。c是sys_menus的p也是sys_menus的,只是他们表示的是在同一时刻的同种表的两张表。(此处是因为sys_menus本身的一个列名parentId,这个列名就与sys_menus本身的另一个列表名id是一一映射的,parentId表示的是父对象(这个对象也是sys_menus中形成的)的id,id则表示sys_menus的类的对象的识别码(标明身份的))
03.写service接口
package com.cy.dao;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
@Mapper
public interface sysMenuDao {
List<Map<String,Object>> findObjects();
}
04.写serviceimpl实现类
package com.cy.pj.sys.service.impl;
@Service
public class SysMenuServiceImpl implements SysMenuService{
@Autowired
private SysMenuDao sysMenuDao;
@Override
public List<Map<String, Object>> findObjects() {
List<Map<String,Object>> list=
sysMenuDao.findObjects();
if(list==null||list.size()==0)
throw new ServiceException("没有对应的菜单信息");
return list;
}
05.写controller类
import com.cy.common.JsonResult;
import com.cy.service.sysMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/menu/")
public class sysMenuController {
@Autowired
sysMenuService sysMenuService;
@RequestMapping("doFindObjects")
public JsonResult doFindObjects() {
return new JsonResult(sysMenuService.findObjects());
}
}