Hibernate属性查询:仅获取特定字段

需积分: 3 1 下载量 69 浏览量 更新于2024-07-13 收藏 3.76MB PPT 举报
"属性查询-hibernate查询" 在Java的持久化框架Hibernate中,属性查询是一种常见的操作,用于从数据库中检索特定对象的特定属性,而不是获取整个对象的所有信息。本篇文章将详细探讨如何在Hibernate中进行属性查询。 首先,回顾一下为什么要使用Hibernate。Hibernate作为一个对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互,通过提供一种面向对象的方式来处理数据库操作,从而避免了直接编写SQL语句的复杂性。 当我们想要从数据库中获取对象的特定属性时,可以使用Hibernate查询语言(HQL)。HQL是Hibernate提供的面向对象的查询语言,其语法与SQL相似,但它是针对对象和类的,而不是数据库表。例如,如果我们有一个名为`TblFwxx`的实体类,对应的数据库表是`tbl_FWXX`,我们可以通过以下HQL语句来查询`TblFwxx`对象的`title`和`date`属性: ```java String hql = "select fw.title, fw.date from TblFwxx fw"; ``` 执行这个查询后,结果会返回一个Object数组列表,每个元素包含`title`和`date`两个属性的值。需要注意的是,这里的`fw`是一个别名,用于指代`TblFwxx`类的实例,使得查询更具可读性,`as`关键字在HQL中可以省略。 执行HQL查询通常包括以下四个步骤: 1. 获取`Session`:通过SessionFactory创建Session对象,它是与数据库交互的入口点。 2. 编写HQL语句:根据需求编写相应的HQL查询语句。 3. 创建`Query`:使用`Session`对象的`createQuery()`方法将HQL语句转换为Query对象。 4. 执行查询:调用Query对象的`list()`或`scroll()`方法来执行查询,并获取结果。 在实际编程中,可能会遇到一些常见错误。例如,如果在HQL中使用了数据库表名而不是类名,或者拼写错误了类名,都会导致查询失败。例如,`"from tbl_FWXX"`应该是`"from TblFwxx"`,同时类名是区分大小写的,`TblFwxx`而非`tbl_FWXX`。 属性查询不仅可以单独选择多个属性,还可以与其他查询方式结合,如条件查询、排序、分组等,以满足不同的业务需求。例如,如果你想筛选出`date`在特定日期范围内的记录,可以添加WHERE子句: ```java String hql = "select fw.title, fw.date from TblFwxx fw where fw.date between :startDate and :endDate"; Query query = session.createQuery(hql); query.setParameter("startDate", startDate); query.setParameter("endDate", endDate); List<Object[]> result = query.list(); ``` 这样,我们就可以在Hibernate中高效地执行属性查询,获取所需的数据,而无需关心底层的SQL细节。通过熟练掌握HQL,开发者可以更加专注于业务逻辑,提高开发效率。

我不是要使用只读模式,而是要让它能读能写,我的application.xml文件是这样的 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8&useSSL=false"/> <property name="username" value="root"/> <property name="password" value="123456"/> <property name="defaultReadOnly" value="false"/> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mappingResources"> <list> <value>Teachinfo.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="teacherDao" class="JavaBean.TeacherDaoImpl"> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <context:annotation-config/> <context:component-scan base-package="JavaBean"></context:component-scan> struts.xml文件是这样的

2023-05-25 上传