Mybatis Spirngboot Postmapping使用json传输参数list

本文介绍了在Springboot中使用Mybatis时,如何通过POST请求以JSON格式传递列表参数到Controller。无需使用@RequestParam或@RequestBody,直接用list<自定义类>接收,只要JSON数组中的对象字段与自定义类的属性对应,就能自动映射。示例代码展示了Controller、Service和Mapper的实现方式。

在controller里面写好

import net.sf.json.JSONObject;
	@PostMapping("/insertlist")
	public void insertList(@RequestBody JSONObject params) {
		List<classDefinedByYou> dishes = params.getJSONArray("dish"); 
		//读取key dish的内容
		System.out.print("dishes"+dishes); 

注意这里的classDefinedByYou 是一个需要之前就定义好的类,
可以写在controller里面,
但是 一般这些类型都在 我们的entity 或者dto里面 然后再import进来用

public class Dish {
    private Long id;
    private String name;
    private String description;
    private Long dishTypeId;
    private Double price;
    public Long getId() {
        return id;
    }
       public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }
    public String getDescription() {
        return description;
    }

里面的一些getxx setxxx 可以右键然后 resource -> generate 生成
在这里插入图片描述
使用postman来测试下
在这里插入图片描述
后来我知道了 不用@requestbody也不需要jsonARRAY
可以直接用list<自定义lass>来接收
因为json有两种格式:①对象格式:{‘key1’:obj,‘key2’:obj,‘key3’:obj…}、②数组/集合格式:[obj,obj,obj…]。
所以当我们用postman这样传参 直接就传来个list list里面的内容会和entity里面的类一一映射自动map,所以两边的key要相同
在这里插入图片描述
controller接受处代码

	@PostMapping("/insertlist")
	public void insertList(@RequestBody List<Dish> dishes) {
		// List<Dish> dishes = params.getJSONArray("dish");
		System.out.print("dishes"+dishes); 
		dishService.insertList(dishes);
		
		
	}

接下来总结下:
传多个参数的方法
1 用 @RequestParam
controller:

	
		@PostMapping("/changeprice")
	public void changePrice(@RequestParam("id") Long id, @RequestParam("price") double price) {
		dishService.changePrice(id, price);
	}

service.java:

     void changePrice(long id, double price);

serviceimpl.java

@Override
public void changePrice(long id, double price){
dishMapper.changePrice(id, price);
}

dishmapper.java

public interface dishMapper{
void changePrice(@Param("id")long id, @Param("price")double price);
}

这里在接口处写上param(“名字”)这个名字在sql语句里面就是这个变量了
在开头不需要 定义 parameterType了

	<update id="changePrice" > 
		update TM_DISH set PRICE = #{price} where ID = #{id} </update> 

2 用之前那样的class来传说 放在一个类里面

3放在一个map里面传送 (还没有实践)

### Spring Boot 中整合 MyBatis 实现登录注册功能并使用 Postman 测试 #### 一、项目初始化与依赖引入 为了实现登录和注册功能,首先需要创建一个 Spring Boot 项目,并在 `pom.xml` 文件中引入必要的依赖项。以下是所需的 Maven 配置: ```xml <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MyBatis-Spring Boot Starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.1</version> </dependency> <!-- MySQL Connector --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- Lombok for simplifying code --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> ``` 以上配置包含了 MyBatis 的启动器以及 MySQL 数据库驱动程序[^1]。 --- #### 二、数据库设计 假设有一个名为 `users` 的表用于存储用户的登录信息,其结构如下: | 字段名 | 类型 | 描述 | |-------------|--------------|----------------| | id | INT(AUTO_INCREMENT) | 用户唯一标识符 | | username | VARCHAR(50) | 用户名 | | password | VARCHAR(100) | 密码(加密后) | SQL 创建语句如下: ```sql CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(100) NOT NULL ); ``` --- #### 三、实体类定义 创建一个对应的 Java 实体类 `User.java` 来映射数据库中的 `users` 表。 ```java import lombok.Data; @Data public class User { private Integer id; private String username; private String password; } ``` --- #### 四、Mapper 接口与 XML 映射文件 编写 Mapper 接口及其对应的 XML 映射文件来处理数据访问逻辑。 ##### 1. Mapper 接口 (`UserMapper.java`) ```java import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface UserMapper { /** * 注册新用户 */ int register(User user); /** * 根据用户名查询用户 */ User findByUsername(String username); /** * 查询所有用户(仅作调试用途) */ List<User> findAll(); } ``` ##### 2. XML 映射文件 (`UserMapper.xml`) ```xml <?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.example.mapper.UserMapper"> <!-- 注册用户 --> <insert id="register" parameterType="User"> INSERT INTO users (username, password) VALUES (#{username}, #{password}) </insert> <!-- 根据用户名查询用户 --> <select id="findByUsername" resultType="User" parameterType="String"> SELECT * FROM users WHERE username = #{username} </select> <!-- 查询所有用户 --> <select id="findAll" resultType="User"> SELECT * FROM users </select> </mapper> ``` --- #### 五、服务层逻辑 创建一个 Service 层来封装业务逻辑。 ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserMapper userMapper; public boolean login(String username, String password) { User user = userMapper.findByUsername(username); return user != null && user.getPassword().equals(password); } public void register(User user) { userMapper.register(user); } } ``` --- #### 六、控制器层 通过 Controller 曝露 RESTful API 并支持 Postman 测试。 ```java import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/user") public class UserController { @Autowired private UserService userService; // 登录接口 @PostMapping("/login") public Boolean login(@RequestParam String username, @RequestParam String password) { return userService.login(username, password); } // 注册接口 @PostMapping("/register") public void register(@RequestBody User user) { userService.register(user); } // 获取所有用户(仅作调试用途) @GetMapping("/all") public List<User> getAllUsers() { return userService.findAll(); } } ``` --- #### 七、Postman 测试方法 1. **注册用户** - 请求方式:POST - URL:`http://localhost:8080/api/user/register` - Body(JSON 格式): ```json { "username": "testuser", "password": "123456" } ``` 2. **登录验证** - 请求方式:POST - URL:`http://localhost:8080/api/user/login` - Params: ``` username=testuser&password=123456 ``` 3. **获取所有用户** - 请求方式:GET - URL:`http://localhost:8080/api/user/all` --- #### 八、注意事项 - 在实际生产环境中,密码应经过哈希算法加密后再存入数据库[^3]。 - 使用 HTTPS 协议保护传输过程中敏感数据的安全性。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值