虽然了解Mybatis 的底层原理,技术架构,各种对接搭建才是高大上,但是对于业务实现的高频率散点的汇总,更加有实用价值,规避常见问题,一步到位精准快速开发,可以节省生命。
单个简单参数
public List<AgentVo> getAgentList(String appId);
<select id="getAgentList" resultType="com.wht.demo.dao.vo.AgentVo">
select
t.node_id as nodeId,
t.host_name as hostName,
t.address_ip as addressIp
from
t_node_agent t
where t.delete_flag =1
and t.app_id= #{appId}
</select>
1、单个参数传递可以直接用变量名,可以支持多种类型。
2、select 中的parameterType="String" 可以省略
单个实体对象参数
Java是面向对象开发,我们很多数据传递的是一个VO,例如搜索面板。
public List<AgentVo> getAgentList(AgentVo agentVo);
<select id="getAgentList" resultType="com.wht.demo.dao.vo.AgentVo">
select
t.node_id as nodeId,
t.host_name as hostName,
t.address_ip as addressIp
from
t_node_agent t
where t.delete_flag =1
and t.app_id= #{appId}
and t.env = #{env}
</select>
1、单个对象作为参数,可以用对应的属性直接接受。
单个List传参
这个是真实项目非常常见的传参方式
public List<AgentVo> getAgentList(List<String> appIdList);
<select id="getAgentList" resultType="com.wht.demo.dao.vo.AgentVo">
select
t.node_id as nodeId,
t.host_name as hostName,
t.address_ip as addressIp
from
t_node_agent t
where t.delete_flag =1
and t.app_id in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>
多个基础数据类型参数
为什么不适用VO对象直接传参,有些时候对象包含几十个字段,我们只是做简单的查询,直接用基础数据数据类型传参更加干净利落。
public List<AgentVo> getAgentList(String appId,String env);
<select id="getAgentList" resultType="com.wht.demo.dao.vo.AgentVo">
select
t.node_id as nodeId,
t.host_name as hostName,
t.address_ip as addressIp
from
t_node_agent t
where t.delete_flag =1
t.app_id= #{0}
t.env = #{1}
</select>
1、一般三个参数以内,这么传参
2、直接按照参数顺序接收参数。
3、为了提高可读性,建议都采用参数名接收,IDEA等开发工具自动带出,不影响开发速度。
public List<AgentVo> getAgentList(@Param("appId") String appId,@Param("env") String env);
<select id="getAgentList" resultType="com.wht.demo.dao.vo.AgentVo">
select
t.node_id as nodeId,
t.host_name as hostName,
t.address_ip as addressIp
from
t_node_agent t
where t.delete_flag =1
t.app_id= #{appId}
t.env = #{env}
</select>
@Param 是一个让人见文知义的好注解,单个参数就没必要了。
所以更加推荐下面这种方式。
基础数据类型加List
有时候我们需要不只是单一的参数传递方式
public List<AgentVo> getAgentList(@Param("env") String env, @Param("appIdList") List<String> appIdList);
<select id="getAgentList" resultType="com.wht.demo.dao.vo.AgentVo">
select
t.node_id as nodeId,
t.host_name as hostName,
t.address_ip as addressIp
from
t_node_agent t
where t.delete_flag =1
and t.env =#{env}
and t.app_id in
<foreach item="item" index="index" collection="appIdList" open="(" separator="," close=")">
#{item}
</foreach>
</select>
Map传参数
service层
Map<String, Object> params = new HashMap<String, Object>();
List<Integer> nodeIdList = new ArrayList<>();
nodeIdList.add(178325);
nodeIdList.add(178334);
nodeIdList.add(178486);
params.put("appId", "com.jd.hr.ploud");
params.put("nodeIdList", nodeIdList );
List<AgentVo> list=AgentVoDao.findAgents(params);
Dao层
//根据userid和passengerType查询
List<AgentVo> findAgents(Map<String, Object> params);
配置SQL
<select id="findAgents" resultMap="com.wht.demo.dao.vo.AgentVo" parameterType="java.util.Map">
select
t.node_id as nodeId,
t.host_name as hostName,
t.address_ip as addressIp
from
t_node_agent t
where t.delete_flag =1
and node_id in
<foreach item="item" index="index" collection="nodeIdList" open="(" separator="," close=")">
#{item}
</foreach>
<if test="appId!= null" >
and app_id= #{appId}
</if>
</select>
标签:传参,node,常用,List,env,appId,Mybatis,id,select
From: https://www.cnblogs.com/hcgk/p/17369199.html