Mybatis SQL注解使用场景

MyBatis注解详解

MyBatis 提供了几种常用的注解,主要用于简化 XML 映射文件的编写,使得 SQL 查询和操作可以直接在 Java 接口中定义。下面列出了主要的注解以及它们在被调用时的写法示例:

1. @Select

@Select 注解用于执行查询操作,并将查询结果映射到指定的 Java 对象或基本数据类型。

@Select("SELECT * FROM users WHERE id = #{id}")
User getUserById(Long id);

2. @Insert

@Insert 注解用于执行插入操作,将 Java 对象的数据插入到数据库中。

@Insert("INSERT INTO users (id, username, password) VALUES (#{id}, #{username}, #{password})")
void insertUser(User user);

3. @Update

@Update 注解用于执行更新操作,更新数据库中已有的数据。

@Update("UPDATE users SET username = #{username}, password = #{password} WHERE id = #{id}")
void updateUser(User user);

4. @Delete

@Delete 注解用于执行删除操作,从数据库中删除指定的数据行。

@Delete("DELETE FROM users WHERE id = #{id}")
void deleteUserById(Long id);

5. @ResultMap

@ResultMap 注解用于引用 XML 映射文件中定义的 resultMap,将查询结果映射到 Java 对象。

@Select("SELECT * FROM users")
@ResultMap("userResultMap")
List<User> getAllUsers();

6. @Results 和 @Result

@Results@Result 注解结合使用,定义查询结果到 Java 对象的映射关系。

@Results({
   
   
    @Result(property = "id", column = "user_id"),
    @Result(property = "username", column = "user_name"),
    @Result(property = "password", column = "user_password")
})
@Select("SELECT user_id, user_name, user_password FROM users WHERE id = #{id}")
User getUserById(Long id);

7. @Param

@Param 注解用于给 SQL 查询或操作方法的参数命名,以便在 SQL 语句中引用。

@Select("SELECT * FROM users WHERE username = #{username} AND password = #{password}")
User 
### MyBatisSQL语句的注释方式 在MyBatis中添加SQL注释需要注意特定的方式以防止干扰到SQL解析过程。对于普通的静态SQL部分,可以采用`<!----->`的形式来书写注释[^2]。 当涉及到动态SQL组件时,情况变得复杂一些。如果是在`<where>`这样的标签内部加入注释,则可能引起MyBatis误解这些注释为查询条件的一部分,进而影响最终生成的SQL逻辑[^3]。 为了确保不会出现问题,在编写涉及`${}`或`#{}`占位符以及动态结构(比如`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<trim>`, `<set>`, `<foreach>`等)的SQL片段时,应避免使用标准的SQL注释语法如`--`或者`/*...*/`,而推荐利用HTML风格的注释标记即`<!-- -->`[^1]。 另外一种场景下,可以通过自定义拦截器(Interceptor)的方式来向每条执行的SQL之前附加统一格式的信息作为注释,这通常用于追踪目的或是满足某些数据库管理需求[^5]。 ```xml <select id="exampleSelect" parameterType="map" resultType="Example"> <!-- 这是一个安全的单行注释 --> SELECT * FROM example_table et </select> ``` ```java public class SqlCommentInterceptor implements Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable { MappedStatement ms = (MappedStatement)invocation.getArgs()[0]; BoundSql boundSql = ms.getBoundSql(invocation.getArgs()[1]); String sql = "<!-- Custom Comment Here --> " + boundSql.getSql(); // 更新后的SQL... } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值