hibernate常用介面的使用(sessionFactory,session,query,transation,query,criteria的使用)
阿新 • • 發佈:2018-11-27
說明:sessionFactory spring 提供了連線池我們直接從spring 容器中獲取 sessionFactory
程式碼如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- 資料庫的連線資訊,使用的是資料來源的方式jdbc/dbcp/c3p0 --> <!-- 配置資料來源,將資料來源交給spring容器管理 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" /> <property name="jdbcUrl" value="jdbc:sqlserver://localhost:1433; DatabaseName=cjda" /> <property name="user" value="sa" /> <property name="password" value="root" /> <!--初始化時獲取的連線數,取值應在minPoolSize與maxPoolSize之間。Default: 3 --> <property name="initialPoolSize" value="1" /> <!--連線池中保留的最小連線數。 --> <property name="minPoolSize" value="1" /> <!--連線池中保留的最大連線數。Default: 15 --> <property name="maxPoolSize" value="300" /> <!--最大空閒時間,60秒內未使用則連線被丟棄。若為0則永不丟棄。Default: 0 --> <property name="maxIdleTime" value="60" /> <!--當連線池中的連線耗盡的時候c3p0一次同時獲取的連線數。Default: 3 --> <property name="acquireIncrement" value="5" /> <!--每60秒檢查所有連線池中的空閒連線。Default: 0 --> <property name="idleConnectionTestPeriod" value="60" /> </bean> <!-- 註解掃描包 --> <context:component-scan base-package="com.mstf" /> <!-- 配置sessionFactory 工廠 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 引入hibernate的主配置檔案 --> <property name="configLocation" value="classpath:hibernate.cfg.xml"></property> </bean> <!-- 配置事物 --> <!-- 定義一個事物管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 定義一個切面來進行事物管理 --> <tx:advice id="personTransaction" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="get*" read-only="true" propagation="NOT_SUPPORTED" /> <tx:method name="*" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut expression="execution(* com.mstf.service..*.*(..))" id="personPontCut" /> <aop:advisor advice-ref="personTransaction" pointcut-ref="personPontCut" /> </aop:config> <!-- 將業務層交給spring容器來管理 --> <bean id="infoServiceImpl" class="com.mstf.service.impl.InfoServiceImpl"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!--將action交給spring容器來管理 --> <bean id="infoAction" class="com.mstf.action.InfoAction"> <property name="infoService" ref="infoServiceImpl" /> </bean> <!-- 將業務層交給spring容器來管理 --> <bean id="userServiceImpl" class="com.mstf.service.impl.UserServiceImpl"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!--將action交給spring容器來管理 --> <bean id="userAction" class="com.mstf.action.UserAction"> <property name="userService" ref="userServiceImpl" /> </bean> <bean id="resultTypeAction" class="com.mstf.action.ResultTypeAction"> <property name="infoService" ref="infoServiceImpl" /> </bean> <!-- <bean id="testJob" class=""> <property name=""></property> </bean> <bean id="testTriggers" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="testJob"></property> </bean> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="testTriggers"/> </list> </property> </bean> --> </beans>
獲取sessionFactory例項:
ApplicationContext ac = new FileSystemXmlApplicationContext("classpath:applicationContext.xml"); SessionFactory sessionFactory = (SessionFactory) ac.getBean("sessionFactory");; Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction();
現在使用 Query 介面進行常見的查詢
查詢資料庫語句:
USE [cjda] GO /****** Object: Table [dbo].[t_user] Script Date: 10/08/2018 21:47:08 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[t_user]( [user_id] [int] IDENTITY(1,1) NOT NULL, [username] [varchar](50) NOT NULL, [password] [varchar](50) NOT NULL, [age] [int] NOT NULL, [priority] [int] NOT NULL ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO ALTER TABLE [dbo].[t_user] ADD DEFAULT ('0') FOR [priority] GO
查詢方法:
@Test
public void queryTest(){
// 臨時狀態 指的是 物件剛建立 還未放大 session 中去
// save() ,saveOrupdate()
User user = new User();
transaction.begin();
user.setAge(12);
user.setUsername("jiang");
user.setPassword("11111");
// session.save(user);
// 查詢列表
// 1.使用sql語句進行查詢
String sql ="select u.* from t_user u";
Query sqlquery = session.createSQLQuery(sql).addEntity(User.class);
List<User> sqlList = sqlquery.list();
System.out.println("原生sql:查詢出的資料"+sqlList.toString());
// 2. 使用hql語句進行查詢
//String hql = "FORM User";
String hql = "select new User(username,password,age,priority) FROM User";
List<User> listhql = session.createQuery(hql).list();
System.out.println("通過hql查詢出的值:"+listhql.toString());
// 分頁查詢 setFirstResult(start) setMaxResult(end)
List<User> listpage = session.createQuery(hql).setFirstResult(2).setMaxResults(4).list();
System.out.println(listpage.toString());
// 模糊查詢方式 和條件查詢一樣 條件查詢直接將引數放入即可
String hqlmm = "from User where username like :username";
Query query1 = session.createQuery(hqlmm).setString("username", "%"+"jian"+"%");
List<User> list1 = query1.list();
transaction.commit();
session.close();
}