Spring4.2整合hibernate5.0.7,进行增删改查,以及hql查询,sql查询,criteria查询

最近学习spring data所有又复习了一下hibernate
开发环境eclipse jdk1.7 Spring4.2.0 +Hibernate5.0.7
1.创建项目,导入jar包
在这里插入图片描述
(其中jaxb的三个jar包和javax.activation-api.jar不是必须的,我的没这三个包运行不了,不知道为什么,我的jdk才1.7啊)
然后右键add to build path
2.编写applicationContext.xml文件

jdbc.properties(数据库的驱动 url 、用户名、密码、连接池等)

jdbc.url=jdbc:mysql://localhost:3306/testhibernate?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
jdbc.driver.class=com.mysql.cj.jdbc.Driver
jdbc.username=root
jdbc.password=200934652qwe

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: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.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop.xsd
	http://www.springframework.org/schema/tx 
	http://www.springframework.org/schema/tx/spring-tx.xsd">

	<!-- 配置读取properties文件的工具类 -->
	<context:property-placeholder location="classpath:jdbc.properties"/> 
	
	<!-- 配置c3p0连接池 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="jdbcUrl" value="${jdbc.url}"/>
		<property name="driverClass" value="${jdbc.driver.class}"/>
		<property name="user" value="${jdbc.username}"/>
		<property name="password" value="${jdbc.password}"/>
	</bean>
	<!-- 配置Hibernate的SeesionFactory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<!-- hibernateProperties属性:配置与hibernate相关的内容,如显示sql语句,开启正向工程 -->
		<property name="hibernateProperties">
			<props>
				<!-- 显示当前执行的sql语句 -->
				<prop key="hibernate.show_sql">true</prop>
				<!-- 开启正向工程 -->
				<prop key="hibernate.hbm2ddl.auto">update</prop>
			</props>
		</property>
		<!-- 扫描实体所在的包 -->
		<property name="packagesToScan">
			<list>
				<value>per.czt.pojo</value>
			</list>
		</property>
	</bean>
	<!-- 配置hibernateTemplate对象 -->
	<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	<!-- 配置Hibernate的事务管理器 -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
	
	<!-- 配置开启注解事务处理 -->
	<tx:annotation-driven transaction-manager="transactionManager"/>
	
	<!-- 配置springIOC的注解扫描 -->
	<context:component-scan base-package="per.czt.dao,per.czt.dao.impl"/>
</beans>

环境搭建完成
3.在数据库中建一个t_users表,编写pojo对象Users
Users.java

package per.czt.pojo;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="t_users")
public class Users implements Serializable{
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="userid")
	private Integer userid;
	@Column(name="username")
	private String username;
	@Column(name="userage")
	private Integer userage;
	public Integer getUserid() {
		return userid;
	}
	public void setUserid(Integer userid) {
		this.userid = userid;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public Integer getUserage() {
		return userage;
	}
	public void setUserage(Integer userage) {
		this.userage = userage;
	}
	public Users() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Users [userid=" + userid + ", username=" + username + ", userage=" + userage + "]";
	}
	

}

4.编写dao层和dao.impl层
UsersDao.java

package per.czt.dao;



import java.util.List;

import per.czt.pojo.Users;


public interface UsersDao {
	
	 void insertUsers(Users users);
	 void deleteUsers(Users users);
	 void updateUsers(Users users);
	 Users selectUsersById(Integer userid);
	 List<Users> selectUsersByName(String name);
	 List<Users> selectUsersByNameUseSQL(String name);
	 List<Users> selectUsersByNameUseCriteria(String name);
}

UsersDaoImpl.java

package per.czt.dao.impl;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.stereotype.Repository;

import per.czt.dao.UsersDao;
import per.czt.pojo.Users;

@Repository
public class UsersDaoImpl implements UsersDao {
	
	@Autowired(required=false)
	private HibernateTemplate hibernateTemplate;
	@Override
	public void insertUsers(Users users) {
		// TODO Auto-generated method stub
		//System.out.println(hibernateTemplate);
		this.hibernateTemplate.save(users);

	}

	@Override
	public void deleteUsers(Users users) {
		// TODO Auto-generated method stub
		this.hibernateTemplate.delete(users);

	}

	@Override
	public void updateUsers(Users users) {
		// TODO Auto-generated method stub
		
		this.hibernateTemplate.update(users);
	}

	@Override
	public Users selectUsersById(Integer userid) {
		// TODO Auto-generated method stub
		return hibernateTemplate.get(Users.class, userid);

	}

	@Override
	public List<Users> selectUsersByName(String name) {
		// TODO Auto-generated method stub
		/*
		 * getCurrentSession:当前session必须有事务边界,且只能处理一个事务,当事务回滚时session自动失效
		 * openSession:每次都会打开一个新的session,假如使用多次获得的是不同的session对象,每次使用完毕后需要手动调用close方法关闭session
		 */
		Session session=hibernateTemplate.getSessionFactory().getCurrentSession();
		Query query=session.createQuery("from Users where username=:name");
		Query queryTemp=query.setString("name", name);
		
		
		return queryTemp.list();
	}

	@Override
	public List<Users> selectUsersByNameUseSQL(String name) {
		// TODO Auto-generated method stub
	    Session session=hibernateTemplate.getSessionFactory().getCurrentSession();
	    Query query=session.createSQLQuery("select * from t_users where username=?").addEntity(Users.class).setString(0, name);
	    
		return query.list();
	}

	@Override
	public List<Users> selectUsersByNameUseCriteria(String name) {
		// TODO Auto-generated method stub
		Session session=hibernateTemplate.getSessionFactory().getCurrentSession();
		Criteria criteria=session.createCriteria(Users.class);
		criteria.add(Restrictions.eq("username", name));
		
		return criteria.list();
	}

}

5.这里就不写service层了,直接junit中测试

package per.czt.test;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

import per.czt.dao.UsersDao;
import per.czt.pojo.Users;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class UserDaoImplTest {
	
	@Autowired
	private UsersDao usersDao;
	
	
	/*@Test
	@Transactional//在测试类中对事务提交方式默认是回滚
	@Rollback(value=false)//取消自动回滚
	public  void testInsertUsers() {
		
		Users users=new Users();
		users.setUserage(10);
		users.setUsername("李四");
		usersDao.insertUsers(users);
		
	}*/
	
	//更新用户
	
	/*@Test
	@Transactional
	@Rollback(value=false)
	public void testUpdateUsers() {
		Users users=new Users();
		users.setUserid(3);
		users.setUserage(20);
		users.setUsername("王五11");
		usersDao.updateUsers(users);
	}
	@Test
	public void testFindUserById() {
		
		Users users=usersDao.selectUsersById(5);
		System.out.println(users);
		
	}
	
	@Test
	@Transactional
	@Rollback(value=false)
	public void deleteUser() {
		Users users=usersDao.selectUsersById(5);
		usersDao.deleteUsers(users);
	}
	@Test
	@Transactional
	public void testSelectUsersByName() {
		String name="李四";
		List<Users> usersList=usersDao.selectUsersByName(name);
		for (Users users:usersList) {
			System.out.println("user_id:"+users.getUserid());
			
		}
	}
	
	@Test
	@Transactional
	public void testSelectUsersByNameUseSQL() {
		List<Users> usersList=usersDao.selectUsersByNameUseSQL("李四");
		for (Users users:usersList) {
			System.out.println("user_id:"+users.getUserid());
			
		}
	}*/
	
	@Test
	@Transactional
	public void testSelectUsersByNameUseCriteria() {
		List<Users> usersList=usersDao.selectUsersByNameUseCriteria("李三");
		for (Users users:usersList) {
			System.out.println("user_id:"+users.getUserid());
			
		}
	}
	
	

	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值