使用注解标注sql语句

sql语句除了可以写在xml文件中,还可以使用注解标注在接口方法上面,如:

  1. /**
  2. * 根据id查询用户
  3. *
  4. * @param id id
  5. * @return 返回一个用户对象
  6. */
  7. @Select("select * from user where id = #{uid}")
  8. User getUserById(@Param("uid") int id);
  1. /**
  2. * 添加一个新用户
  3. *
  4. * @param user 新用户对象
  5. * @return 返回数据发生改变的行数
  6. */
  7. @Insert("insert into user(id, name, pwd) values (#{id}, #{name }, #{pwd})")
  8. int addUser(User user);
  1. /**
  2. * 修改用户信息
  3. *
  4. * @param user 用户新信息
  5. * @return 返回int
  6. */
  7. @Update("update user set `name` = #{name},pwd = #{pwd} where id = #{id}")
  8. int updateUserById(User user);
  1. /**
  2. * 通过id删除用户
  3. *
  4. * @param id 用户id
  5. * @return 返回int
  6. */
  7. @Delete("delete from user where id = #{id}")
  8. int deleteUserById(@Param("id") int id);

@Param注解

@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中。
使用示例:

  1. /**
  2. * 根据id查询用户
  3. *
  4. * @param id id
  5. * @return 返回一个用户对象
  6. */
  7. User getUserById(@Param("uid") int id);
  1. <select id="getUserById" resultType="com.wjh.po.User" parameterType="int">
  2. select *
  3. from user
  4. where id = #{uid}
  5. </select>

在xml映射中,#{}中必须使用@param注解标注的uid而不能用id。

/**
     * 根据id查询用户
     *
     * @param id id
     * @return 返回一个用户对象
     */
    @Select("select * from user where id = #{uid}")
    User getUserById(@Param("uid") int id);

如果使用注解标注sql语句,#{}中也必须使用@param注解标注的uid而不能用id。

@Param注解用于给方法参数起一个名字。以下是总结的使用原则:
在方法只接受一个参数的情况下,可以不使用@Param。
在方法接受多个参数的情况下,建议一定要使用@Param注解给参数命名。
如果参数是 JavaBean , 则不能使用@Param。
不使用@Param注解时,参数只能有一个,并且是Javabean。

xml映射和注解映射的区别

(1)xml映射可以配置一些复杂的sql,而注解映射一般都只能配置一些相对没那么复杂的sql。
(2)在实体类属性和数据库字段的名字不能对应的情况下,xml映射可以通过resultMap结果集来解决,而注解映射是没有可以设定的地方,因此比较难解决这个问题。
(3)从软件开发的角度来说,xml映射相对于注解映射来说,更加易于后期的维护。