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字段来做),但由于有部分字段不同,且返回类型不太好选择,所以没有这么做。

阅读 1.5k
2 个回答

可以这样试一试

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>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题