Spring+Hibernate整合案例 (HibernateTemplate)
还是案例来说
实体类一个
public class NewUserTable implements java.io.Serializable {
private Integer userId;
private String userName;
private String userSex;
private Integer userAge;
private Date userBr;
.....
}
dao层实现类
import java.io.Serializable;
import java.util.List;
import org.springframework.orm.hibernate4.HibernateTemplate;
import com.ym.dao.IUserInfo;
import com.ym.entity.NewUserTable;
public class DUserImpl extends HibernateTemplate implements IUserInfo{
/**
* 查询
*/
@Override
public List<NewUserTable> queryUserList() {
List<NewUserTable> list=(List<NewUserTable>)super.find("from NewUserTable");
return list;
}
/**
* 添加
*/
@Override
public void addUser(NewUserTable user) {
Serializable num=super.save(user);
System.out.println("addUsers===>>>>"+num);
}
/**
* 修改
*/
@Override
public void updateUser(NewUserTable user) {
super.update(user);
}
/**
* 删除
*/
@Override
public void deleteUser(NewUserTable user) {
super.delete(user);
}
/**
* get获取数据
*/
@Override
public NewUserTable getUserinfo(int usId) {
return super.get(NewUserTable.class,usId);
}
/**
* findByNamedQuery 获取数据
*/
@Override
public List<NewUserTable> querByName(String queryHbmName,String queryPra) {
List<NewUserTable> list=(List<NewUserTable>)super.findByNamedQuery(queryHbmName, queryPra);
return list;
}
/**
* find获取数据
*/
@Override
public List<NewUserTable> queryUserList02(String queryString, Object value) {
List<NewUserTable> list=(List<NewUserTable>)super.find(queryString, value);
return list;
}
/**
* find获取数据
*/
@Override
public List<NewUserTable> queryUserList03(String queryString, Object[] values) {
List<NewUserTable> list=(List<NewUserTable>)super.find(queryString, values);
return list;
}
/**
* findByExample获取数据
*/
@Override
public List<NewUserTable> i_findByExample(NewUserTable user) {
List<NewUserTable> list=super.findByExample(user);
return list;
}
/**
* findByExample获取数据
*
* 相当于条件查询,你只需要调用方法,传入相应的参数,其他的hibernate会帮你做
*
* findByExample():
* 1.不支持主键
* 2.不支持关联
* 3.不支持NULL
*/
@Override
public List<NewUserTable> i_findByExample(NewUserTable user, int firstResult, int maxResults) {
List<NewUserTable> list=super.findByExample(user, firstResult, maxResults);
return list;
}
}
测试类:
import java.util.Date;
import java.util.List;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ym.dao.IUserInfo;
import com.ym.entity.NewUserTable;
public class SHTest {
BeanFactory bf=new ClassPathXmlApplicationContext("applicationContext.xml");
/**
* @Description: TODO(返回集合数据)
*/
@Test
public void test01(){
IUserInfo iUserInfo=bf.getBean("dUser",IUserInfo.class);
List<NewUserTable> list= iUserInfo.queryUserList();
for (NewUserTable ui : list) {
System.out.println(ui.toString());
}
}
/**
* @Description: TODO(增加)
*/
@Test
public void test02(){
IUserInfo iUserInfo=bf.getBean("dUser",IUserInfo.class);
NewUserTable user=new NewUserTable("小白", "男", 20, new Date());
iUserInfo.addUser(user);
}
/**
* @Description: TODO(删除)
*/
@Test
public void test03(){
IUserInfo iUserInfo=bf.getBean("dUser",IUserInfo.class);
NewUserTable user=new NewUserTable();
user.setUserId(4);
iUserInfo.deleteUser(user);
}
/**
* @Description: TODO(修改
*/
@Test
public void test04(){
IUserInfo iUserInfo=bf.getBean("dUser",IUserInfo.class);
NewUserTable user=new NewUserTable("小白", "女", 18, new Date());
user.setUserId(1);
iUserInfo.updateUser(user);
}
/**
* @Description: TODO(get 获取某个对象)
*/
@Test
public void test05(){
IUserInfo iUserInfo=bf.getBean("dUser",IUserInfo.class);
NewUserTable user=iUserInfo.getUserinfo(1);
System.out.println(user.toString());
}
/**
* @Description: TODO(findByNamedQuery 查询)
*/
@Test
public void test06(){
IUserInfo iUserInfo=bf.getBean("dUser",IUserInfo.class);
List<NewUserTable> list=iUserInfo.querByName("queryByName", "小白");
for (NewUserTable ui : list) {
System.out.println(ui.toString());
}
}
/**
* @Description: TODO(查询:find(String queryString , Object value);)
*/
@Test
public void test07(){
IUserInfo iUserInfo=bf.getBean("dUser",IUserInfo.class);
String hql="from NewUserTable u where u.userName=?";
//模糊查询
String hql2="from NewUserTable u where u.userName like ?";
String userName="李%";
List<NewUserTable> list=iUserInfo.queryUserList02(hql2, userName);
for (NewUserTable ui : list) {
System.out.println(ui.toString());
}
}
/**
* @Description: TODO(查询:find(String queryString, Object[] values);)
*/
@Test
public void test08(){
IUserInfo iUserInfo=bf.getBean("dUser",IUserInfo.class);
String hql="from NewUserTable u where u.userName=? and u.userSex=?";
List<NewUserTable> list=iUserInfo.queryUserList03(hql,new Object[]{"李白","男"});
for (NewUserTable ui : list) {
System.out.println(ui.toString());
}
}
/**
* @Description: TODO(查询:findByExample(Object exampleEntity))
*/
@Test
public void test09(){
IUserInfo iUserInfo=bf.getBean("dUser",IUserInfo.class);
NewUserTable user=new NewUserTable();
user.setUserName("李白");
user.setUserSex("女");
List<NewUserTable> list=iUserInfo.i_findByExample(user);
for (NewUserTable ui : list) {
System.out.println(ui.toString());
}
}
/**
*
* @Description: TODO(findByExample(Object exampleEntity, int firstResult, int maxResults))
*/
@Test
public void test10(){
IUserInfo iUserInfo=bf.getBean("dUser",IUserInfo.class);
NewUserTable user=new NewUserTable();
user.setUserName("李白");
user.setUserSex("女");
List<NewUserTable> list=iUserInfo.i_findByExample(user,0, 2);
//这里就相当于:select * from userTable where userName=? and userSex=? limit 0,2
for (NewUserTable ui : list) {
System.out.println(ui.toString());
}
}
}
applicationContext.xml
<?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:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/hiberdb?userUnicode=true
&&characterEncoding=utf-8&&serverTimezone=GMT%2B8">
</property>
<property name="username" value="root"></property>
<property name="password" value="154355"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<!-- 显示sql语句 -->
<prop key="hibernate.show_sql">true</prop>
<!-- 格式化sql语句 -->
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
<!--注意这里写法和之前的hibernate入门中改变了一下-->
<property name="mappingResources">
<list>
<value>com/ym/entity/NewUserTable.hbm.xml</value></list>
</property>
</bean>
<!-- 引入事物管理 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<!-- 事物管理的依赖注入 (DI) -->
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 配置 事务的传播特性 和隔离级别: 切面(AOP) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager" >
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" isolation="READ_COMMITTED"/>
<tx:method name="update*" propagation="REQUIRED" isolation="READ_COMMITTED"/>
<tx:method name="delete*" propagation="REQUIRED" isolation="READ_COMMITTED"/>
<tx:method name="query*" propagation="REQUIRED" isolation="READ_COMMITTED"/>
<tx:method name="get*" propagation="REQUIRED" isolation="READ_COMMITTED"/>
<tx:method name="i_*" propagation="REQUIRED" isolation="READ_COMMITTED"/>
</tx:attributes>
</tx:advice>
<!-- 引入切面通知 -->
<aop:config>
<aop:pointcut expression="execution(* com.ym.dao.*.*(..))" id="pc"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
</aop:config>
<!-- 创建 dao类对象 -->
<bean id="dUser" class="com.ym.dao.impl.DUserImpl">
<!-- 将HibernateTemplate 注入实现类中 -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 创建 NewUserTable对象 -->
<bean name="newUser" class="com.ym.entity.NewUserTable"></bean>
</beans>