MyBatis动态传入表名查询数据

本文介绍了一个使用SpringMVC框架实现的数据查询与更新的案例,通过具体代码展示了如何从HTTP请求中获取参数,查询数据库并更新数据状态。同时,文章还涉及了SQL动态查询语句的编写。
@RequestMapping("/searchSjgl.htm")
    @ResponseBody
    public List<IdSjgl> searchSjgl(HttpServletRequest request)throws UnsupportedEncodingException{
        List<IdSjgl> list=sjglService.findAllSjgl();//查询所有数据
        String stdate=request.getParameter("stdate").trim();//获取前端传来的ID值
        for(IdSjgl sjgl:list){
            Map<String,String> map1 = new HashMap<String,String>();
            map1.put("tableName", sjgl.getSjkb());
//          List<IdId_> shList=sjglService.findSjTest(map1,map2);
            List<IdId_> shList=sjglService.findSj(map1);
            //List<IdId_> shList=sjglService.findSj(sjgl.getSjkb());
            if(shList.size()==0||shList.equals(null)){
                sjgl.setSfwk("无数据");
                sjgl.setSfsh("未审核");
                sjglService.update(sjgl);
//              for(IdId_ id:shList){
//                  if(id.getSh()==0){
//                  }
//              }
            }else{
                for(IdId_ id:shList){
                    if(id.getStdate().equals(stdate)){
                        sjgl.setSfwk("有数据");
                        if(id.getSh()==1){
                            sjgl.setSfsh("已审核");
                        }
                    }else{
                        sjgl.setSfwk("无数据");
                        sjgl.setSfsh("未审核");           
                    }
                    sjglService.update(sjgl);
                }
            }  
        }
        return sjglService.findAllSjgl();
    }
     
     
<select id="findSj" resultMap="Idresult" statementType="STATEMENT" >
        select sh,stdate from ${tableName}
</select>

转载于:https://my.oschina.net/CarrieLiu/blog/1554502

### MyBatis 动态生成查询语句示例 在 MyBatis 中,动态生成查询语句可以通过 `${}` 占位符实现。`${}` 的作用是直接将传入的参数值替换到 SQL 语句中,而不像 `#{}[]` 那样进行预编译处理。以下是具体实现方式: #### 示例代码 ```xml <!-- 使用 Mapper XML 文件动态生成 --> <select id="selectByTableName" resultType="com.example.User"> SELECT * FROM ${tableName} WHERE id = #{id} </select> ``` 在此示例中,`${tableName}` 将被直接替换为传入字符串[^1]。而 `#{id}` 则会通过预编译的方式绑定参数,从而避免 SQL 注入风险。 如果使用注解方式进行开发,可以参考以下代码: ```java // 使用注解方式动态生成 @Select("SELECT * FROM ${tableName} WHERE id = #{id}") List<User> selectByTableName(@Param("tableName") String tableName, @Param("id") int id); ``` 此代码片段中,`${tableName}` 同样会被直接替换为传入,而 `#{id}` 则通过预编译绑定参数[^3]。 #### 注意事项 1. **SQL 注入风险**:由于 `${}` 不会对传入的参数进行转义或预编译,因此需要确保传入参数是可信的,避免潜在的 SQL 注入攻击[^1]。 2. **statementType 属性**:如果需要动态生成,建议将 `statementType` 设置为 `STATEMENT`,以避免预编译阶段对 SQL 的解析问题[^3]。 3. **字段动态生成**:除了外,字段也可以通过 `${}` 进行动态替换,但同样需要注意安全性问题。 #### 完整示例 假设有一个需求,需要根据不同的用户角色查询不同中的数据: ```xml <!-- Mapper XML 文件 --> <select id="selectUserByRole" resultType="com.example.User"> SELECT * FROM ${role}_users WHERE status = #{status} </select> ``` 在 Java 代码中调用时: ```java String role = "admin"; // 或其他角色 int status = 1; List<User> users = mapper.selectUserByRole(role, status); ``` 上述代码中,`role` 参数将被替换为实际的角色称,例如 `admin_users`[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值