ssm 多表查询不创建实体类返回数据
开发工具与关键技术:java、IDEA2019、jdk1.8
作者:Amewin
撰写时间:2020年4月27日
背景
由于很多时候要多表查询,每次都创建实体类很是费劲,虽然可以在mybatis创建resultMap 自定义返回列,但是配置起来依旧很麻烦。
说明
该方法虽然能较好简化多表查询配置,但是由于HashMap 是线程不安全的,同时有大量用户访问可能会出现性能的未知错误
当然,ssm spring有缓存功能,目前本人测试还未出现未知错误
补充
使用LinkedHashMap 返回也可以,但是LinkedHashMap(线程安全)与 HashMap 性能相差巨大 不建议使用
企业级开发还是建议实体创建
Dao.xml配置如下:
<select id="selectAllMap" parameterType="amewin.util.Bsgrid"resultType="java.util.HashMap">
SELECT
t1.WardID,
t1.WardMC,
t1.WardNum,
t2.SectionID
t2.SectionMC,
t2.SectionNum,
FROM
sys_ward AS t1 JOIN
sys_section AS t2 on t1.WardID=t2.WardID order by t1.WardID
</select>
接口配置
public interface SysSectionDAO {
/**
* 连表分页查询
* @param section
* @return
*/
List<Map<String,Object>> selectAllMap(Bsgrid bsgrid);
}
注意
接口返回类型 List<Map<String,Object>>
不能写成 List<HashMap<String,Object>> 会报错
Service层
/**
* 方案二
*
* @param sysSection
* @return map
*/
public Map<String, Object> selectData(Bgrid bgrid) {
Map<String, Object> map = Collections.synchronizedMap(new HashMap<String, Object>());//线程同步
PageHelper.startPage(bsgrid.getCurPage(), bsgrid.getPageSize());
List userList = sysSectionDAO.selectData(bsgrid);//获取数据
PageInfo<List<Map<String, Object>>> pageInfo = new PageInfo(userList);
sysSection.setPageSize(sysSection.getPageSize());
map.put("totalRows", pageInfo.getTotal());//总条数
map.put("pageSize", bsgrid.getPageSize());//当前页条数
map.put("curPage", bsgrid.getCurPage());//页数
map.put("data", pageInfo.getList());//分页数据
map.put("success", true);//状态
return map;
}
注意
List userList = sysSectionDAO.selectData(bsgrid);//获取数据
List<Map<String,Object>>userList = sysSectionDAO.selectData(bsgrid);//获取数据
返回类型可以 简化写成 List 也可以写成List<Map<String,Object>>
使用 PageHelper 分页插件 如果不使用 要写两个查询
- 获取数据
- 获取总条数