iBATIS sql(XML)中的大于、小于、like等符号写法

本文介绍XML文件中特殊符号的转义方法,包括使用实体引用和CDATA段来确保XML文档的有效性。此外还提供了一种安全地处理SQL语句的方法,通过参数化避免SQL注入风险。

其实就是xml的特殊符号,因为它的配置就是xml,所以可以用下面这种写法转义

    &lt;          < 
    &gt;          >  
    &lt;&gt;   <>
    &amp;      & 
    &apos;      '
    &quot;      "

也可以使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析 
    <![CDATA[ 这里写你的sql ]]>  

like的写法可以用下面的这种
    LIKE #param#||'%'  或 '$param$%'

在使用 MyBatis 或 MyBatis-Plus 开发时,`Mapper` 接口通常配合 XML 文件或注解来定义 SQL 语句。如果你只需要在 `Mapper` 中**一个简单的 `SELECT` 语句**,可以通过以下几种方式实现。 --- ### ✅ 方案一:使用 `@Select` 注解(推荐,简单场景) 直接在 Mapper 接口中使用 `@Select` 注解编 SQL,适合单表查询、简单联查等。 #### 示例代码: ```java import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface UserMapper { /** * 查询所有用户 */ @Select("SELECT id, name, age FROM user") List<User> findAll(); /** * 根据 ID 查询用户 */ @Select("SELECT id, name, age FROM user WHERE id = #{id}") User findById(Long id); /** * 根据姓名模糊查询 */ @Select("SELECT id, name, age FROM user WHERE name LIKE CONCAT('%', #{name}, '%')") List<User> findByNameLike(String name); } ``` #### 对应的实体类: ```java public class User { private Long id; private String name; private Integer age; // getter 和 setter 省略 @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } } ``` > ⚠️ 注意: - 字段名需与数据库一致,或通过别名/`@Results` 映射。 - `#{id}` 是预编译参数,防止 SQL 注入。 - 方法返回类型可以是 `List<T>`、`T`、`int` 等。 --- ### ✅ 方案二:使用 XML 配置文件(灵活,复杂 SQL 推荐) 当 SQL 更复杂(如多表 JOIN、动态条件),建议用 XML。 #### 1. Mapper 接口 ```java @Mapper public interface UserMapper { List<User> findAll(); } ``` #### 2. XML 文件(resources/mapper/UserMapper.xml) ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.mapper.UserMapper"> <resultMap id="UserResultMap" type="com.example.entity.User"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="age" column="age"/> </resultMap> <select id="findAll" resultMap="UserResultMap"> SELECT id, name, age FROM user </select> </mapper> ``` #### 3. 配置 MyBatis 扫描 XML(Spring Boot 中 application.yml) ```yaml mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.example.entity ``` --- ### ✅ 方案三:带参数的简单查询(注解传参) ```java @Select("SELECT id, name, age FROM user WHERE age >= #{minAge}") List<User> findByAgeGreaterThan(int minAge); ``` 支持多个参数: ```java @Select("SELECT id, name, age FROM user WHERE name = #{name} AND age = #{age}") List<User> findByNameAndAge(@Param("name") String name, @Param("age") Integer age); ``` > 🔔 使用 `@Param` 可以为参数命名,否则多个参数无法被正确识别。 --- ### ✅ 方案四:返回特定字段或 VO 如果只想查部分字段,可以返回 Map 或自定义 VO: ```java @Select("SELECT name, age FROM user WHERE age > #{age}") List<Map<String, Object>> findNamesByAge(int age); ``` 或者返回 VO 类: ```java @Select("SELECT name AS userName, age FROM user WHERE age > #{age}") List<UserVO> findUserVOsByAge(int age); ``` --- ### 总结对比 | 方式 | 是否推荐 | 适用场景 | |------|----------|----------| | `@Select` 注解 | ✅ 推荐 | 简单 SQL,快速开发 | | XML 文件 | ✅✅ 强烈推荐 | 复杂 SQL、动态 SQL、多表查询 | | 返回 POJO/VO/Map | ✅ 灵活 | 按需查询字段 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值