一、动态sql
动态SQL是指在程序运行期间根据不同的条件动态生成SQL语句。使用动态SQL时,可以根据不同的条件、情况来拼接、调整SQL语句的结构和内容,以实现更加灵活的查询和更新操作。
二、动态SQL适用于以下场景:
1.SQL语句比较复杂,根据不同的参数条件进行拼接;
2.具有更高的安全性要求,需要对参数进行验证和转义处理;
3.执行效率比较低,不需要频繁执行某个SQL语句。
三、书写动态SQL的几种方式:
1、许多动态sql的书写使用条件来动态拼接的
例如: stingbuilder s = "Select * from User where 1=1" 其中1=1是展位条件,对sql的查询没有影响;
if(条件.Contains(Name)){ s.append(“ and Name = 条件[Name] ) }
if(条件.Contains(age)){ s.append(“ and Name = 条件[age] ) }
if(条件.Contains(address)){ s.append(“ and Name = 条件[address] ) }
拼接完整就是:Select * from User where 1=1 and Name = 'XXName' and age= 'XXage' and address= 'XXaddress'和普通的sql拼接没啥两样,执行起来需要每个条件进行判断,效率明显不是很高
2、利用动态类型书写sql,避免每个条件进行判断,根据传参进行动态执行sql,可适配不同参数个数的执行,是另一种多态形式:
1.接口写成bool update(dynamic fields)
2.接口实现类似下图
3.web中调用dynamic fields=new systerm.dynamic.expandoObject()
4.增添动态字段fields.OrganizeID=5,fields.Leader=7然后调用接口即可
3.以上是在C#中书写动态sql的方式;记得在Java中是用xml实现动态sql