不说废话,直接说我的思路
1、先在entity(dao)定义一个实体类,定义要封装的数据,取名ES_ROUTE
package xingluo.navigate.entity;
public class ES_ROUTE {
private int id;
private String sbmc;
private String destname;
private String route;
private int angle;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getSbmc() {
return sbmc;
}
public void setSbmc(String sbmc) {
this.sbmc = sbmc;
}
public String getDestname() {
return destname;
}
public void setDestname(String destname) {
this.destname = destname;
}
public String getRoute() {
return route;
}
public void setRoute(String route) {
this.route = route;
}
public int getAngle() {
return angle;
}
public void setAngle(int angle) {
this.angle = angle;
}
}
2、然后在Mapper.xml中使用
先定义要返回的Map的参数
id 为标识符
type 为类型,使用实体类名
property 需要映射到实体类的属性名称
column 数据表的列名或者标签别名
后面这两个可以不写:
javaType 一个完整的类名,或者是一个类型别名。如果你匹配的是一个JavaBean,那MyBatis 通常会自行检测到。然后,如果你是要映射到一个HashMap,那你需要指定javaType 要达到的目的。
jdbcType 数据表支持的类型列表。这个属性只在insert,update 或delete 的时候针对允许空的列有用。JDBC 需要这项,但MyBatis 不需要。如果你是直接针对JDBC 编码,且有允许空的列,而你要指定这项。
<resultMap id = "routeMap" type="ES_ROUTE">
<!--
id元素 ,用于设置主键字段与领域模型属性的映射关系
result元素 ,用于设置普通字段与领域模型属性的映射关系
-->
<id property="id" column="id"/>
<result property="sbmc" column="sbmc"/>
<result property="destname" column="destname"/>
<result property="route" column="route"/>
<result property="angle" column="angle"/>
</resultMap>
SQL语句
<select id="getRouteDestAll" parameterType="int" resultMap="routeMap">
SELECT
tb_route.id,
tb_dev.sbmc,
tb_dest.destname,
tb_route.route,
tb_route.angle
FROM
tb_route
INNER JOIN tb_dest ON
tb_route.destID=tb_dest.id
INNER JOIN tb_dev ON
tb_route.fromdev=tb_dev.sbid
WHERE
tb_dev.sbid=#{sbid}
</select>
id为接口提供函数名
parameterType为输入类型
resultMap输出类型,与resultMap的id对应
3、编写Mapper接口
package xingluo.navigate.mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import xingluo.navigate.entity.TB_ROUTE;
public interface TB_ROUTEMapper {
//查询
//一个list集合里放的是Map.
//每一个Map的key值类型,对应的value类型
List<Map<String,Object>> getRouteDestAll(@Param("sbid")int sbid);
}
Param可以固定参数,方便xml中使用
4、编写Service接口和Seviceimpl具体实现类
package xingluo.navigate.service;
import java.util.List;
import java.util.Map;
import xingluo.navigate.entity.TB_ROUTE;
public interface TB_ROUTEService {
//查询
List<Map<String,Object>> getRouteDestAll(int sbid);
}
------------------------------------------分割线------------------------------------------
package xingluo.navigate.service.impl;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import xingluo.navigate.entity.TB_ROUTE;
import xingluo.navigate.mapper.TB_ROUTEMapper;
import xingluo.navigate.service.TB_ROUTEService;
@Service
public class TB_ROUTEServiceimpl implements TB_ROUTEService {
@Autowired
TB_ROUTEMapper tbr;
@Override
public List<Map<String, Object>> getRouteDestAll(int sbid){
return tbr.getRouteDestAll(sbid);
}
}
5、然后就是控制器的调用和前端的调用
package xingluo.navigate.control;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import xingluo.navigate.entity.TB_ROUTE;
import xingluo.navigate.service.TB_ROUTEService;
@Controller
public class RouteControl {
@Autowired //@Autowired修饰的类需要注入对象,String会自己在注入的里面找到相应 的对象注入-HBy
TB_ROUTEService tbr;
//列出所有目的地信息
@RequestMapping("/routeSelectDestAll")
public String routeSelectDestAll(HttpServletRequest req,HttpServletResponse resq,Model model)throws ServletException, IOException{
req.setCharacterEncoding("UTF-8");
int sbid=Integer.parseInt(req.getParameter("sbid"));
List<Map<String, Object>> list = tbr.getRouteDestAll(sbid);
model.addAttribute("list",list);
return "route-selectDest";
}
}
最后的效果图
写完后,我感觉没简便到好多,感觉就是一个变多了一步地实体封装类,有可能我还没遇到可以简便的地方。以后使用的时候在多多思考。