2016-07-24 104 views
0

我正在尝试为select *查询写一个mybatis映射器,它将返回一个ProcessType表中的行列表。每行必须映射到ProcessType pojo。我知道如何将单行映射到POJO,但如何处理Process Type列表?Mybatis映射选择*查询

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

从映射程序中我调用一个proc'XYZ',它向我返回正在查询的ProcessType表的行列表的光标。

回答

0

我对所有问题都不甚了解。小学,我认为这是不需要一个简单的操作过程,我会做一个简单的查询。

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

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> 
+0

是否都行隐含地图吗? mybatis如何知道即将从sql查询中得到的是ProcessType行的列表?它将如何映射ProcessType对象的列表? – RjnshD

+0

它知道是ProccessType的列表,因为它是方法的返回。此外,您通过注释@Results映射属性,您说的属性'ABC'是'ABC'列等等。 MyBatis如何映射?通过反思性的信息,MyBatis知道如何映射它。 – Pau

0

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

List<ProcessType> getProcessTypes(); 

你Mapper.xml应该使用类作为与resultType:

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

或者你可以创建一个结果地图映射您的列到ProcessType属性,但这超出了这个问题的范围。

+0

这种结果映射能够隐式映射ProcessType表的所有行吗? mybatis如何知道即将从sql查询中得到的是ProcessType行的列表?那么它将如何映射每个processType对象? – RjnshD

+0

接口方法签名是告诉它期待一个列表。如果你只返回ProcessType,并且查询返回多个,你会得到一个“预期1结果,但得到N个数或结果”的错误。 – Troncoso

0

如果我正确理解这一点,您是否在结果地图中使用了一个集合?这告诉mybatis期待一个列表。

<collect property="" column=""> 
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") 
1

假设你使用MyBatis的javaModelGenerator,sqlMapGenerator和javaClientGenerator,所有你需要做的就是用你的映射类的.selectByExample()功能和“空”实例供稿对象,如以下:

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

这相当于一个SELECT *