mybatis 注解和xml的使用

最近一直在用mybatis,由于需要使用到了动态sql,遇到了一些问题,现在来总结一下,经验教训。
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
这是百度出来的一段话,具体讲使用吧,首先将一下,flyway,版本管理工具,个人觉得mybatis migration不如flyway好用,首先在gradle里面下载flyway插件,然后配置参数,语句如下:
这里写图片描述
以后每次只需运行 gradle flyway即可,mybatis migration还需要配置环境变量,否则每次都要进入目录里面才能执行,需要注意的是,table里会默认帮你建一张帮你管理版本的表,如果缺少table这句话,自己又没有建有相关字段的表会报错。mybatis具体的配置可以看,mybatis的官方网站可以理解。
mybatis注解的方式如下:
@Select(“select * from product where productId=#{productId}”)
public Product findProductById(String productId);

@Select("select * from product")
public List<Product> getAllProduct();

@SelectProvider(type = ImplementProduct.class, method="getPaginationProductList")
public List<Product> getPaginationProductList(@Param("filterName") String filterName,                                             @Param("filterValue") String filterValue
@Param("start")int start,@Param("size")int size)

最下面一条语句将要使用动态注解,前两条注解语句可以直接被注入执行。
动态注解,需要新建一个类,在这里我新建了一个ImplementProduct类,里面有一个方法叫getPaginationProductList.具体文件如下:
这里写图片描述
直接return sql语句是不会报错的,但是可能会产生注入攻击等原因吧,别人说不能拼sql,然后我就去找了些,动态注解的资料,找到了第二种方法。
这里写图片描述

注意,多参数的话,一定要用map接受,并且根据编译提示,接收到的字符串一定要是final类型。但在这里遇到了问题,由于mybaitis官网,关于动态注解讲的不够清楚,资料也不够多,没找到limit的拼接方法,直接写会报错,在网上查到了一种方法,但没有解决,网上的的方法是, 添加
StringBuffer sb = new StringBuffer();
sb.append("LIMIT");
sb.append("start,size");
然后在WHERE 语句下面,写上sb.toString。可是我发现拼接并不起作用,于是根据前辈的建议,我该用,xml注解,这种方法比较老,代码更加的少,更加的灵活。
我们只需根据mapper名称,见一个同名的xml文件,在开始加上

这里写图片描述
namepace里面是mapper.java的路径名,xml建在和mapper.java包名一样的包下,路径如下图
这里写图片描述
结尾别忘了加上这里写图片描述
这里面可以写动态sql语句,如下:
这里写图片描述
这里使用了动态拼接,id只需喝mapper.java中语句一样即可,使用xml就只用在java中写方法,不用@SELECT这样的注解语句。where中的语句可以根据条件动态拼接。具体的其他方法可以查阅其他资料。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值