用于select *查询的Mybatis映射

时间:2016-07-24 03:29:12

标签: java mybatis mapper

我试图为select *查询编写一个mybatis映射器,它会返回一个ProcessType表中的行列表。并且每行必须映射到ProcessType pojo。我知道如何将单行映射到POJO,但是如何处理这个过程类型列表呢?

POJO - > 类名:ProcessType 属性:
      字符串ABC;      字符串ID;      字符串日期;

从mapper我称之为proc' XYZ'它返回我要查询的ProcessType表的行列表的游标。

5 个答案:

答案 0 :(得分:1)

我对这个问题并不了解。主要的,我认为这个简单的操作不需要一个程序,我会把它做成一个简单的查询。

所以,如果你有这个实体。

    public class ProcessType {

    String ABC, id, Date;

    public ProcessType(String aBC, String id, String date) {
        ABC = aBC;
        this.id = id;
        Date = date;
    }

    public String getABC() {
        return ABC;
    }

    public void setABC(String aBC) {
        ABC = aBC;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getDate() {
        return Date;
    }

    public void setDate(String date) {
        Date = date;
    }

}

表ProcessType就像这样:

create table PROCESS_TYPE (
   ABC VARCHAR(200),
   ID  VARCHAR(200),
   DATE VARCHAR(200)
);

使用注释的映射器应如下所示:

public interface MapperProcessType {

@Select("select * from PROCESS_TYPE")
@Results({
    @Result(property = "ABC", column = "ABC"),
    @Result(property = "id", column = "ID"),
    @Result(property = "date", column = "DATE")
  })
public List<ProcessType> findAll();

}

另一方面,使用xml它是下一个:

<resultMap id = "result" type = "ProcessType">
   <result property = "ABC" column = "ABC"/>
   <result property = "id" column = "ID"/>
   <result property = "date" column = "DATE"/>
</resultMap>

<select id = "findAll" resultMap = "result">
   SELECT * FROM PROCESS_TYPE
</select>

答案 1 :(得分:1)

您的Mapper.java类只需要返回一个列表:

List<ProcessType> getProcessTypes();

您的Mapper.xml应该使用该类作为resultType:

<select id="getProcessTypes" resultType="path.to.ProcessType">

或者您可以创建结果映射以将列映射到ProcessType属性,但这不属于此问题的范围。

答案 2 :(得分:1)

假设您已经使用了mybatis javaModelGenerator,sqlMapGenerator和javaClientGenerator,您需要做的就是在mapper类中使用.selectByExample()函数并输入一个“空”的Example对象,如下所示:

for (MyTable myTable : myTableMapper.selectByExample(new MyTableExample())) {
    System.out.println("found ID: " + myTable.getId());
}

这相当于select *

答案 3 :(得分:0)

如果我理解这一点你在结果图中使用了一个集合吗?这告诉mybatis期待一个列表。

<collect property="" column="">

答案 4 :(得分:0)

您需要做的就是像这样定义resultMap

<resultMap id="processTypeMap" type="yourpackage.ProcessType">
    <id property="id" column="id_in_db"/>
    <result property="abc"         column="abc_in_db"/>
    <result property="date"     column="date_in_db"/>
</resultMap>

column是表格映射中的关联字段。

然后将resultMap设置为您在上面定义的内容,如下所示:

<select id="getProcessTypes" resultMap="processTypeMap">
    select * from ProcessType
</select>

现在,您的表中的列将相应地进行映射。

我想您想要获得ProcessType的列表,因此在DAO图层中,您必须使用selectList方法。

List<ProcessType> processTypes = sqlSessionTemplate.selectList("getProcessTypes")