Mybatis @Param注解的作用
来源:互联网 发布:画册设计软件 编辑:程序博客网 时间:2024/06/05 20:39
在刚使用Mybatis的时候,我们经常会犯一个错误。如下
一个秒杀网站的Dao层中的方法
public interface SeckillDao { /** * 根据id查询秒杀的商品信息 * @param seckillId * @return */ @Select({"SELECT * FROM seckill WHERE seckill_id=#{seckillId}"}) Seckill queryById(long seckillId); /** * 根据偏移量查询秒杀商品列表 * @param a * @param b * @return */ @Select({"SELECT * FROM seckill ORDER BY create_time DESC limit #{a},#{b} "}) List<Seckill> queryAll( int offset, int limit);}
这是一个常见的用注解进行开发的DAO层代码,现在我们用Junit来测试一下。
/** * 配置spring和junit整合,这样junit在启动时就会加载spring容器 */@RunWith(SpringJUnit4ClassRunner.class)//告诉junit spring的配置文件@ContextConfiguration({"classpath:spring/spring-dao.xml"})public class SeckillDaoTest { //注入Dao实现类依赖 @Resource private SeckillDao seckillDao; @Test public void queryById() throws Exception { long seckillId=1000; Seckill seckill=seckillDao.queryById(seckillId); System.out.println(seckill.getName()); System.out.println(seckill); } @Test public void queryAll() throws Exception { List<Seckill> seckills=seckillDao.queryAll(0,100); for (Seckill seckill : seckills) { System.out.println(seckill); } }
当我们运行queryId()这个测试方法时,会显示通过测试。
但是我们运行第二个测试方法时,Junit会显示报错。
Parameter ‘a’ not found
参数a没有找到,为什么会报这种错误呢?
因为Java设计时,并没有保存形参的记录
queryAll( int offset, int limit) 在运行期变成---> queryAll(arg0, arg1)
所以当你的方法只有一个参数的时候,你可以随意使用.但是如果你有多个参数的话,你就必须告诉mybatis你的参数分别叫什么名字。这样你传入参数的时候,mybatis才能通过参数名字将数据传入#{}中。
mybatis就提供了@Param这个注解来完成命名
SELECT * FROM seckill ORDER BY create_time DESC limit #{a},#{b} 表示sql语句要接受2个参数,一个参数名是a,一个参数名是b
修改错误代码
/** * 根据偏移量查询秒杀商品列表 * @param a * @param b * @return */ @Select({"SELECT * FROM seckill ORDER BY create_time DESC limit #{a},#{b} "}) List<Seckill> queryAll(@Param("a") int offset, @Param("b") int limit);}
给入参int offset 命名为a , int limit命名为b,然后sql语句SELECT * FROM seckill ORDER BY create_time DESC limit #{a},#{b} 中就可以根据a和b得到参数值了
阅读全文
0 0
- Mybatis @Param注解的作用
- Mybatis的@Param注解的
- Mybatis的@Param注解的用法
- 关于mybatis的@Param注解和参数
- 关于mybatis的@Param注解和参数
- 关于mybatis的@Param注解和参数
- mybatis的@Param注解使用场景
- mybatis的dao中@param注解
- 关于mybatis的@Param注解和参数
- mybatis的dao中@param注解
- MyBatis 中的@Param 注解
- Mybatis @Param注解
- mybatis中@Param的用法和作用
- @Param 注解的使用
- mybatis传多个参数(不使用@param注解情况下),3.4.2版本之后使用#{0}-#{n}引起的参数绑定异常,以及settings属性中useActualParamName的作用。
- mybatis传多个参数(不使用@param注解情况下),3.4.2版本之后使用#{0}-#{n}引起的参数绑定异常,以及settings属性中useActualParamName的作用。
- mybatis @param的解释
- <context-param>的作用
- 面向移动平台的可信执行环境构建方法与应用研究
- 为什么要使用SLF4J而不是Log4J
- spring bean属性及子元素使用总结
- Win10x64安装x64版Oracle数据库12c+x32ODAC用于VS开发软件
- 关于插值的一段测试
- Mybatis @Param注解的作用
- Vue.js响应式原理
- 徐登沿的第二个程序(三位数的输出)(改正版)
- java数组
- 前端之css之单位
- 关于使用讯搜(xunsearch)过程中遇到的坑
- 扩屏双显示器一个清晰,另一个模糊的解决办法
- ASP.NET Core:部署项目到Ubuntu Server
- 用do-while语句编程实现累加功能