基于Springboot+mybatis批量查询,修改,删除;@RequestParam、@RequestBody、@PathVariable、@RequestHeader的适用和区别

一、对于批量操作(基于Springboot+mybatis批量查询,修改,删除)

1. 批量查询:(删除和查询一样,就写一个。)

首先,先找到我们要以哪个作为批量查询的属性,我这里是以term_sn(因为我的表字段太多,所以我没有使用驼峰命名,以后会规范)。然后把他弄成一个集合类,用来接受多个term_sn。
而且我们使用 sql中的<foreach>来做批量的这件事;

1.1 controller:

 @GetMapping("/selectHomePageByTermSnList")
    public AjaxResult selectHomePageByTermSnList(@RequestParam List<String> term_sn_list) {
       //一定要注意@RequestParam和@RequestBody后面这个请求体是Json形式的,前面的一个集合
        List<Package> homePageInfoList = homePagePackageService.selectHomePageByTermSnList(term_sn_list);
        return AjaxResult.success(homePageInfoList);
    }

1.2 serviceImpl

 @Override
    public List<Package> selectHomePageByTermSnList(List<String> term_sn_list) {
        return homePagePackageMapper.selectHomePageByTermSnList(term_sn_list);
    }

1.3 mapper

List<Package> selectHomePageByTermSnList(@Param("term_sn_list") List<String> term_sn_list);

1.4 mapper.xml(重要!!)

   <select id="selectHomePageByTermSnList"  resultMap="HomePageMapperResultMap">
   //id是你的mapper中的方法名,resultMap是在上面有过定义,没有的话是resultType(对应你的实体类)
        SELECT
        t1.term_sn,
        t1.out_term_ship_bom_no,
        t2.out_term_ship_bom_name,
        t2.package_qi_cname,
        t2.package_qi_time,
        t1.packageqi_state
        FROM om_term_info t1
        JOIN term_production_info t2 ON t1.term_sn = t2.term_sn
        WHERE t1.term_sn IN
        <foreach item="term_sn" collection="term_sn_list" open="(" separator="," close=")">
        //item代表你的单个属性,collection你传入的集合,open开始用什么拼接,separator每个元素之间,close结尾。
            #{term_sn} //动态sql
        </foreach>
    </select>

2 批量修改(涉及到简单的redis)

这个就是一个简单的存储,但不过我的sql一直有问题,就在外面插入的时候就循环插入了,会进行修改。

2.1 controller:

    @PostMapping("/updateInspectList")
    public AjaxResult updateInspectList(@RequestBody List<Sub> subList) {
        homePageCService.updateInspectList(subList);
        return AjaxResult.success();
    }

2.2 serviceImpl

	@Override
    @Transactional//加入事务,保证都成功或者都失败
    public void updateInspectList(List<Sub> subList) {
        for (Sub sub : subList) {
            SubVo subVo = new SubVo();
            SubDTO subDTO = new SubDTO();
            BeanUtils.copyProperties(sub, subVo);
            BeanUtils.copyProperties(sub, subDTO);

            // 更新 term_production_info
            homePageCMapper.updateInspectA(subVo);

            // 更新 om_term_info
            subDTO.setDevidqi_state(1);
            subDTO.setTerm_qi_devid_qi_time(sub.getDevid_qi_time());
            homePageCMapper.updateInspectB(subDTO);

            // 将 inspect_list 存入 Redis
            String term_sn = sub.getTerm_sn();
            List<Inspect> configList = sub.getInspect_list();
            stringRedisTemplate.opsForValue().set(term_sn, JSONUtil.toJsonStr(configList));
        }

2.3 mapper:

未使用 <foreach>

  <update id="updateInspectA">
        UPDATE term_production_info
        SET devid_qi_cname = #{devid_qi_cname},
            devid_qi_time = #{devid_qi_time},
            dq_info_file_ids = #{dq_info_file_ids}
        WHERE term_sn = #{term_sn}
    </update>
    <update id="updateInspectB">
        UPDATE om_term_info
        SET term_qi_devid_qi_time = #{term_qi_devid_qi_time},
            devidqi_state = #{devidqi_state}
        WHERE term_sn = #{term_sn}
    </update>

使用 <foreach>

    <update id="updateInspectAList">
        <foreach collection="list" item="item" separator=";">
            UPDATE term_production_info
            SET devid_qi_cname = #{item.devid_qi_cname},
            devid_qi_time = #{item.devid_qi_time},
            dq_info_file_ids = #{item.dq_info_file_ids}
            WHERE term_sn = #{item.term_sn}
        </foreach>
    </update>

    <update id="updateInspectBList">
        <foreach collection="list" item="item" separator=";">
            UPDATE om_term_info
            SET term_qi_devid_qi_time = #{item.term_qi_devid_qi_time},
            devidqi_state = #{item.devidqi_state}
            WHERE term_sn = #{item.term_sn}
        </foreach>
    </update>

二、总结

1. 对于注解@RequestParam和@RequestBody

1.1 @RequestParam

用途: 用于提取 HTTP 请求中的查询参数、表单数据或路径变量。
适用场景:
查询参数: 适用于 GET 请求中 URL 查询字符串的参数。
表单数据: 适用于 POST 请求中提交的表单数据。
路径变量: 适用于 URL 中的路径变量。
示例:

java
@GetMapping("/search")
public String search(@RequestParam String keyword, @RequestParam int page) {
    // 处理请求
}

请求 URL: /search?keyword=spring&page=1

优点:
简单直观。
适用于简单的键值对参数。
限制:

不适合处理复杂的嵌套数据结构或 JSON 对象。

1.2 @RequestBody

用途: 用于将 HTTP 请求体中的内容绑定到方法参数上,通常用于 POST 或 PUT 请求中的 JSON 或 XML 数据。

适用场景:

JSON/XML 数据: 适用于处理复杂的 JSON 或 XML 数据,通常用于 POST 和 PUT 请求。
示例:

@PostMapping("/create")
public ResponseEntity<?> create(@RequestBody User user) {
    // 处理请求
}

请求体:

json
{
    "name": "John Doe",
    "age": 30
}

优点:

适合处理复杂的对象或嵌套数据。
可以直接将请求体的内容映射到对象中。

限制:
需要确保请求体的格式正确,例如 JSON 或 XML。
不适用于简单的键值对参数。

1.3 @PathVariable

用途: 用于从 URL 路径中提取变量。
适用场景:
动态 URL 路径参数。
示例:

@GetMapping("/user/{userId}")
public User getUser(@PathVariable String userId) {
    // 处理请求
}

1.4 @RequestHeader

用途: 用于提取 HTTP 请求头中的值。
适用场景:
需要访问请求头中的信息,如认证令牌。
示例:

@GetMapping("/info")
public String getInfo(@RequestHeader("User-Agent") String userAgent) {
    // 处理请求
}

1.5 @RequestParam vs @RequestBody

在这里插入图片描述

2. 总结

@RequestParam 适用于简单的查询参数、表单数据和路径变量。
@RequestBody 适用于复杂的数据结构,如 JSON 对象或 XML 数据。
@PathVariable 适用于从 URL 路径中提取变量。
@RequestHeader 适用于提取 HTTP 请求头信息。

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文将介绍如何使用Spring BootMyBatis-Plus、Ajax、Layui和MySQL实现员工注册功能。 这个注册功能包含了员工ID自增的实现,让我们看看如何完成这个任务。 1.创建项目和数据库 首先,我们需要创建一个Spring Boot项目,并创建一个名为employee的数据库,其中包含一个名为emp的员工表。 CREATE TABLE `emp` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `age` int(11) NOT NULL, `sex` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; 2.添加依赖 我们需要添加以下依赖项: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> </dependencies> 3.配置数据源 我们需要在application.properties中配置数据源: spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/employee?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=123456 4.配置MyBatis-Plus 在使用MyBatis-Plus之前,我们需要正常配置MyBatis,并至少创建一个Mapper。这里我们以EmployeeMapper为例: @Mapper public interface EmployeeMapper extends BaseMapper<Employee> { } 然后,我们在application.properties中添加以下配置: # mapper扫描 mybatis-plus.mapper-locations=classpath*:/mapper/*.xml # 实体扫描 mybatis-plus.typeAliasesPackage=com.example.demo.entity 5.创建实体类 我们需要创建一个名为Employee的实体类,其属性与emp表中的列相对应。 @Getter @Setter @ToString @NoArgsConstructor @AllArgsConstructor public class Employee { private Long id; private String name; private Integer age; private String sex; } 6.创建控制器和页面 接下来,我们需要创建一个EmployeeController,通过此控制器向客户端提供员工注册页面和保存方法。 @Controller public class EmployeeController { @GetMapping("/employee") public String index() { return "employee/register"; } @PostMapping("/employee/save") @ResponseBody public Long save(@RequestBody Employee employee) { employeeMapper.insert(employee); return employee.getId(); } @Autowired private EmployeeMapper employeeMapper; } 然后,我们在resources/templates目录下创建一个register.html页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Employee Register</title> <link rel="stylesheet" href="//cdn.bootcss.com/layui/2.5.6/css/layui.min.css"> <style> form {margin: 20px auto; width: 500px;} .layui-input-block {margin-right: 0;} </style> </head> <body> <div class="layui-container"> <div class="layui-card layui-anim layui-anim-up"> <div class="layui-card-header">Employee Register</div> <div class="layui-card-body"> <form class="layui-form"> <div class="layui-form-item"> <label class="layui-form-label">Name</label> <div class="layui-input-block"> <input type="text" name="name" required lay-verify="required" placeholder="Name" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">Age</label> <div class="layui-input-block"> <input type="text" name="age" required lay-verify="required|number" placeholder="Age" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">Sex</label> <div class="layui-input-block"> <input type="radio" name="sex" value="male" title="Male" checked> <input type="radio" name="sex" value="female" title="Female"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="save">Register</button> </div> </div> </form> </div> </div> </div> <script src="//cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> <script src="//cdn.bootcss.com/layui/2.5.6/layui.min.js"></script> <script> layui.use(['form', 'layer'], function() { var form = layui.form, layer = layui.layer; form.on('submit(save)', function(data) { $.ajax({ url: '/employee/save', type: 'POST', data: JSON.stringify({ name: data.field.name, age: data.field.age, sex: data.field.sex }), contentType: 'application/json', success: function(id) { layer.msg('Your employee ID is ' + id); } }); return false; }); }); </script> </body> </html> 7.运行 现在,我们可以启动Spring Boot应用程序,并打开浏览器访问http://localhost:8080/employee,创建一个员工记录。您将看到一个注册表单,输入完信息后,单击“注册”按钮。之后,它将通过Ajax将信息发送到控制器,并将Employee对象保存到数据库中。成功后,您将获得新创建的员工ID。 到这里,我们已经成功地使用Spring BootMyBatis-Plus、Ajax、Layui和MySQL实现了员工注册功能,包含了员工ID自增的实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值