springboot+mybatis的一个sql交互问题

假如现在有三个类对应写在同一个表里面:cat dog pig(三个类对应的字段略有不同)
查询时根据表里的一个字段type做划分(即type=cat or type=dog or type=pig)
目前是准备了三个mapper去获取对应的数据
queryCat(), queryDog(), quertPig()

目前设想在构建sql语句进行查询
1、queryCat(String type)
对应sql: select ... from ... where type=#{type}
2、queryCat()
对应sql: select ... from ... where type='cat' // 类似于在sql里写死那个type来查询

1、请问上面两种写法,哪个好些?有没有刚好的写法?
2、有无可能把三个查询mapper合成一个?
我之前想过把三个品种的查询全部写在一个sql里(用if标签结合type字段来做),但由于有部分字段不同,且返回类型不太好选择,所以没有这么做。


回答:

可以这样试一试

public interface AnimalMapper {

List<Animal> queryByType(String type);

}

public interface AnimalTypeConst {

String CAT = "cat";

String DOG = "dog";

String PIG = "pig";

}

public interface AnimalService {

List<Animal> getAllCat();

List<Animal> getAllDog();

List<Animal> getAllPig();

}

public class AnimalServiceImpl implements AnimalService {

private AnimalMapper animalMapper = /* Spring的话就注解 */;

public List<Animal> getAllCat() { return animalMapper.queryByType(AnimalTypeConst.CAT)}

public List<Animal> getAllDog() { return animalMapper.queryByType(AnimalTypeConst.DOG)}

public List<Animal> getAllPig() { return animalMapper.queryByType(AnimalTypeConst.PIG)}

}


回答:

一点参考的思路

    public interface Animal{}

public class Cat implements Animal{}

public class Dog implements Animal{}

public class Pig implements Animal{}

List<Animal> queryAnimal(String animalType) {

return animalMapper.queryAnimal(animalType);

}


animalMapper

    select ... from ... 

<where>

<if test="type!=null & type!=''">

type=#{type}

</if>

</where>

以上是 springboot+mybatis的一个sql交互问题 的全部内容, 来源链接: utcz.com/p/944349.html

回到顶部