SQL中<>和=的比较



相同点:都表示相等。

不同点

1<>1 用于只取结构不取数据的场合

例如:

select * into table1 from table2 where 1<>1

建成一个与table2 结构相同的表table1,但是不要table2 里的数据。 (除了表结构,其它结构也同理)

1=1用于动态SQL

例如:

query = "select column1,column2 from table1 where 1=1"+condition1+condition2;
当用户选择了查询的字段column1大于str1时:
condition1 ="and column1> 'str1' ";
但是当用户没有选择名称查询时condition1就为空串""这样 
query= "select  column1,column2 from table1 where 1=1 ",
运行也不会出错,相当于没有限制名称条件。但是如果没有1=1的条件,则
query= "select  column1,column2 from table1 where ";由于关键字where后面没有条件语句,运行时就会抛出异常。


### 使用 MyBatis 注解实现动态 SQL WHERE 条件 为了实现包含 `name` `identity` 的动态 SQL WHERE 条件,可以采用 `@SelectProvider` 或者 `<script>` 标签来构建动态查询语句。 对于 `@SelectProvider` 方式的实现如下: 定义一个辅助类用于生成 SQL 语句。此方法允许更灵活地控制 SQL 构建逻辑,并能方便地处理复杂的业务需求[^1]。 ```java class UserSqlBuilder { public static String buildGetUsersByConditions(Map<String, Object> params) { StringBuilder sql = new StringBuilder(); sql.append("SELECT * FROM users "); boolean hasName = params.containsKey("name"); boolean hasIdentity = params.containsKey("identity"); if (hasName || hasIdentity) { sql.append("WHERE "); if (hasName && hasIdentity) { sql.append("name LIKE CONCAT(#{name}, '%') AND identity = #{identity}"); } else if (hasName) { sql.append("name LIKE CONCAT(#{name}, '%')"); } else if (hasIdentity) { sql.append("identity = #{identity}"); } } return sql.toString(); } } ``` 接着,在 Mapper 接口中通过指定上述静态方法作为 SQL 提供器的方法名称来完成映射配置[^3]。 ```java public interface UserMapper { @SelectProvider(type=UserSqlBuilder.class, method="buildGetUsersByConditions") List<User> selectUsersByConditions(@Param("params") Map<String, Object> params); } ``` 另一种方式则是利用 XML 风格的字符串内联脚本标签 `<script>` 实现相同功能,这种方式更加直观易读[^2]。 ```java @Select("<script>" + "SELECT * FROM users " + "<where>" + "<if test='name != null'>AND name LIKE concat(#{name},'%')</if>" + "<if test='identity != null'>AND identity = #{identity}</if>" + "</where>" + "</script>") List<User> findUsersDynamicWhere(@Param("name") String name, @Param("identity") String identity); ``` 这两种方案都可以有效地支持带有多个可选参数的动态查询操作,具体选择取决于项目中的编码习惯个人偏好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值