我需要使用以下查询,但我无法使用spring注入,所以我需要在简单的sql中进行查询。
如何创建不使用sessionfactory和任何其他bean的命令
其中注册是我的实体类,包含用户名和密码
public Registration findUserByEmail(String email) {
try {
Session session = sessionFactory.getCurrentSession();
String query = "FROM Registration WHERE email =:email";
Query query2 = session.createSQLQuery(query);
query2.setString("email",email);
return (Registration) query2.uniqueResult();
} catch (Exception e) {
System.out.println(e);
throw new RuntimeException("DAO failed", e);
}
}
答案 0 :(得分:2)
您的示例中没有特定于Spring的代码。 SessionFactory
是一个Hibernate接口,你需要Hibernate来将你的实体映射到数据库或从数据库映射。 Hibernate执行的SQL查询类似于
select * from registration where email = 'email'
*
是映射列和参数中给出的电子邮件。
如果您真的需要摆脱Hibernate,包括所有映射逻辑和会话处理,您可以自己构建映射using plain JDBC以发出SQL查询并将ResultSet
映射到{{1你自己。当然,这比使用像Hibernate这样的ORM要麻烦得多。
答案 1 :(得分:1)
设置
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
在hibernate.cfg.xml
它打印在控制台上执行的每个查询。
答案 2 :(得分:0)
首先,由于您有实体,因此无需进行sql查询。 Hibernate不依赖于Spring来获取SessionFactory,所以你不必考虑“ beans ”
根据您的配置(我假设其基于注释),您可以创建类似于 -
SessionFactory sessionFactory = new AnnotationConfiguration()
.configure("classpath/hibernate.cfg.xml")
.buildSessionFactory();
如果它不是基于注释,那么你可以使用
sessionFactory = new Configuration().configure().buildSessionFactory();
作为旁注 - 如果你仍然愿意解雇sql(虽然不推荐),然后在普通的JDBC中进行。