---------------------siwuxie095

HibernateTemplate 实现 CRUD 操作

1、在 SSH 框架中使用 HibernateTemplate 模板类实现 CRUD 操作

2、HibernateTemplate 是 Spring 对 Hibernate 的封装

3、使用 HibernateTemplate 时,必须进行事务管理,否则将报错

建议:使用基于注解方式的声明式事务管理

4、测试

(1)编写一个实体类

User.java:

package com.siwuxie095.entity;

public class User {

private Integer uid;

private String username;

private String address;

public Integer getUid() {

return uid;

}

public void setUid(Integer uid) {

this.uid = uid;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

@Override

public String toString() {

return "User [uid=" + uid + ", username=" + username +

", address=" + address + "]";

}

}

(2)编写一个 Action 类

UserAction.java:

package com.siwuxie095.action;

import com.opensymphony.xwork2.ActionSupport;

import com.siwuxie095.service.UserService;

public class UserAction extends ActionSupport {

private UserService userService;

public void setUserService(UserService userService) {

this.userService = userService;

}

@Override

public String execute() throws Exception {

//userService.add();

userService.find();

return "none";

}

}

(3)编写一个 Service 类

UserService.java:

package com.siwuxie095.service;

import org.springframework.transaction.annotation.Transactional;

import com.siwuxie095.dao.UserDao;

/**

* 在 Service 层进行声明式事务管理

* 即加上注解 @Transactional

*

* 使用 HibernateTemplate 实现 CRUD 操作,

* 一定要加上事务管理,否则将报错

*/

@Transactional

public class UserService {

private UserDao userDao;

public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}

public void add() {

userDao.add();

}

public void find() {

userDao.find();

}

}

(4)编写一个 Dao 接口和其实现类:

UserDao.java:

package com.siwuxie095.dao;

public interface UserDao {

public void add();

public void find();

}

UserDaoImpl.java:

package com.siwuxie095.dao.impl;

import java.util.List;

import org.springframework.orm.hibernate5.HibernateTemplate;

import com.siwuxie095.dao.UserDao;

import com.siwuxie095.entity.User;

public class UserDaoImpl implements UserDao {

private HibernateTemplate hibernateTemplate;

public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {

this.hibernateTemplate = hibernateTemplate;

}

@Override

public void add() {

User user=new User();

user.setUsername("小白");

user.setAddress("中国");

hibernateTemplate.save(user);

/*

* HibernateTemplate 还有 update()、delete() 方法,

* 都是直接传入对象即可

*/

}

@Override

public void find() {

// 根据 id 查询

User user=hibernateTemplate.get(User.class, 1);

System.out.println(user);

System.out.println("------------------");

// 查询所有

List<User> list=(List<User>) hibernateTemplate.find("from User");

for (User user1 : list) {

System.out.println(user1);

}

System.out.println("------------------");

// 根据条件查询

List<User> listx=(List<User>) hibernateTemplate.find("from User where username=?", "小黑");

for (User user2 : listx) {

System.out.println(user2);

}

/*

* HibernateTemplate 的 findByCriteria() 方法可以做到分页查询

*

* find() 方法则无法做到

*/

}

}

(5)在 Hibernate 映射配置文件中进行配置

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>

<class name="com.siwuxie095.entity.User" table="t_user">

<id name="uid" column="uid">

<generator class="native"></generator>

</id>

<property name="username" column="username"></property>

<property name="address" column="address"></property>

</class>

</hibernate-mapping>

(6)在 Hibernate 核心配置文件中进行配置

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.show_sql">true</property>

<property name="hibernate.format_sql">true</property>

<!-- 注意:只有配置 hibernate.hbm2ddl.auto 为 update,才能自动创建表 -->

<property name="hibernate.hbm2ddl.auto">update</property>

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!--

原来的配置:

<property name="hibernate.current_session_context_class">thread</property>

在 SSH 框架整合中会报错,要么将这个配置删了,要么改成如下配置

参考链接:http://blog.csdn.net/maoyuanming0806/article/details/61417995

-->

<property name="hibernate.current_session_context_class">

org.springframework.orm.hibernate5.SpringSessionContext

</property>

<mapping resource="com/siwuxie095/entity/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>

(7)在 Spring 核心配置文件中进行配置

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:aop="http://www.springframework.org/schema/aop"

xmlns:context="http://www.springframework.org/schema/context"

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.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd">

<!-- (1) -->

<!-- 配置 C3P0 连接池 -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<property name="driverClass" value="com.mysql.jdbc.Driver"/>

<!--

jdbc:mysql:///test_db 是 jdbc:mysql://localhost:3306/test_db 的简写

-->

<property name="jdbcUrl" value="jdbc:mysql:///test_db"/>

<property name="user" value="root"/>

<property name="password" value="8888"/>

</bean>

<!-- SessionFactory 对象的创建交给 Spring 进行管理 -->

<bean id="sessionFactory"

class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">

<!--

因为在 Hibernate 核心配置文件中,没有数据库配置,

而是在 Spring 的核心配置文件中进行配置,所以需要

注入 dataSource

LocalSessionFactoryBean 中有相关属性,所以可以

注入

-->

<property name="dataSource" ref="dataSource"></property>

<!-- 指定 Hibernate 核心配置文件的位置 -->

<property name="configLocations" value="classpath:hibernate.cfg.xml"></property>

</bean>

<!-- (2) -->

<!-- 配置 Action 对象 -->

<bean id="userAction" class="com.siwuxie095.action.UserAction" scope="prototype">

<property name="userService" ref="userService"></property>

</bean>

<!-- 配置 Service 对象 -->

<bean id="userService" class="com.siwuxie095.service.UserService">

<property name="userDao" ref="userDaoImpl"></property>

</bean>

<!-- 配置 Dao 实现类对象 -->

<bean id="userDaoImpl" class="com.siwuxie095.dao.impl.UserDaoImpl">

<property name="hibernateTemplate" ref="hibernateTemplate"></property>

</bean>

<!-- 配置 HibernateTemplate 对象 -->

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">

<!-- 注入 SessionFactory 对象 -->

<property name="sessionFactory" ref="sessionFactory"></property>

</bean>

<!-- (3) -->

<!-- 配置事务管理器 HibernateTransactionManager -->

<bean id="transactionManager"

class="org.springframework.orm.hibernate5.HibernateTransactionManager">

<!--注入 SessionFactory 对象 -->

<property name="sessionFactory" ref="sessionFactory"></property>

</bean>

<!-- 开启事务注解 -->

<tx:annotation-driven transaction-manager="transactionManager"/>

</beans>

(8)在 Struts2 核心配置文件中进行配置

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

<package name="demo" extends="struts-default" namespace="/">

<!--

此时,class 属性对应 Spring 核心配置文件中 Bean 的 id

如果还写 Action 类的全限定名,Action 对象就会创建两次

-->

<action name="user" class="userAction"></action>

</package>

</struts>

(9)在部署描述文件中进行配置

web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

<filter>

<!-- 配置 Struts2 的核心过滤器 -->

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- 配置 Spring 的监听器 ContextLoaderListener -->

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<!-- 配置 Spring 核心配置文件的位置(路径) -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:applicationContext.xml</param-value>

</context-param>

</web-app>

(10)访问路径

http://localhost:8080/工程名/user.action

【made by siwuxie095】

HibernateTemplate实现CRUD操作的更多相关文章

  1. JdbcTemplate实现CRUD操作

    ------------------siwuxie095                                     JdbcTemplate 实现 CRUD 操作         1.J ...

  2. 【翻译】MongoDB指南/CRUD操作(四)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...

  3. 【翻译】MongoDB指南/CRUD操作(三)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...

  4. 【翻译】MongoDB指南/CRUD操作(二)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...

  5. 【翻译】MongoDB指南/CRUD操作(一)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...

  6. ASP.NET Core Web API Cassandra CRUD 操作

    在本文中,我们将创建一个简单的 Web API 来实现对一个 “todo” 列表的 CRUD 操作,使用 Apache Cassandra 来存储数据,在这里不会创建 UI ,Web API 的测试将 ...

  7. MongoDB的CRUD操作

    1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的 ...

  8. 【Java EE 学习 44】【Hibernate学习第一天】【Hibernate对单表的CRUD操作】

    一.Hibernate简介 1.hibernate是对jdbc的二次开发 2.jdbc没有缓存机制,但是hibernate有. 3.hibernate的有点和缺点 (1)优点:有缓存,而且是二级缓存: ...

  9. 使用MyBatis对表执行CRUD操作

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...

随机推荐

  1. autopy的使用探索

    autopy这个包可以直接操作电脑的一些行为,比如点击,移动鼠标啥的,但是可能只使用于windows,用处有限,不过做个简单的游戏辅助还是可以的. 网上资料贼少,很多不能用的,现总结一些可以用的放在这 ...

  2. 自己写的一个jQuery分页插件

    ;(function($){ $.fn.extend({ pageList: function (json) { function PageList() { this.initHtml = " ...

  3. trigger和triggerHandler的使用

    今天琢磨了好久这个trigger和triggerHandler的用法.在网上搜了好多,不过大都是相互抄袭,毛意思都没有.后来自己做了研究. trigger: 1.可以用来触发事件. <input ...

  4. 用Dockerfile生成docker image

    在docker的官方php镜像中,有独立的php和apache版本的,这里尝试用php-fpm7.2.1(alpine3.7)作为基础镜像,在把nginx1.13.8加进去. 第一步:拉取php镜像: ...

  5. AFNetworkingErrorDomain 错误解决方法

    首先我们来看一下错误信息: Error Domain=AFNetworkingErrorDomain Code=-1011 "Expected status code in (200-299 ...

  6. oracle一个用户操作多个表空间中表的问题

    首先,授权给指定用户. 一个用户的默认表空间只能有一个,但是你可以试下用下面的语句为其授权在别的表空间中创建对像: alter user  username quota 0||unlimited on ...

  7. Java的Synchronized

    原理,注意看输入输出,不了解原理是想不到会这样输出的. http://www.cnblogs.com/paddix/p/5367116.html 还有一个要注意的是一个对象一个monitor类

  8. leetcode973

    public class POINT { public int X; public int Y; public int Z; } public class Solution { public int[ ...

  9. Spring Boot 入门搭建

    一.前言 Spring Boot 的设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 二.环境搭建 创建一个 ...

  10. as3 文本竖排效果实现

    import flash.text.engine.TextBlock; import flash.text.engine.ElementFormat; import flash.text.engine ...