如果数据库的 datetime/date 之类的字段并没有和 Java 的 Date 或 Calender 属性进行映射的话,无论你使用 HQL 还是Criteria 都无法实现对日期的 *** 作,因为 HQL 和 Criteria 都是基于对象的查询方式。
基于对象的查询,如下,先做映射
@Entity
@Table(name="PREFERRED_CUSTOMER")
public PCustomer {
@Column(name = "EXPIRATION_DATE")
@Temporal(TemporalType.DATE)
protected java.util.Date expirationDate// only day, month, year
}
可以使用 HQL 这么查询:
List<PCustomer>list = session
.createQuery("from PCustomer pc where pc.expirationDate = :edate")
.setParameter("edate", new java.util.Date(), TemporalType.DATE)
.list()
hibernate 屏蔽了数据库特有的东西,是为了方便移植,但有的老项目较多地使用了数据库特有的东西,如MSSQL 的 T-SQL,这时,就需要使用 hibernate 对 SQL 的原生支持,Session 提供了 createSQLQuery() 这样的方法,此时的 hibernate 就相当于一个简单的 mapper,只提供对象关系映射,当然,一旦你在代码中使用了对 SQL 的原生支持,移植性就不好了。
此种方式可以使用你所说的 MySQL 函数
hibernate.cfg.xml配置需要注意几个地方:<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
上述对应三个配置项,均需要配置mysql对应的值。
一、查询有如下三种方式:
1、采用createQuery()的方式,不用写sql语句,设定map对应的类名,后面可跟where条件语句:
Query query = session.createQuery("from Navigation n where n.parentid=" + parentid)
2、采用<hibernate-mapping>配置文件中配置sql语句的方式:
Query query = session.getNamedQuery("findUserById")
query.setString("userId", userId)
通过setString()方法设置筛选条件;
xml配置示例如下:
<hibernate-mapping>
<query name="findUserById">
<![CDATA[
from User u where u.id = :userId
]]>
</query>
</hibernate-mapping>
3、采用createSQLQuery()的方式,直接写sql语句:
SQLQuery query = session.createSQLQuery("select * from adm_navigation where parentid=" + parentid)
query.addEntity(Navigation.class) //需要设置对应的类
二、insert插入 *** 作:
创建新的数据对象,设置属性之后,调用:
session.save(obj)
tx.commit()方法保存到数据库;
其中session为:Session session = new Configuration().configure().buildSessionFactory()
tx为:Transaction tx = session.beginTransaction()
需要引入包:
import org.hibernate.SessionFactory
import org.hibernate.cfg.Configuration
import org.hibernate.Transaction
三、update更新 *** 作与insert插入 *** 作类似:
首先调用select查询方法,从数据库中读取出对象或对象数组,
然后给对象设置新的属性值,
再调用session.save(obj)和tx.commit()方法保存到数据库中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)