mybatis在处理查询时真正做了什么,例如"选择*"

时间:2018-05-31 09:57:37

标签: java sql mybatis

我知道mybatis会将查询结果映射到一个包含在resultMap中的POJO。我想知道,如果我写一个"选择*"查询,但resultMap不包含表中的所有列,mybatis会将查询重写为"选择col1,col2,...",或者仍然执行原始"选择*"查询?如果我只想要几列的结果,我应该写"选择col1,col2,..."首先,或mybatis会为我做这个工作吗?

2 个答案:

答案 0 :(得分:0)

MyBatis是Java和.NET的轻量级持久性框架。这篇博客文章介绍了Java方面。 MyBatis是位于普通JDBC和ORM框架(例如EclipseLink或Hibernate)之间的替代方案。 MyBatis通常使用XML,但它也支持自版本3以来的注释。

@ SELECT-声明 如果你想使用一个参数,@ Select注释非常容易使用。如果您需要多个参数,请使用@Param注释(在更新示例中将对此进行描述)。 您不必将找到的信息映射到SimpleInformationEntity对象,就像使用JDBC ResultSet一样。框架的神奇之处在于此。

final String GET_INFO = “SELECT * FROM simple_information WHERE info_id =#{info_id}”;

@Select(的get_info) public SimpleInformationEntity getSimpleInformationById(int info_id)抛出异常;

答案 1 :(得分:0)

Mybatis不会根据结果图更改查询。

基本上,查询是通过支持动态sql生成所需的预处理直接传递给jdbc的,但是没有任何内容只隐含你编程的处理。

以下是如何处理来自映射器文件或注释的查询文本:

  1. $个变量代替了它们的值
  2. 查询参数替换为?以满足参数
  3. 的jdbc语法
  4. 处理动态sql元素,如ifforeach等,并生成相应的片段