何种情况下sql语句参数化

       可能很多人遇到过这种情况,自己辛辛苦苦做的网站被黑客轻而易举的通过Sql注入后所攻击,导致整个网站甚至整个服务器的瘫痪。针对这种情况,我们对Sql语句参数化,这样就可以有效的防止Sql注入。

据我所知,Sql语句参数化主要是针对写Sql语句时传入的字符串变量进行参数化。为什么要说是字符串变量呢?因为我们写执行Sql语句的方法时,对于传入的变量的类型都有定义,比如在数据表DT_Catagory中的CatagoryId字段类型是int类型,我们在定义一个通过CatagoryId来调取该条记录的详细信息的方法时,会写成这样:

public int DataTable GetCatagoryInfoById(int categoryId)

{……

}

当我们调用该方法时,需要传入的变量必须是int类型的变量,该方法才能执行,否则,程序会报错,从而执行不了该方法内的代码,也就执行不了里边的Sql语句。

毕竟在写Sql语句时对其进行参数远远没有不进行参数化那样简单。因此能不进行参数化就可以适当的偷个懒J。比如上边的例子里我们在写Sql语句时就可以省去参数化,可以把里边的Sql语句写成这样:

String sql=”select * from DT_Catagory where CategoryId = ” + categoryId;

上边这个只是针对传入的变量是int类型时举了一个简单的例子,对于其他非字符串类型的,比如说bool,自定义枚举类型等等。都可以这样的来偷懒。

以上是我的一些观点,有欠缺的地方,欢迎大家一起来探讨

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
<h3>回答1:</h3><br/>Mybatis-plus是Mybatis的增强工具,它提供了许多方便的功能,方便开发人员进行Mybatis的使用。在实际开发过程中,我们经常需要打印SQL语句以及填充参数,以便于我们更好地调试和优化SQL语句。 在Mybatis-plus中,打印SQL语句以及填充参数非常简单。我们只需要在配置文件中添加一个配置,就可以实现打印SQL语句和填充参数的功能。具体步骤如下: 1.在配置文件中添加配置项 在Mybatis的配置文件中,添加如下配置项: ```xml <!-- 打印SQL语句 --> <setting name="logImpl" value="STDOUT_LOGGING"/> <!-- 显示SQL语句中的参数 --> <setting name="jdbcTypeForNull" value="NULL"/> <setting name="logLevel" value="DEBUG"/> ``` 2.在类中使用注解 在我们需要打印SQL语句的Mapper中,使用注解@Mapper以及@Log4j2即可。 ```java @Mapper @Log4j2 public interface UserMapper extends BaseMapper<User> { @Select("select * from user WHERE name = #{name}") User queryUserByName(String name); } ``` 这样,当我们使用queryUserByName方法的时候,就会在控制台上打印出SQL语句以及填充的参数。 Mybatis-plus是一个非常方便的工具,使用起来也非常简单,只需要简单的配置和使用注解即可实现打印SQL语句以及填充参数的功能,方便我们进行SQL优化和调试。 <h3>回答2:</h3><br/>Mybatisplus是一个基于Mybatis框架之上的底层扩展库,提供了很多便于开发的功能,如自动生成代码、分页插件、乐观锁、多租户插件等。同时,它也提供了打印SQL语句和填充参数的功能。下面就针对这两个功能进行讲解。 一、打印SQL语句 Mybatisplus提供了打印SQL语句的功能,可以在SQL执行前和执行后打印SQL语句,方便开发人员查看和排错。使用方式如下: 1.在配置文件中设置打印SQL语句的日志级别为DEBUG: ``` logging.level.com.baomidou.mybatisplus.core.executor=DEBUG ``` 2.对于需要打印SQL语句的Mapper方法,可以在方法上加上注解@Interceptor(ExecuteSqlInterceptor.class): ``` @Interceptor(ExecuteSqlInterceptor.class) List<User> selectUserList(); ``` 3.执行SQL语句后,在控制台中可以看到打印出来的SQL语句,例如: ``` DEBUG 9307 --- [nio-8080-exec-1] c.b.m.c.e.MPExecuteSqlInterceptor : ==> Preparing: SELECT * FROM user WHERE age > ? DEBUG 9307 --- [nio-8080-exec-1] c.b.m.c.e.MPExecuteSqlInterceptor : ==> Parameters: 18(Integer) DEBUG 9307 --- [nio-8080-exec-1] c.b.m.c.e.MPExecuteSqlInterceptor : <== Total: 2 ``` 二、填充参数 Mybatisplus还提供了填充参数的功能,可以在执行SQL语句前和执行后对参数进行处理。使用方式如下: 1.创建一个继承了HandlerInterceptor接口的类: ``` public class MybatisParamHandlerInterceptor implements HandlerInterceptor { @Override public Object intercept(Invocation invocation) throws Throwable { // 获取参数 Object[] args = invocation.getArgs(); // 处理参数 // ... // 执行方法 Object result = invocation.proceed(); // 处理返回值 // ... return result; } } ``` 2.在配置文件中配置自定义的参数处理器: ``` mybatis-plus: configuration: # 自定义参数拦截器 handler: MybatisParamHandlerInterceptor: com.example.handler.MybatisParamHandlerInterceptor ``` 3.对于需要自定义处理参数的Mapper方法,可以在方法上加上注解@Interceptor(MybatisParamHandlerInterceptor.class ): ``` @Interceptor(MybatisParamHandlerInterceptor.class ) List<User> selectUserList(int age, String name); ``` 4.执行SQL语句前,Mybatisplus会调用参数处理器中的intercept方法,可以进行参数处理。例如: ``` @Override public Object intercept(Invocation invocation) throws Throwable { // 获取参数 Object[] args = invocation.getArgs(); // 处理参数 args[0] = args[0] + 1; // 执行方法 Object result = invocation.proceed(); // 处理返回值 // ... return result; } ``` 通过以上方法,我们可以轻松地实现打印SQL语句和填充参数的功能,提高开发效率和调试效率。 <h3>回答3:</h3><br/>MybatisPlus 是一个基于 Mybatis 的增强工具包,为了在开发过程中更加方便的进行 SQL 语句的构建和执行,它提供了很多方便的功能。其中有一项非常实用的功能就是可以打印 SQL 语句并填充参数。下面我就来详细介绍一下如何使用 MybatisPlus 打印 SQL 语句并填充参数。 1. 配置 mybatis-plus 配置文件 在 mybatis-plus 配置文件中,我们需要打开 ShowSql 开关和 FormatSql 开关。如下: ``` # 显示sql mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl sql-injector: com.baomidou.mybatisplus.core.injector.LogicSqlInjector tenant-handler: xxx.TenantHandler db-config: logic-delete-field: DELETED query-strategy: # 查询全部(-1),单条(0),分页(1) id-type: uuid field-strategy: # 必须写,否则无法生效,开启下划线转驼峰命名 - com.baomidou.mybatisplus.generator.config.po.TableField type-enums-package: - com.xxx block-attack-enable: false table-prefix: - xxx_ schema: - cxdatabase - aadatabase - xxxdatabase Capital-Mode: false show-sql: true format-sql: true ``` 2. 查看打印日志 开启后直接查看控制台日志即可看到 SQL 语句和参数。 ``` 2021-03-29 19:42:06,144 INFO [http-nio-8080-exec-1] o.m.p.mapper.BaseMapper.selectList(BaseMapper.java:128) - ==> Preparing: SELECT id, name FROM user WHERE age > ? OR age < ? ORDER BY age DESC LIMIT ? 2021-03-29 19:42:06,149 INFO [http-nio-8080-exec-1] o.m.p.mapper.BaseMapper.selectList(BaseMapper.java:128) - ==> Parameters: 22(Integer), 35(Integer), 10(Integer) ``` 这里就可以看到完整的 SQL 语句和填充的参数了。 总之,使用 MybatisPlus 打印 SQL 语句并填充参数是非常实用的功能,能够在开发过程中方便我们调试 SQL 语句,定位问题,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tangjunping

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值