美文网首页
Mybatis使用Annotation实现动态参数和自定义返回对

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

作者: 小风侠_5b7e | 来源:发表于2019-08-07 16:25 被阅读0次

最近又复习了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确实实用。

相关文章

网友评论

      本文标题:Mybatis使用Annotation实现动态参数和自定义返回对

      本文链接:https://www.haomeiwen.com/subject/yhqadctx.html