代码之家  ›  专栏  ›  技术社区  ›  Stephano

使用Java、Spring和Hibernate将MySQL视图转换为CSV文件

  •  2
  • Stephano  · 技术社区  · 16 年前

    Hibernate对此视图一无所知,但我想这样做:

    public List<Object> getCsvView() {
      return (List<Object>) getHibernateTemplate().find("from myView");
    }
    

    也可以将本机查询[…]映射到 要做到这一点,你需要描述 SQL结果集结构使用 @SqlResultSetMapping[…]。

    现在,我真的对映射结果的结构不感兴趣。我很高兴结构只是一堆物体。

    此外,他们可能随时改变这种看法。我真的不太喜欢我的应用程序,即使知道的看法。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Pascal Thivent    16 年前

    只需在视图上执行本机查询,就会得到 List Object[] 每个列的标量值作为结果。根据文件:

    16.1.1. Scalar queries

    标量(值)列表。

    sess.createSQLQuery("SELECT * FROM CATS").list();
    sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").list();
    

    对象[] )使用标量值 对于CATS表中的每一列。 ResultSetMetadata 推断实际的顺序和类型

    以避免使用 ,或者只是 更明确的是返回什么,一个 addScalar() :

    sess.createSQLQuery("SELECT * FROM CATS")
     .addScalar("ID", Hibernate.LONG)
     .addScalar("NAME", Hibernate.STRING)
     .addScalar("BIRTHDATE", Hibernate.DATE)
    

    • SQL查询字符串
    • 要返回的列和类型

    这将返回对象数组,但是 结果元数据 但我会的 出生日期列分别作为 长的,弦的和短的 只有这三列 使用*可以返回比 三列。

    可以省略类型 所有或部分 标量。

    sess.createSQLQuery("SELECT * FROM CATS")
     .addScalar("ID", Hibernate.LONG)
     .addScalar("NAME")
     .addScalar("BIRTHDATE")
    

    这与 以前,但现在 ResultSetMetaData 用于确定名称和 明确指定。

    怎么了 java.sql.Types 结果元数据 休眠类型由 方言。如果特定类型不是 映射,或不导致 预期类型,可以 registerHibernateType Dialect

    看起来很适合在不了解视图的情况下生成CVS文件:)