Spring学习4_整合Hibernate进行数据库操作

很多项目中后端通过Spring+hibernate进行数据库操作,这里通过一个简单Demo来模拟其原型。

代码结构

1、Spring配置如下:

<?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"
    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">

   <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/hibernate"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
   </bean>  

   <bean id="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="myDataSource"/>
        <property name="mappingResources">
        <list>
            <value>student.hbm.xml</value>
        </list>
        </property>
        <property name="hibernateProperties">
            <value>
              hibernate.dialect=org.hibernate.dialect.MySQLDialect
            </value>
        </property>
   </bean>

   <bean id = "dao" class="com.dao.UserDaoImpl">
           <property name="sessionFactory" ref="mySessionFactory"></property>
   </bean>

   <bean id="userService" class="com.service.UserService">
            <property name="dao" ref="dao"></property>
   </bean> 

</beans>

其中以下部分声明的是数据源,目前常用的有dbcp或者C3P0的数据源,内层则为数据库连接的各项参数。

   <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/hibernate"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
   </bean>  

以下部分为hibernate的sessionFactory注入配置

   <bean id="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="myDataSource"/>
        <property name="mappingResources">
        <list>
            <value>student.hbm.xml</value>
        </list>
        </property>
        <property name="hibernateProperties">
            <value>
              hibernate.dialect=org.hibernate.dialect.MySQLDialect          hibernate.show_sql=true
            </value>
        </property>
   </bean>

其实现类为Spring自带的org.springframework.orm.hibernate4.LocalSessionFactoryBean ( 这里我用的Spring 4.X版本);

dateSource为上述配置中的数据源;

student.hbm.xml则为hibernate的一个单表映射文件。

hibernateProperties中可以配置hibernate对应的属性,如方言dialect、sql显示show_sql等。

2、Dao层实现

package com.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.vo.Student;

public class UserDaoImpl implements UserDao {
    private SessionFactory sessionFactory;
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    @Override
    public void save(Student student) {
        Session session = sessionFactory.openSession();
        session.getTransaction().begin();
        session.save(student);
        System.out.println("excute save;");
        session.getTransaction().commit();
    }

    @Override
    public void delete() {
        System.out.println("excute delete;");

    }

}

3、将Dao层注入进Service层,实现如下:

package com.service;

import com.dao.UserDao;
import com.vo.Student;

public class UserService {

    private UserDao dao;

    public void setDao(UserDao dao) {
        this.dao = dao;
    }

    public void save(){
        Student student = new Student(2, "test2", 30);
        dao.save(student);
    }
}

简单测试如下:

package com.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.service.UserService;

public class TestAopAnnotation {
    @Test
    public void testAopAnnotation(){

        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

        UserService service = (UserService) context.getBean("userService");
        service.save();
    }
}

测试结果:

时间: 2024-10-12 14:44:49

Spring学习4_整合Hibernate进行数据库操作的相关文章

Spring Security 4 整合Hibernate 实现持久化登录验证(带源码)

上一篇文章:Spring Security 4 整合Hibernate Bcrypt密码加密(带源码) 原文地址:http://websystique.com/spring-security/spring-security-4-remember-me-example-with-hibernate/ [相关已翻译的本系列其他文章,点击分类里面的spring security 4] 本教程将使用Spring Security 4 和hibernate向你展示持久化登录验证. 在持久化登录验证中,应用

Spring Security 4 整合Hibernate Bcrypt密码加密(带源码)

[相关已翻译的本系列其他文章,点击分类里面的spring security 4] [ 翻译by 明明如月 QQ 605283073] 上一篇文章: Spring Security 4 Hibernate整合 注解和xml例子(带源码) 下一篇文章:Spring Security 4 整合Hibernate 实现持久化登录验证(带源码) 原文地址:http://websystique.com/spring-security/spring-security-4-password-encoder-bc

Android学习--------实现增删改查数据库操作以及实现类似微信好友对话管理操作

最近的一个实验用到东西挺多,特地总结一下. 要求功能: 1.第一个页面添加歌曲名和歌手,跳到第二个页面列表显示所有记录,使用sqlite数据库 2.对于第二个页面显示的信息可以进行删除和修改操作,并自动刷新 最后我做的效果: 长按列表项弹出单个管理的菜单,像微信好友对话管理一样. 删除时可以直接删除这一条并在列表中直接显示,更新时弹出对话框更新内容提交后在列表中重新显示. 做此例遇到的困难: 1.菜单获取上下文 2.获取对话框中的内容 3.对话框按钮添加监听事件-----注意包不要导错:impo

Spring笔记④--spring整合hibernate链接数据库

整合hibernate 整合什么? 有ioc容器来管理hibernate的SessionFactory 让hibernate使用上spring的声明式事务 ? 先加入hibernate 驱动包 新建hibernate.cfg.xml 配置hibernate的基本属性 数据源需配置到IOC 容器中,所以在此处不再需要配置数据源 关联的.hbm.xml也在IOC 容器配置SessionFactory实例时进行配置. 配置hibernate的基本属性:方言,sql的显示及格式化,生成数据表的策略以及二

Spring学习-9-Spring与Hibernate整合

Spring与Hibernate整合 步骤 1)引入jar包 连接池/数据库驱动包 Hibernate相关jar包 Spring 核心包和aop包 Spring-orm Spring-tx 2)配置 hibernate.cfg.xml bean.xml 3)搭建 package com.cx.entity; /** * Created by cxspace on 16-8-11. */ public class Dept { private int id; private String name

Spring学习6_Spring整合HibernateTemplate应用

一.实现原理 Spring整合HibernateTemplate应用了模板方法设计,具体如下,以一个Demo为例,具体实现原理如下: 首先定义一个回调/钩子类,如下: package com.dao; import org.hibernate.Session; public interface MyHibernateCallBack { public void doHibernate(Session s); } 在HibernateTemplate调用时通过上述回调来执行具体的数据库操作,如下:

关于hibernate的数据库操作

最近完成系统后台管理,大家都知道后台管理莫过于增删改查的一些工作了,那么这就要hibernate的数据操作了. 下面是具体操作 查 String hql=”from User”; List<User>userList=this.getHibernateTemplate().find(hql); 当然,上面是查找全部.Hibernate一样可以条件查询. String hql=”from User where userId=?”; List<User> userList=this.g

Python框架学习之Flask中的数据库操作

数据库操作在web开发中扮演着一个很重要的角色,网站中很多重要的信息都需要保存到数据库中.如用户名.密码等等其他信息.Django框架是一个基于MVT思想的框架,也就是说他本身就已经封装了Model类,可以在文件中直接继承过来.但是在Flask中,并没有把Model类封装好,需要使用一个扩展包,Flask-SQLAlchemy.它是一个对数据库的抽象,让开发者不用这些编写SQL语句,而是使用其提供的接口去操作数据库,这其中涉及到一个非常重要的思想:ORM什么是ORM呢?下面我们就来详细讲解一下.

Spring学习5-Spring整合JDBC及其事务处理(注解方式)

一.整合的步骤   1.步骤一:首先要获得DataSource连接池(推荐使用B方式): 要对数据库执行任何的JDBC操作,需要有一个Connection.在Spring中,Connection对象是通过DataSource获得的. 有几种方法可以得到DataSource, 其中一种方法是使用Spring提供的轻量级 org.springframework.jdbc.datasource.DriverManagerDataSource,第二种方法是使用 org.apache.commons.db