dao层:
@SelectProvider(type = XianFengDaoProvider.class, method = “getBomId”)
String getBomId(@Param(“conditionList”) List conditionList);
注解上面的意思是在XianFengDaoProvider这个类里面找到getBomId这个方法。那我们来到这个class文件---->
public String getBomId(List conditionList) {
Condition condition = conditionList.get(0);
String field = condition.getField();
String fieldValue = condition.getValue().toString();
Condition condition1 = conditionList.get(1);
String field2 = condition1.getField();
String fieldValue2 = condition1.getValue().toString();
String bomsort = new SQL() {
{
SELECT("BOMSORT.ID");
FROM("BOMSORT");
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("VerSion=(SELECT MAX(VerSion) FROM BOMSORT WHERE ")
.append(field).append("=").append(String.format("N'%s' ", fieldValue))
.append(" and ")
.append(field2).append("=").append(String.format("N'%s' ", fieldValue2))
.append(")")
.append(" and ")
.append(field).append("=").append(String.format("N'%s' ", fieldValue))
.append(" and ")
.append(field2).append("=").append(String.format("N'%s' ", fieldValue2));
WHERE(stringBuilder.toString());
}
}.toString();
return bomsort;
}
因为业务需求,所以我传入的并不是可以直接拿到的参数,然后用StringBuilder()进行 拼接sql,
可以现在数据库里面把sql写好进行 ,这是我要拼接的sql:
SELECT BOMSORT.ID FROM BOMSORT WHERE VerSion=(SELECT MAX(VerSion) FROM BOMSORT WHERE BomCode=N’MK84160×60(平安)’ AND BomName = N’数控轧辊磨床’) AND BomCode = N’MK84160×60(平安)’ AND BomName = N’数控轧辊磨床’
sqlserver查询时汉字前面要加字母N,里面有两个where,还踩了一个坑。我在Java中使用WHERE()这个方法时,拼接出来的sql中,这个WHERE()自带一个“()”,导致我不得不把里面的一个where放在StringBuilder()里面。
这个方法实际上返回的是string类型的sql,所以最后要toString()