iteye_17458
iteye_17458
2009-06-18 13:07
浏览 201
已采纳

HibernateTemplate 怎么用

HibernateTemplate 中的

public List findByNamedQuery(String queryName)
                      throws DataAccessException

queryName 是什么呀?
问题补充

wangjia4202 写道
findByNamedQuery有三个从栽入方法:
findByNamedQuery(String queryName);
findByNamedQuery(String queryName,Object value);
findByNamedQuery(String queryName,Object values);
查看API说的很清楚 :
Execute a named query for persistent instances. A named query is defined in a Hibernate mapping file.
意思说所 :
通过 queryName 查询数据库中的持久对象,而queyName是定义在此对象对应的hibernate的映射文件中的!
定义语法如下:
<query name="定义查询名">
<![定义查询语句]]>
</query>
例1:findByNamedQuery(String queryName);
<query name="all">
<![from User]]>
</query>
findByNamedQuery("all");

例2: findByNamedQuery(String queryName,Object value);
<query name="byname">
<![from User where u.name = ?]]>
</query>

findByNamedQuery("byname","tiger");

例3: findByNamedQuery(String queryName,Object values);
<query name="byNameAndAge">
<![from User where u.name = ? and u.age = ?]]>
</query>
findByNamedQuery("byNameAndAge",new Object[]{"tiger",18});


HibernateTemplate 还有一个方法 :
findByNamedQueryAndNamedParam(String queryName,String[] paramNames, Object[] values)

这是映射文件就要用: 而不是?
如:
<query name="byNameAndAge">
<![from User where u.name = :name and u.age = :age]]>
</query>







把这些<query name="byNameAndAge">
<![from User where u.name = ? and u.age = ?]]>
</query> 写到配置文件里吗?,那样会不会就写死了,缺少灵活性
问题补充
wangjia4202 写道
findByNamedQuery有三个从栽入方法:
findByNamedQuery(String queryName);
findByNamedQuery(String queryName,Object value);
findByNamedQuery(String queryName,Object values);
查看API说的很清楚 :
Execute a named query for persistent instances. A named query is defined in a Hibernate mapping file.
意思说所 :
通过 queryName 查询数据库中的持久对象,而queyName是定义在此对象对应的hibernate的映射文件中的!
定义语法如下:
<query name="定义查询名">
<![定义查询语句]]>
</query>
例1:findByNamedQuery(String queryName);
<query name="all">
<![from User]]>
</query>
findByNamedQuery("all");

例2: findByNamedQuery(String queryName,Object value);
<query name="byname">
<![from User where u.name = ?]]>
</query>

findByNamedQuery("byname","tiger");

例3: findByNamedQuery(String queryName,Object values);
<query name="byNameAndAge">
<![from User where u.name = ? and u.age = ?]]>
</query>
findByNamedQuery("byNameAndAge",new Object[]{"tiger",18});


HibernateTemplate 还有一个方法 :
findByNamedQueryAndNamedParam(String queryName,String[] paramNames, Object[] values)

这是映射文件就要用: 而不是?
如:
<query name="byNameAndAge">
<![from User where u.name = :name and u.age = :age]]>
</query>




在api上只写了个
queryName - the name of a Hibernate query in a mapping file

我怎么才能知道它需要的是<query name="byNameAndAge">
<![from User where u.name = :name and u.age = :age]]>
</query> 这样的配置呢

api里好像很多都这样哎

问题补充
lerous 写道
cheney_love 写道
wangjia4202 写道
findByNamedQuery有三个从栽入方法:
findByNamedQuery(String queryName);
findByNamedQuery(String queryName,Object value);
findByNamedQuery(String queryName,Object values);
查看API说的很清楚 :
Execute a named query for persistent instances. A named query is defined in a Hibernate mapping file.
意思说所 :
通过 queryName 查询数据库中的持久对象,而queyName是定义在此对象对应的hibernate的映射文件中的!
定义语法如下:
<query name="定义查询名">
<![定义查询语句]]>
</query>
例1:findByNamedQuery(String queryName);
<query name="all">
<![from User]]>
</query>
findByNamedQuery("all");

例2: findByNamedQuery(String queryName,Object value);
<query name="byname">
<![from User where u.name = ?]]>
</query>

findByNamedQuery("byname","tiger");

例3: findByNamedQuery(String queryName,Object values);
<query name="byNameAndAge">
<![from User where u.name = ? and u.age = ?]]>
</query>
findByNamedQuery("byNameAndAge",new Object[]{"tiger",18});


HibernateTemplate 还有一个方法 :
findByNamedQueryAndNamedParam(String queryName,String[] paramNames, Object[] values)

这是映射文件就要用: 而不是?
如:
<query name="byNameAndAge">
<![from User where u.name = :name and u.age = :age]]>
</query>







把这些<query name="byNameAndAge">
<![from User where u.name = ? and u.age = ?]]>
</query> 写到配置文件里吗?,那样会不会就写死了,缺少灵活性

写到配置文件中,是增强灵活性吧,不然写到哪,JAVA代码中吗?那样才是缺少灵活性!



我是这个意思:要根据name和age查询的话要写一个<![from User where u.name = ? and u.age = ?]]>
如果有一天我要根据name和sex来查询一个人,岂不是要再改...有没有更灵活点写法


问题补充:
那你就自己写个配置文件,然后自己读取它,然后再让hibernate查询嘛

比如
selectbynameandage=from User where u.name = ? and u.age = ?
selectbynameandsex=from User where u.name = ? and u.sex = ?

那怎么和Hibernate的query标签结合起来?
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • iteye_4873
    iteye_4873 2009-06-18 13:07
    已采纳

    [quote="cheney_love"][quote="wangjia4202"]findByNamedQuery有三个从栽入方法:
    findByNamedQuery(String queryName);
    findByNamedQuery(String queryName,Object value);
    findByNamedQuery(String queryName,Object values);
    查看API说的很清楚 :
    Execute a named query for persistent instances. A named query is defined in a Hibernate mapping file.
    意思说所 :
    通过 queryName 查询数据库中的持久对象,而queyName是定义在此对象对应的hibernate的映射文件中的!
    定义语法如下:

    <![定义查询语句]]>

    例1:findByNamedQuery(String queryName);

    <![from User]]>

    findByNamedQuery("all");

    例2: findByNamedQuery(String queryName,Object value);

    <![from User where u.name = ?]]>

    findByNamedQuery("byname","tiger");

    例3: findByNamedQuery(String queryName,Object values);

    <![from User where u.name = ? and u.age = ?]]>

    findByNamedQuery("byNameAndAge",new Object[]{"tiger",18});

    HibernateTemplate 还有一个方法 :
    findByNamedQueryAndNamedParam(String queryName,String[] paramNames, Object[] values)

    这是映射文件就要用: 而不是?
    如:

    <![from User where u.name = :name and u.age = :age]]>

    [/quote]

    把这些
    <![from User where u.name = ? and u.age = ?]]>
    写到配置文件里吗?,那样会不会就写死了,缺少灵活性[/quote]
    写到配置文件中,是增强灵活性吧,不然写到哪,JAVA代码中吗?那样才是缺少灵活性!

    点赞 评论
  • wangjia4202
    wangjia4202 2009-06-18 13:07

    findByNamedQuery有三个从栽入方法:
    findByNamedQuery(String queryName);
    findByNamedQuery(String queryName,Object value);
    findByNamedQuery(String queryName,Object values);
    查看API说的很清楚 :
    Execute a named query for persistent instances. A named query is defined in a Hibernate mapping file.
    意思说所 :
    通过 queryName 查询数据库中的持久对象,而queyName是定义在此对象对应的hibernate的映射文件中的!
    定义语法如下:

    <![定义查询语句]]>

    例1:findByNamedQuery(String queryName);

    <![from User]]>

    findByNamedQuery("all");

    例2: findByNamedQuery(String queryName,Object value);

    <![from User where u.name = ?]]>

    findByNamedQuery("byname","tiger");

    例3: findByNamedQuery(String queryName,Object values);

    <![from User where u.name = ? and u.age = ?]]>

    findByNamedQuery("byNameAndAge",new Object[]{"tiger",18});

    HibernateTemplate 还有一个方法 :
    findByNamedQueryAndNamedParam(String queryName,String[] paramNames, Object[] values)

    这是映射文件就要用: 而不是?
    如:

    <![from User where u.name = :name and u.age = :age]]>

    点赞 评论
  • wanghaolovezlq
    wanghaolovezlq 2009-06-18 13:17

    要根据name和age查询的话要写一个<![from User where u.name = ? and u.age = ?]]>
    如果有一天我要根据name和sex来查询一个人,岂不是要再改...有没有更灵活点写法

    那你就自己写个配置文件,然后自己读取它,然后再让hibernate查询嘛

    比如
    selectbynameandage=from User where u.name = ? and u.age = ?
    selectbynameandsex=from User where u.name = ? and u.sex = ?

    点赞 评论

相关推荐