Mybatis使用Annotation实现动态参数和自定义返回对象查询

最近又复习了JPA和Hibernate,JPA-hibernate到现在支持自定义对象和动态参数查询都很复杂,早应该简化了。

Mybatis变得如此受欢迎,确实有原因的。

查询语句需要:

a.自定义Object,比如ProductWithTypeName

b.支持根据动态参数组装sql语句

在Mybatis里面实现这两个要求就很简单和方便。

我喜欢用注解,不想用xml配置文件,继续简化和少些代码。

public class ProductWithTypeName {

private Integer prodectId;

private String productName;

private  Integer typeId;

private String typeName;

1. 实现方式一

@Select({ "<script>"

  +"select p.id as prodectId, p.name as productName,type.id as typeId,type.name as typeName "

  +"from product p left join product_type type on p.product_type =type.id "

  +"where 1=1"

  +"<if test='pname != null'> AND p.name=#{pname} </if> "

  +"<if test='tname != null'> AND type.name=#{tname} </if>"

  +"</script>"

  })

public List<ProductWithTypeName> queryProductAnnotation(@Param("pname")String

  productName,@Param("tname") String typeName);

根据参数动态构建查询sql也可以写在注解里面,确实方便。

2.实现方式二,增加provider

@SelectProvider(type=MerchantManageDaoSqlProvider.class,method="queryProductProvider")

public List<ProductWithTypeName> queryProduct(String productName,String typeName);

public class MerchantManageDaoSqlProvider {

public String queryProductProvider(String productName,String typeName) {

String sql="select p.id as prodectId, p.name as productName,type.id as typeId,type.name as typeName "

+ "from product p left join product_type type on p.product_type =type.id where 1=1 ";

if(StringUtils.isNotBlank(productName)) {

sql+=" and p.name='"+productName+"'";

}

if(StringUtils.isNotBlank(typeName)) {

sql+=" and type.name='"+typeName+"'";

}

return sql;

}

}

这两种实现方式都很方便。

Mybatis确实实用。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容