mybatis如何在某个对象中映射所有属性,这些属性对应于DB中的字段?

时间:2013-01-22 14:24:29

标签: mybatis

逻辑有点复杂,所以我在这里给出一个例子: 想象一下,我们在一个表中有三个字段,即A,B,C。以下xml映射器将填充Blog类实例中的属性:

<resultMap type="Blog"  id="result">
    <result property="A" column="A"/>
    <result property="B" column="B"/>
    <result property="C" column="C"/>
</resultMap>

问题在于,如果我有一个类User,它包含三个属性,即A,B和C.我如何使用前一个resultMap来填充User类实例中的A,B属性。这意味着我想填写上面的resultMap可以映射到的所有属性。如何解决这个问题呢?非常感谢!

2 个答案:

答案 0 :(得分:1)

你可以尝试这样的事情:

<select id="selectUsers" parameterType="int" resultType="com.someapp.model.User">
    select id             as A, 
           username       as B,   
           hashedPassword as D
    from some_table
    where id = #{id}
</select>

MyBatis自动创建ResultMap以根据名称将列映射到JavaBean属性。如果列名称不完全匹配,则可以在列名称上使用select子句别名以使标签匹配。 A,B和C应该提供吸气剂和固定剂。

答案 1 :(得分:0)

保罗·巴尔加斯是对的。当然,你应该提供合适的getter和setter。如果您想使用对象在每个表中执行基本的crud操作,您应该检查MyBatisGenerator。这将为每个表提供一个类,并为基本操作生成接口和xml实现,包括使用适当配置的强大条件选择。如果您按照教程进行操作,则只能这样写:

SqlSession sqlSession = sqlSessionFactory.openSession();
try {
  UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  List<User> allRecords = mapper.selectByExample(null);//Select All
} finally {
  sqlSession.close();
}

这可以进一步优化(MyBatis插件或与spring集成)但是在生成类之后这将是简单的用法。