一.

没有基础hibernate基础的可以点击这里 ---------->ORM----hibernate入门Demo(无敌详细版)

这里我就不详细介绍了..

二.

hibernat.cfg.xml文件是Hibernate中重要的配置文件,当Spring和Hibernate整合时,由于hibernate.cfg.xml文件中的配置信息可以教育Spring来管理,

所以可以选择是否使用hibernate.cfg.xml文件.

这里将从使用hibernate.cfg.xml文件来讲解Spring和Hibernate的整合

在讲解Spring和Hibernate的整合前,首先需要了解三个重要的对象,具体如下:

1.HibernateTemplate:相当于Hibernate的session可以直接操作PO类,依赖于SessionFactory.

2.LocalSessionFactoryBean:获取SessionFactory.

3.HibernateTransactionManager:Hibernate的事物管理器.

三.实现代码:

整个项目所需jar包:

1.使用hibernate.cfg.xml文件整合Spring.

1).首先建立一张user表:

2).建立User类

public class User {
private Integer id; //用户id
private String username; //用户名称
private String password; //用户密码
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}

3).编写对应的User.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- name代表的是实体类名,table代表的是表名 -->
<class name="com.hck.entity.User" table="user">
<!-- name=id代表的是user类中属性 column=id代表的是table表中的字段 -->
<id name="id" column="id">
<!-- 主键生成策略 -->
<generator class="native"/>
</id>
<!-- 其他属性使用property标签来映射 -->
<property name="username" column="username" type="string"/>
<property name="password" column="password" type="string"/>
</class>
</hibernate-mapping>

4).编写UserDao接口

public interface UserDao {
public void save(User user); //添加用户
public void update(User user); //更新用户
public void delete(User user); //删除用户
public User findById(Integer id); //根据用户id查找用户数据
public List<User> findAll(); //返回所有用户数据
}

5).编写接口实现类:UserDaoImpl

//开启注解模式,这句相当于在spring中
//<bean name="userDao" class="com.hck.dao.impl.UserDaoImpl"/>
@Repository("userDao")
public class UserDaoImpl implements UserDao {
//依赖注入
@Autowired
private HibernateTemplate hibernateTemplate;
//插入操作
public void save(User user) {
hibernateTemplate.save(user);
}
//更新操作
public void update(User user) {
hibernateTemplate.update(user);
}
//删除操作
public void delete(User user) {
hibernateTemplate.delete(user);
}
//根据ID查找用户
public User findById(Integer id) {
return hibernateTemplate.get(User.class, id);
}
//返回所有用户数据
@SuppressWarnings("unchecked")
public List<User> findAll() {
return (List<User>) hibernateTemplate.find("from User");
}
}

6).编写UserService接口

public interface UserService {
public void save(User user); //添加用户
public void update(User user); //更新用户
public void delete(User user); //删除用户
public User findById(Integer id); //根据用户id查找用户数据
public List<User> findAll(); //返回所有用户数据
}

7).编写UserServiceImpl类

//开启注解模式,这句相当于在spring中
//<bean name="userService" class="com.hck.service.impl.UserServiceImpl"/>
@Service("userService")
public class UserServiceImpl implements UserService {
//依赖注入
@Autowired
private UserDao userDao;
//插入数据
public void save(User user) {
userDao.save(user);
}
//更新数据
public void update(User user) {
userDao.update(user);
}
//删除数据
public void delete(User user) {
userDao.delete(user);
}
//根据id查找用户
public User findById(Integer id) {
return userDao.findById(id);
}
//返回所有用户信息
public List<User> findAll() {
return userDao.findAll();
} }

8).编写核心配置文件hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--指定方言 -->
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!-- 数据库驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 连接数据库的url -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/tb_test</property>
<!-- 数据库用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库密码 -->
<property name="hibernate.connection.password">123456</property>
<!-- 其他配置 -->
<!-- 显示sql语句 -->
<property name="show_sql">true</property>
<!-- 配置c3p0 -->
<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
<!-- 用来关联hbm配置文件 -->
<!-- <mapping resource="com/hck/entity/Customer.hbm.xml"/> -->
<mapping resource="com/hck/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>

9).编写Spring的配置文件applicationContext.xml同样放在src目录下

<?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/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 开启注解 -->
<context:annotation-config/>
<!-- 1.配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 加载Hibernate核心配置文件 -->
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>
<!-- 2.配置Hibernate模版 -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<!-- 通过工厂获得Session,操作PO类 -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 事务管理 -->
<!-- #1事务管理器,就是平台,Sprring工具产生,依赖于使用持久方案 -->
<bean id="txManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- #2通知:增强事务 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="save*"/>
<tx:method name="update*"/>
<tx:method name="delete*"/>
<!-- 只读 -->
<tx:method name="find*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- #3 切面:将切入点与通知点关联 -->
<aop:config>
<aop:pointcut expression="execution(* com.hck.service.*.*(..))" id="allDaoMethod" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="allDaoMethod"/>
</aop:config>
<!-- 包扫描 -->
<context:component-scan base-package="com.hck"/>
</beans>

10).编写单元测试类:

public class SpringHibernateTest {
//定义变量
ApplicationContext ac; //读取Spring配置文件,返回上下文对象
UserService userService; //用于接收一个UserServiceImpl实例
@Before
public void setUp(){
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
userService=(UserService) ac.getBean("userService");
}
@Test
public void insert()
{
User user=new User();
user.setUsername("张三");
user.setPassword("123456");
userService.save(user);
}
@Test
public void findById()
{
User user=userService.findById(1);
System.out.println(user);
}
//修改用户名
@Test
public void update()
{
User user=new User();
user.setId(1);
user.setUsername("李四");
user.setPassword("123456");
userService.update(user);
}
//先查找再删除
@Test
public void delete()
{
User user=userService.findById(1);
userService.delete(user);
}
//查找所有
@Test
public void findAll()
{
List<User> list =userService.findAll();
for(User user:list)
{
System.out.println(user);
}
}
}

11)测试结果:

A.插入操作:

控制台打印的sql语句,然后到mysql查看数据是否插入成功;这里我再插入两条信息用户分开显示查询所有用户信息

B.查询操作(查询用户id为1的信息):

C.更新操作,(将id=1的用户名修改为李四)

D.删除操作,(将id=1的用户信息删除)

E.查询所有用户信息

四.总结

以上是完整的带hibernate.cfg.xml文件的Spring跟Hibernate的整合过程,如有疑问可以留言~

通过Spring整合hibernate并进行单元测试(详细)的更多相关文章

  1. spring整合hibernate的详细步骤

    Spring整合hibernate需要整合些什么? 由IOC容器来生成hibernate的sessionFactory. 让hibernate使用spring的声明式事务 整合步骤: 加入hibern ...

  2. Spring整合Hibernate详细步骤

    阅读目录 一.概述 二.整合步骤 回到顶部 一.概述 Spring整合Hibernate有什么好处? 1.由IOC容器来管理Hibernate的SessionFactory 2.让Hibernate使 ...

  3. 【Java EE 学习 53】【Spring学习第五天】【Spring整合Hibernate】【Spring整合Hibernate、Struts2】【问题:整合hibernate之后事务不能回滚】

    一.Spring整合Hibernate 1.如果一个DAO 类继承了HibernateDaoSupport,只需要在spring配置文件中注入SessionFactory就可以了:如果一个DAO类没有 ...

  4. java框架之Spring(4)-Spring整合Hibernate和Struts2

    准备 导包 Struts2 导入 Struts2 zip 包解压目录下 'apps/struts-blank.war' 中所有 jar 包,如下: asm-3.3.jar asm-commons-3. ...

  5. 【SSH】spring 整合 hibernate

    spring-hibernate-1.2.9.jar applicationContext.xml <bean id="sessionFactory" class=" ...

  6. spring整合hibernate

    spring整合hibernate包括三部分:hibernate的配置.hibernate核心对象交给spring管理.事务由AOP控制 好处: 由java代码进行配置,摆脱硬编码,连接数据库等信息更 ...

  7. spring 整合hibernate

    1. Spring 整合 Hibernate 整合什么 ? 1). 有 IOC 容器来管理 Hibernate 的 SessionFactory2). 让 Hibernate 使用上 Spring 的 ...

  8. Spring 整合 Hibernate

    Spring 整合 Hibernate •Spring 支持大多数流行的 ORM 框架, 包括 Hibernate JDO, TopLink, Ibatis 和 JPA. •Spring 对这些 OR ...

  9. 使用Spring整合Hibernate,并实现对数据表的增、删、改、查的功能

    1.1 问题 使用Spring整合Hibernate,并实现资费表的增.删.改.查. 1.2 方案 Spring整合Hibernate的步骤: 1.3 步骤 实现此案例需要按照如下步骤进行. 采用的环 ...

随机推荐

  1. 从Windows系统服务获取活动用户的注册表信息(当前活动用户的sessionId. 当前活动用户的 hUserToken)

    首先,对“活动用户”的定义是,当前拥有桌面的用户.对于Windows XP及其以后的系统,即使是可以多个用户同时登录了,拥有桌面的也仅仅只有一个. 如果系统级服务调用Windows API来获取注册表 ...

  2. 【C#】解决MouseHook捕获鼠标动作,在有些电脑上SetWindowsHookEx失败返回0的问题

    原文:[C#]解决MouseHook捕获鼠标动作,在有些电脑上SetWindowsHookEx失败返回0的问题 最近在debug鼠标位置捕获的功能时发现在其中的一台开发电脑上,SetWindowsHo ...

  3. 枚举与字符串转及RecordSet转XML,JSON

    function AdoToJs(ado: TADOQuery): string; var I, J: Integer; json: string; begin json := '{columns:[ ...

  4. Silverlight DataGrid自适应数据

    silverlight的DataGrid如果改成fill模式 那么当数据超长也不会出现横向滚动条 如果改成按单元格模式 如果数据较短又会出现空白的地方 所以我自己写了个算法 目前实现了以list为数据 ...

  5. spring.net的简单使用(三)创建对象

    这篇主要说对象的创建方式. spring.net提供了三种创建对象的方式,分别是构造器创建,静态工厂创建,实例工厂创建. 多数的情况下,容器会根据对象定义中type属性值去直接调用相应类型的某个构造器 ...

  6. 使用SqlSugar封装的数据层基类

    首先简单封装了个DbContext public class DbContext { #region 属性字段 private static string _connectionString; /// ...

  7. qt获得本地IP的方法,qt中域名解析的方法

    本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境:Ubuntu10.04 + Qt4.7.0 Linux获得本地IP的方法,我尝试了两种 1.用QH ...

  8. [java代码库]-简易计算器(第一种)

    简易计算器(效果如图所示) 第一种方案:采用Javascript+html完成计算器,支持+-*/,结果显示不允许使用input输入域(可以考虑使用<span>) <html> ...

  9. 自动获取淘宝API数据访问的SessionKey

    最近在忙与淘宝做对接的工作,总体感觉淘宝的api文档做的还不错,不仅有沙箱测试环境,而且对于每一个api都可以通过api测试工具生成想要的代码,你完全可以先在测试工具中测试之后再进行代码的编写,这样就 ...

  10. DOM模型-属性操作

    HTML 元素包括标签名和若干个键值对,这个键值对就称为"属性"(attribute)."属性"本身是一个对象(Attr对象),但是实际上,这个对象极少使用.一 ...