如不会搭建springcloud项目环境的可以参考我的上一篇博文:https://blog.csdn.net/qq_43222167/article/details/105577097
传递各种参数,直接上代码
服务提供端:
public interface OrderDao {
int insertOrder(Order order);
int deleteOrder(int id);
int updateOrder(Order order);
Order selectId(int id);
/*Order selectIdUserName(int id,String userName);*/
List<Order> selectAll();
Order selectMap(Map<String,String> map);
}
public interface OrderService {
int insertOrder(Order order);
int deleteOrder(int id);
int updateOrder(Order order);
Order selectId(int id);
/*Order selectIdUserName(int id,String userName);*/
List<Order> selectAll();
Order selectMap(Map<String,String> map);
}
import com.jbit.dao.OrderDao;
import com.jbit.entity.Order;
import com.jbit.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Service
@RestController
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderDao orderDao;
@RequestMapping(value = "insertOrder")
@Override
public int insertOrder(@RequestBody Order order) {
return orderDao.insertOrder(order);
}
@RequestMapping(value = "deleteOrder")
@Override
public int deleteOrder(@RequestParam("id") int id) {
return orderDao.deleteOrder(id);
}
@RequestMapping(value = "updateOrder")
@Override
public int updateOrder(@RequestBody Order order) {
return orderDao.updateOrder(order);
}
@RequestMapping(value = "selectId")
@Override
public Order selectId(int id) {
return orderDao.selectId(id);
}
/* @RequestMapping("selectIdUserName")
@Override
public Order selectIdUserName(int id, String userName) {
return orderDao.selectIdUserName(id,userName);
}*/
@RequestMapping(value = "selectAll")
@Override
public List<Order> selectAll() {
return orderDao.selectAll();
}
@RequestMapping(value = "selectMap")
@Override
public Order selectMap(@RequestBody Map<String, String> map) {
System.out.println("provder--------------service");
for(String s:map.keySet()){
System.out.println("key:"+s+"value:"+map.get(s));
}
return orderDao.selectMap(map);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.jbit.dao.OrderDao">
<insert id="insertOrder" parameterType="Order">
insert into orders(orderName,userName)values(#{orderName},#{userName})
</insert>
<delete id="deleteOrder">
delete from orders where id=#{id}
</delete>
<update id="updateOrder" parameterType="Order">
update orders set orderName=#{orderName},userName=#{userName} where id=#{id}
</update>
<select id="selectId" resultType="Order">
select * from orders where id=#{id}
</select>
<!--<select id="selectIdUserName">
select * from orders where id=#{id} and userName=#{userName}
</select>-->
<select id="selectAll" resultType="Order">
select * from orders
</select>
<select id="selectMap" resultType="Order" parameterType="map">
select * from orders where orderName=#{orderName} and userName=#{userName}
</select>
</mapper>
消费者端
dao层和映射dao层就不再写出,与上面一模一样
import com.jbit.entity.Order;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
@FeignClient(name="provoider")//,url = "127.0.0.1:8081/")
public interface OrderService {
@RequestMapping(value = "insertOrder")
int insertOrder(@RequestBody Order order);
@RequestMapping(value = "deleteOrder")
int deleteOrder(@RequestParam("id") int id);
@RequestMapping(value = "updateOrder")
int updateOrder(@RequestBody Order order);
@RequestMapping(value = "selectId")
Order selectId(@RequestParam("id") int id);
/* @RequestMapping("selectIdUserName")
Order selectIdUserName(@RequestParam("id") int id,@RequestParam("userName") String userName);*/
@RequestMapping(value = "selectAll")
List<Order> selectAll();
@RequestMapping(value = "selectMap")
Order selectMap(@RequestBody Map<String,String> map);
}
import com.jbit.entity.Order;
import com.jbit.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("order")
public class OrderController {
@Autowired
private OrderService orderService;
@RequestMapping("insertOrder")
public int insertOrder(Order order){
System.out.println(order);
return orderService.insertOrder(order);
}
@RequestMapping("deleteOrder")
public int deleteOrder(int id){
return orderService.deleteOrder(id);
}
@RequestMapping("updateOrder")
public int updateOrder(Order order){
return orderService.updateOrder(order);
}
@RequestMapping("selectId")
public Order selectId(int id){
return orderService.selectId(id);
}
/* @RequestMapping("selectIdUserName")
public Order selectIdUserName(int id,String userName){
return orderService.selectIdUserName(id,userName);
}*/
@RequestMapping("selectAll")
public List<Order> selectAll(){
return orderService.selectAll();
}
@RequestMapping("selectMap")
public Order selectMap(String userName,String orderName){
Map<String,String> map=new HashMap<String, String>();
map.put("userName",userName);
map.put("orderName",orderName);
System.out.println("------------------");
return orderService.selectMap(map);
}
}
测试:
查询全部:
根据id查询:
根据map查询:
增加:
修改:
删除:
总结:
1.单个参数在消费者方法使用@RequestParam(value)即可
2.实体类或Map集合需要使用@RequestBody
记录坑:
记得服务提供者一定要加@RestController,否则会报错:feign.FeignException: status 404 reading ActivityClientService#xxx
本文中有一个注释的方法,是传递多个参数的,不知道什么原因,就是用不了,网上说如果要多个参数就得用Map集合,如果有人知道,请告诉我,谢谢