S2SH框架整合(注解)Struts2+Spring+Hibernate+MySql
整合简介
Struts2+Spring4+hibernate4整合,Maven管理jar包,Eclipse工具。注解方式
架构截图
1、Spring整合Hibernate
1.1、创建Hibernate配置文件
<?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.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/woo0nise?characterEncoding=utf-8</property> <property name="hibernate.connection.username">root</property> </session-factory> </hibernate-configuration>
该配置文件可以删除,下面会讲解到。
1.2、Spring整合Hibernate
创建db.properties文件用于存放数据库配置文件
#数据库配置信息 #数据库链接驱动 jdbc.driver=com.mysql.jdbc.Driver #数据库链接字符串 jdbc.url=jdbc:mysql://localhost:3306/woo0nise?characterEncoding=utf-8 #数据库用户名 jdbc.username=root #数据库密码 jdbc.password=root
创建applicationConext.xml,用于配置dao层
<?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:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" 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-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd"> <!-- 加载数据库配置文件 --> <context:property-placeholder location="classpath:resource/db.properties" /> <!-- 配置DataSource (Druid数据源)--> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" > <property name="driverClassName" value="${jdbc.driver}" ></property> <property name="url" value="${jdbc.url}" ></property> <property name="username" value="${jdbc.username}" ></property> <property name="password" value="${jdbc.password}" ></property> </bean> <!-- 配置session工厂 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" > <!-- 配置数据源 --> <property name="dataSource" ref="dataSource" ></property> <!-- 配置hibernate的信息 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> </props> </property> <!-- 加载由注解定义的持久化类 --> <property name="packagesToScan"> <list> <value>com.test.entity</value> </list> </property> </bean> <!-- 定义Autowired,自动注入Bean --> <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" ></bean> <!-- 配置事务 --> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory" ></bean> <!-- 使用事务注解方式 --> <tx:annotation-driven transaction-manager="transactionManager" /> <context:component-scan base-package="com.test"></context:component-scan> </beans>
applicationContext.xml
1、加载db.properties数据库配置文件
2、创建数据源用来创建sessionFctoty,需要数据库配置信息
3、创建sessionFactory用于产生session,需要数据源以及hibernate配置文件还有定义注解实体类的包
4、创建事务管理器,用于管理事务
5、创建事务
6、定义注解扫描器
1.3、创建struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="default" namespace="/" extends="struts-default" > <action name="ok" class="com.test.web.UserAction" method="register" > <result name="success">/index.jsp</result> </action> </package> </struts>
1.4、配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <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的配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
web.xml
3、测试整合
3.1、创建实体类
package com.test.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import static javax.persistence.GenerationType.IDENTITY; import javax.persistence.Id; import javax.persistence.Table; /** * User generated by hbm2java */ @Entity @Table(name = "user", catalog = "woo0nise") public class User implements java.io.Serializable { private Integer id; private String username; private String userpwd; public User() { } public User(String username, String userpwd) { this.username = username; this.userpwd = userpwd; } @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @Column(name = "username", nullable = false) public String getUsername() { return this.username; } public void setUsername(String username) { this.username = username; } @Column(name = "userpwd", nullable = false) public String getUserpwd() { return this.userpwd; } public void setUserpwd(String userpwd) { this.userpwd = userpwd; } }
3.2、创建Dao层接口以及实现类
IUserDao
package com.test.dao; import com.test.common.dao.BaseDao; import com.test.entity.User; /** * <p>Title:IUserDao</p> * <p>Description:</p> * <p>Company:www.hack-gov.com</p> * @author 0nise * @date 2016年12月29日 下午11:41:46 * @Email woo0nise@gmail.com * @version 1.0 */ public interface IUserDao extends BaseDao<User> { }
UserDaoImpl
package com.test.dao.impl; import org.springframework.stereotype.Repository; import com.test.common.dao.BaseDaoImpl; import com.test.dao.IUserDao; import com.test.entity.User; /** * <p>Title:UserDaoImpl</p> * <p>Description:</p> * <p>Company:www.hack-gov.com</p> * @author 0nise * @date 2016年12月29日 下午11:42:45 * @Email woo0nise@gmail.com * @version 1.0 */ @Repository public class UserDaoImpl extends BaseDaoImpl<User> implements IUserDao { }
3.3、创建Service层接口以及实现类
UserService
package com.test.service; import com.test.entity.User; /** * <p>Title:UserService</p> * <p>Description:</p> * <p>Company:www.hack-gov.com</p> * @author 0nise * @date 2016年12月29日 下午11:44:29 * @Email woo0nise@gmail.com * @version 1.0 */ public interface UserService { void register(User user); } UserServiceImpl.java package com.test.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.test.dao.IUserDao; import com.test.entity.User; import com.test.service.UserService; /** * <p>Title:UserServiceImpl</p> * <p>Description:</p> * <p>Company:www.hack-gov.com</p> * @author 0nise * @date 2016年12月29日 下午11:45:30 * @Email woo0nise@gmail.com * @version 1.0 */ @Service//("userService") @Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,timeout=5) public class UserServiceImpl implements UserService { @Autowired private IUserDao userDao; @Override public void register(User user) { userDao.save(user); } }
3.4、创建Action
UserAction
package com.test.web; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import com.opensymphony.xwork2.ActionSupport; import com.test.entity.User; import com.test.service.UserService; import com.test.service.impl.UserServiceImpl; /** * <p>Title:UserAction</p> * <p>Description:</p> * <p>Company:www.hack-gov.com</p> * @author 0nise * @date 2016年12月29日 下午11:48:51 * @Email woo0nise@gmail.com * @version 1.0 */ public class UserAction extends ActionSupport { /** * */ private static final long serialVersionUID = -799685719203073064L; @Autowired private UserService userService; public String register(){ User user = new User("admin25", "admin25"); try { userService.register(user); System.out.println("ok"); return SUCCESS; } catch (Exception e) { e.printStackTrace(); return null; } } }
运行结果
工具类
BaseDao.java
package com.test.common.dao; import java.io.Serializable; import java.util.List; /** * <p>Title:BaseDao</p> * <p>Description:</p> * <p>Company:www.hack-gov.com</p> * @author 0nise * @date 2016年12月29日 下午11:10:19 * @Email woo0nise@gmail.com * @version 1.0 */ public interface BaseDao<T> { /** * 获取一个对象 * @author 0nise * @date 2016年12月29日 下午11:23:48 * @Email woo0nise@gmail.com * @param entityClazz * @param id id编号 * @return */ T get(Class<T> entityClazz , Serializable id); /** * 保存一个对象 * @author 0nise * @date 2016年12月29日 下午11:24:11 * @Email woo0nise@gmail.com * @param entity * @return */ Serializable save(T entity); /** * 更新对象 * @author 0nise * @date 2016年12月29日 下午11:24:19 * @Email woo0nise@gmail.com * @param entity 实体对象 */ void update(T entity); /** * 删除对象 * @author 0nise * @date 2016年12月29日 下午11:24:32 * @Email woo0nise@gmail.com * @param entity 实体对象 */ void delete(T entity); /** * 根据id删除对象 * @author 0nise * @date 2016年12月29日 下午11:24:44 * @Email woo0nise@gmail.com * @param entityClazz * @param id id编号 */ void delete(Class<T> entityClazz , Serializable id); /** * 查询该对象集合 * @author 0nise * @date 2016年12月29日 下午11:24:57 * @Email woo0nise@gmail.com * @param entityClazz * @return */ List<T> findAll(Class<T> entityClazz); /** * 获取该对象的数量 * @author 0nise * @date 2016年12月29日 下午11:25:12 * @Email woo0nise@gmail.com * @param entityClazz * @return */ long findCount(Class<T> entityClazz); /** * hql查询 * @author 0nise * @date 2016年12月29日 下午11:25:24 * @Email woo0nise@gmail.com * @param hql * @return */ List<T> find(String hql); /** * 分页查询 * @author 0nise * @date 2016年12月29日 下午11:25:34 * @Email woo0nise@gmail.com * @param hql * @param pageNo * @param pageSize * @return */ List<T> findByPage(String hql,int pageNo, int pageSize); }
BaseDao.java
BaseDaoImpl.java
package com.test.common.dao; import java.io.Serializable; import java.util.List; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; /** * <p>Title:BaseDaoImpl</p> * <p>Description:</p> * <p>Company:www.hack-gov.com</p> * @author 0nise * @date 2016年12月29日 下午11:11:50 * @Email woo0nise@gmail.com * @version 1.0 */ public class BaseDaoImpl<T> implements BaseDao<T> { @Autowired private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public SessionFactory getSessionFactory() { return this.sessionFactory; } /** * 获取一个对象 * @author 0nise * @date 2016年12月29日 下午11:23:48 * @Email woo0nise@gmail.com * @param entityClazz * @param id id编号 * @return */ @SuppressWarnings("unchecked") public T get(Class<T> entityClazz , Serializable id) { return (T)getSessionFactory().getCurrentSession() .get(entityClazz , id); } /** * 保存一个对象 * @author 0nise * @date 2016年12月29日 下午11:24:11 * @Email woo0nise@gmail.com * @param entity * @return */ public Serializable save(T entity) { return getSessionFactory().getCurrentSession() .save(entity); } /** * 更新对象 * @author 0nise * @date 2016年12月29日 下午11:24:19 * @Email woo0nise@gmail.com * @param entity 实体对象 */ public void update(T entity) { getSessionFactory().getCurrentSession().update(entity); } /** * 删除对象 * @author 0nise * @date 2016年12月29日 下午11:24:32 * @Email woo0nise@gmail.com * @param entity 实体对象 */ public void delete(T entity) { getSessionFactory().getCurrentSession().delete(entity); } /** * 根据id删除对象 * @author 0nise * @date 2016年12月29日 下午11:24:44 * @Email woo0nise@gmail.com * @param entityClazz * @param id id编号 */ public void delete(Class<T> entityClazz , Serializable id) { getSessionFactory().getCurrentSession() .createQuery("delete " + entityClazz.getSimpleName() + " en where en.id = ?0") .setParameter("0" , id) .executeUpdate(); } /** * 查询该对象集合 * @author 0nise * @date 2016年12月29日 下午11:24:57 * @Email woo0nise@gmail.com * @param entityClazz * @return */ public List<T> findAll(Class<T> entityClazz) { return find("select en from " + entityClazz.getSimpleName() + " en"); } /** * 获取该对象的数量 * @author 0nise * @date 2016年12月29日 下午11:25:12 * @Email woo0nise@gmail.com * @param entityClazz * @return */ public long findCount(Class<T> entityClazz) { List<?> l = find("select count(*) from " + entityClazz.getSimpleName()); if (l != null && l.size() == 1 ) { return (Long)l.get(0); } return 0; } /** * hql查询 * @author 0nise * @date 2016年12月29日 下午11:25:24 * @Email woo0nise@gmail.com * @param hql * @return */ @SuppressWarnings("unchecked") public List<T> find(String hql) { return (List<T>)getSessionFactory().getCurrentSession() .createQuery(hql) .list(); } /** * hql查询,条件 * @author 0nise * @date 2016年12月29日 下午11:25:24 * @Email woo0nise@gmail.com * @param hql * @return */ @SuppressWarnings("unchecked") protected List<T> find(String hql , Object... params) { Query query = getSessionFactory().getCurrentSession() .createQuery(hql); for(int i = 0 , len = params.length ; i < len ; i++) { query.setParameter(i + "" , params[i]); } return (List<T>)query.list(); } /** * 分页查询 * @author 0nise * @date 2016年12月29日 下午11:25:34 * @Email woo0nise@gmail.com * @param hql * @param pageNo * @param pageSize * @return */ @SuppressWarnings("unchecked") public List<T> findByPage(String hql,int pageNo, int pageSize) { return getSessionFactory().getCurrentSession() .createQuery(hql) .setFirstResult((pageNo - 1) * pageSize) .setMaxResults(pageSize) .list(); } /** * 分页查询,条件 * @author 0nise * @date 2016年12月29日 下午11:25:34 * @Email woo0nise@gmail.com * @param hql * @param pageNo * @param pageSize * @return */ @SuppressWarnings("unchecked") protected List<T> findByPage(String hql , int pageNo, int pageSize , Object... params) { Query query = getSessionFactory().getCurrentSession() .createQuery(hql); for(int i = 0 , len = params.length ; i < len ; i++) { query.setParameter(i + "" , params[i]); } return query.setFirstResult((pageNo - 1) * pageSize) .setMaxResults(pageSize) .list(); } }
BaseDaoImpl.java
S2SH框架整合(注解)Struts2+Spring+Hibernate+MySql的更多相关文章
- SSH框架简化(struts2+spring+hibernate)
目的: 通过对ssh框架有了基础性的学习,本文主要是使用注解的方式来简化ssh框架的代码编写. 注意事项: 1.运行环境:Windows 8-64位,Eclipse(开发工具),jdk1.8.0_91 ...
- SSH三大框架的搭建整合(struts2+spring+hibernate)(转)
原文地址:http://blog.csdn.net/kyle0349/article/details/51751913 尊重原创,请访问原文地址 SSH说的上是javaweb经典框架,不能说100% ...
- SSH三大框架的搭建整合(struts2+spring+hibernate)
本文转载自:https://blog.csdn.net/kyle0349/article/details/51751913
- Eclipse下面的Maven管理的SSH框架整合(Struts,Spring,Hibernate)
搭建的环境:eclispe下面的maven web项目 Struts: 2.5.10 Spring: 4.3.8 Hibernate: 5.1.7 .Final MySQL: 5. ...
- SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>
此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...
- 基于Maven的S2SH(Struts2+Spring+Hibernate)框架搭建
1. 前言 基于Maven的开发方式开发项目已经成为主流.Maven能很好的对项目的层次及依赖关系进行管理.方便的解决大型项目中复杂的依赖关系.S2SH(Struts2+Spring+Hibernat ...
- Spring、Struts2+Spring+Hibernate整合步骤
所使用的Jar包: Hibernate: Spring(使用MyEclipse自动导入框架功能) Struts2: 注解包和MySql驱动包: 1.配置Hibernate和Spring: <be ...
- 整合struts2+spring+hibernate
一.准备struts2+spring+hibernate所须要的jar包: 新建web项目并将jar包引入到project项目中. 二.搭建struts2环境 a.在 ...
- Struts2+Spring+Hibernate 三大框架的合并集成
这次来看看Struts2+Spring+Hibernate三大框架的整合应用,主要是Spring和Hibernate框架的整合,因为前边已经将Strtus2+Spring整合过了基本一样. 首先看一 ...
随机推荐
- PAT (Advanced Level) 1079. Total Sales of Supply Chain (25)
树的遍历. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #i ...
- Linux命令 理解
RPM常用命令参数列表 1.安装一个包 # rpm -ivh 2.升级一个包 # rpm -Uvh [注意U一定要大写] -i 安装 -U 升线安装 -h 以#显示安装进度 -v 显示附加 ...
- Ubuntu和win10双系统Grup无法引导解决方案
通常我们经常安装双系统, 但是有时候安装完系统无法正常引导, 以下就说明Ubuntu和win10双系统, win10在grub界面不断循环的解决方案 直接在win10启动项目上按e进入编辑模式 在文档 ...
- CDN概念+作用+特点+原理
CDN的全称是Content Delivery Network,即内容分发网络.其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络"边缘" ...
- 在win10环境下安装eclipse mars版本
1下载eclipse软件.下载地址:http://www.eclipse.org/downloads/ 不要下载.exe文件.直接下载安装包,下载对应的安装包,我下载的是这个Eclipse IDE f ...
- Linux 分区和目录
[1. 分区与目录概念理解] Linux的分区是物理上的概念,就像我们把一块硬盘分成C:,D:,E:三个区一样,物理上将存储空间分开 Linux的目录是逻辑上的概念,Linux的目录树实际上是一个分 ...
- (简单) POJ 3268 Silver Cow Party,Dijkstra。
Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to atten ...
- redis 学习
http://blog.csdn.net/z69183787/article/category/2923783
- realm-java 源码疑问
JNIEXPORT void JNICALL Java_io_realm_internal_Group_nativeWriteToFile( JNIEnv* env, jobject, jlong n ...
- leetcode--009 Linked List Cycle I
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZgAAACACAIAAAC5q+hAAAAJ+UlEQVR4nO2dwbXrKBJAOyelRShEQw