【MyBatis从入门到入土】5 - 使用注解开发

9 使用注解开发

对于一些简单的SQL语句,使用注解可以简化代码
比如现在dao只需要一个接口UserMapping,里面有一个方法getUserById(),通过添加注解就可以实现对数据库的操作

public interface UserMapping {

    @Select("SELECT user_id user, user_name name,user_pwd pwd" +
            " FROM user WHERE user_id = #{id}")
    User getUserById(int id);

}

当然,现在不需要UserMapping.xml,我们需要在mybatis-config.xml中配置一下这个接口的映射器Mapper

    <mappers>
        <mapper class="com.cap.dao.UserMapping" />
    </mappers>

这样的话,就可以实现对数据库的查询了,非常的简洁,不过,在官方文档也提到了:

The annotations are a lot cleaner for simple statements, however, Java Annotations are both limited and messier for more complicated statements. Therefore, if you have to do anything complicated, you’re better off with XML mapped statements.
对于简单的语句,使用注解会更加的简洁,但是,对于稍微复杂一点的语句,注解就显得力不从心,并且使你本就复杂的代码更加混乱。因此,如果你需要做一些复杂的操作,最好使用XML配置文件。

延伸一下:

  1. @Param
    使用注解开发时,利用该注解可以命名参数,比如
@Select("SELECT user_id user, user_name name,user_pwd pwd" +
            " FROM user WHERE user_id = #{id} AND user_name = #{name}")
    User getUserByIdAndName(@Param("id")int id,@Param("name") String name);

如果你不加该注解的话,比如

@Select("SELECT user_id user, user_name name,user_pwd pwd" +
        " FROM user WHERE user_id = #{id} AND user_name = #{name}")
User getUserByIdAndName(int id,String name);

那么会报下面这个错误

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [arg1, arg0, param1, param2]
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [arg1, arg0, param1, param2]

使用该注解的其他注意事项

  • 基本类型、String需要该注解
  • 引用类型的话不需要
  • 只有一个基本类型或者只有一个String类型的话可以省略该注解
  1. #{}${}的区别
  • #{}是预编译处理,MyBatis处理#{}时,将其当做?,并调用PreparedStatementset()方法来赋值,可以防止SQL注入
  • ${}是字符串替换,MyBatis处理${},直接将其把${}内的值替换成SQL语句的一部分,无法防止SQL注入

10 小结一下MyBatis的执行流程

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值