SSH整合方案二(不带hibernate.cfg.xml)

整体结构:

1.引入相关jar包

2.编写实体类和映射文件

package cn.zqr.domain;public class Customer {private Long cust_id;private String cust_name;private Long cust_user_id;private Long cust_create_id;private String cust_source;private String cust_industry;private String cust_level;private String cust_linkman;private String cust_phone;private String cust_mobile;public Long getCust_id() {return cust_id;}public void setCust_id(Long cust_id) {this.cust_id = cust_id;}public String getCust_name() {return cust_name;}public void setCust_name(String cust_name) {this.cust_name = cust_name;}public Long getCust_user_id() {return cust_user_id;}public void setCust_user_id(Long cust_user_id) {this.cust_user_id = cust_user_id;}public Long getCust_create_id() {return cust_create_id;}public void setCust_create_id(Long cust_create_id) {this.cust_create_id = cust_create_id;}public String getCust_source() {return cust_source;}public void setCust_source(String cust_source) {this.cust_source = cust_source;}public String getCust_industry() {return cust_industry;}public void setCust_industry(String cust_industry) {this.cust_industry = cust_industry;}public String getCust_level() {return cust_level;}public void setCust_level(String cust_level) {this.cust_level = cust_level;}public String getCust_linkman() {return cust_linkman;}public void setCust_linkman(String cust_linkman) {this.cust_linkman = cust_linkman;}public String getCust_phone() {return cust_phone;}public void setCust_phone(String cust_phone) {this.cust_phone = cust_phone;}public String getCust_mobile() {return cust_mobile;}public void setCust_mobile(String cust_mobile) {this.cust_mobile = cust_mobile;}@Overridepublic String toString() {return "Customer [cust_id=" + cust_id + ", cust_name=" + cust_name + ", cust_user_id=" + cust_user_id+ ", cust_create_id=" + cust_create_id + ", cust_source=" + cust_source + ", cust_industry="+ cust_industry + ", cust_level=" + cust_level + ", cust_linkman=" + cust_linkman + ", cust_phone="+ cust_phone + ", cust_mobile=" + cust_mobile + "]";}}
Customer 实体类
<?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="cn.zqr.domain.Customer" table="cst_customer"><id name="cust_id" column="cust_id"><generator class="native"/></id><property name="cust_name" column="cust_name"/><property name="cust_user_id" column="cust_user_id"/><property name="cust_create_id" column="cust_create_id"/><property name="cust_source" column="cust_source"/><property name="cust_industry" column="cust_industry"/><property name="cust_level" column="cust_level"/><property name="cust_linkman" column="cust_linkman"/><property name="cust_phone" column="cust_phone"/><property name="cust_mobile" column="cust_mobile"/></class></hibernate-mapping>    
实体类映射文件

3.配置struts核心过滤器,和Spring文件加载的监听器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><!--配置Spring整合web的监听器--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><!--配置struts的过滤器--><filter><filter-name>struts</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>
struts核心过滤器的配置和Spring文件加载监听器

4.编写Action并配置,采用模型驱动的方式对表单进行封装,采用Spring注入的方式获取serice实例,并配置Action

/*** 客户的控制层*/
public class CustomerAction extends ActionSupport implements ModelDriven{private CustomerService customerService;public void setCustomerService(CustomerService customerService) {this.customerService = customerService;}//必须手动newprivate Customer customer=new Customer();//模型和属性驱动/*** 保存客户* @return*/public String add(){customerService.save(customer);return NONE;}@Overridepublic Object getModel() {return customer;}
}
Action
  <!--配置service--><bean id="customerService" class="cn.zqr.service.impl.CustomerServiceImpl"><property name="customerDao" ref="customerDao"/></bean>

 

使用Spring管理Action

  <!--配置Action必须多例--><bean id="customerAction" class="cn.zqr.action.CustomerAction" scope="prototype"><property name="customerService" ref="customerService"/></bean>
Spring配置文件中配置Action

在struts中引入Action

<?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="crm" namespace="/" extends="struts-default"><!--Action由Spring管理,class值为Spring的id--><action name="customer_*" class="customerAction" method="{1}"></action></package></struts>
struts.xml中引入Action

 

5.配置service

service层代码:

/*** 客户业务层*/
@Transactional
public class CustomerServiceImpl implements CustomerService {private CustomerDao customerDao;public void setCustomerDao(CustomerDao customerDao) {this.customerDao = customerDao;}/*** 保存客户信息* @param customer*/@Overridepublic void save(Customer customer) {customerDao.add(customer);}
}
Service层代码
 

 

service需要开事务,在Spring中配置事务,开启事务需要使用session,所以首先配置SessionFactory,创建session工厂需要数据源,所以需要优先配置数据源

 <!--配置连接池--><bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql:///ssh"/><property name="user" value="root"/><property name="password" value="admin"/></bean>
配置数据源C3P0
   <bean class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" id="sessionFactory"><property name="dataSource" ref="dataSource"/><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="show_sql">true</prop><prop key="hibernate.format_sql">true</prop><prop key="hibernate.hbm2ddl.auto">update</prop></props></property><property name="mappingResources"><list><value>Customer.hbm.xml</value></list></property></bean>
配置SessionFactory以及hibernate相关属性

最后配置事务并开启

 <!--配置事务--><bean class="org.springframework.orm.hibernate5.HibernateTransactionManager" id="transactionManager"><property name="sessionFactory" ref="sessionFactory"/></bean><!--开始事务的注解--><tx:annotation-driven/>
配置事务并开启

6.编写dao层,dao层需要使用Hibernate模板(HibernateTemplate),为了简化开发,可以直接继承HibernateDaoSupport,然后向其注入sessionFactory

/*** 客户dao层*/public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {/*** 保存客户*/@Overridepublic void add(Customer customer) {System.out.println("持久层Customer customer"+customer);this.getHibernateTemplate().save(customer);}
}
dao层代码
   <!--配置dao--><bean id="customerDao" class="cn.zqr.dao.impl.CustomerDaoImpl"><property name="sessionFactory" ref="sessionFactory"/></bean>
dao层的配置

 

转载于:https://www.cnblogs.com/zqr99/p/8046987.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428448.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POJ 1742 Coins ( 经典多重部分和问题 DP || 多重背包 )

题意 : 有 n 种面额的硬币&#xff0c;给出各种面额硬币的数量和和面额数&#xff0c;求最多能搭配出几种不超过 m 的金额&#xff1f; 分析 : 这题可用多重背包来解&#xff0c;但这里不讨论这种做法。 如果之前有接触过背包DP的可以自然想到DP数组的定义 > dp[i][j] 表示…

css用hover制作下拉菜单

首先我们的需求就是 制作一个鼠标移动到某个区域就会有下拉菜单的弹出,这样会有更多的子类内容,示例代码如下: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>*{mar…

mysql 字典索引_【大白话mysql】你真的了解 mysql 索引吗?

本文来源于公众号&#xff1a; 跬步匠心什么是索引&#xff1f;当我们使用汉语字典查找某个字时&#xff0c;我们会先通过拼音目录查到那个字所在的页码&#xff0c;然后直接翻到字典的那一页&#xff0c;找到我们要查的字&#xff0c;通过拼音目录查找比我们拿起字典从头一页一…

mysql使用jtable_jtable 的简单使用

做后台管理管理系统时&#xff0c;基于ajax的数据操作和富有表现力的数据绑定插件jtable绝对是一个不错的选择&#xff0c;他接收来自服务器端的json格式的数据。而且他是一款开源的基于jquery和jquery ui的插件&#xff0c;您可以根据自己的需要修改其表现&#xff0c;如css&a…

java自定义菜单跳转页面_微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解...

微信公众号开发 自定义菜单请先读完本文再进行配置开发请先前往微信平台开发者文档阅读“网页授权获取用户基本信息”的接口说明在微信公众账号开发中&#xff0c;往往有定义一个菜单&#xff0c;然后用户点击该菜单就进入用户个人中心的功能&#xff0c;通常应用于各个公众账号…

贝叶斯理论基础理解

从贝叶斯方法谈到贝叶斯网络&#xff1a; http://blog.csdn.net/zdy0_2004/article/details/41096141 1 思考模式 比如往台球桌上扔一个球&#xff0c;这个球落会落在何处呢&#xff1f;如果是不偏不倚的把球抛出去&#xff0c;那么此球落在台球桌上的任一位置都有着相同的机…

C++如何实现DNS域名解析转

C如何实现DNS域名解析 这片文章介绍了C如何实现DNS域名解析&#xff0c;还有对相关技术的介绍&#xff0c;代码很详细,需要的朋友可以参考下一、概述 现在来搞定DNS域名解析&#xff0c;其实这是前面一篇文章C实现Ping里面的遗留问题&#xff0c;要干的活是ping的过程中画红线的…

高等代数第3版下 [丘维声 著] 2015年版_2020年成人高考 专升本 高等数学复习攻略...

成人高考的高等数学考试按照专业属性分为理工类和经管类&#xff0c;高等数学一直是成考中的比较不好拿分的科目&#xff0c;也是大家复习备考的难点。今天&#xff0c;小编给大家分享一些答题技巧和必备的公式&#xff0c;帮助大家一起来搞定高等数学&#xff0c;希望这份资料…

java虚拟机10.内存模型与线程

多任务处理在现代计算机操作系统中是一项必备的功能&#xff0c;让计算机同时去做几件事情&#xff0c;不仅是因为计算机的运算能力强大了&#xff0c;更重要的原因是计算机的运算速度与它的存储和通信子系统速度的差距太大&#xff0c;大量的时间都花费在磁盘I/O&#xff0c;网…

php仿微信上传图片压缩,PHP仿微信多图片预览上传实例代码

生产图片区域&#xff0c;上传按钮#btn可替换自己想要的图片plupload上传var uploader new plupload.Uploader({//创建实例的构造方法runtimes: html5,flash,silverlight,html4, //上传插件初始化选用那种方式的优先级顺序browse_button: btn, // 上传按钮url: "ajax.php…

笔记本电脑如何保养_嘉兴专业笔记本电脑喷漆加工厂价格实惠

嘉兴专业笔记本电脑喷漆加工厂价格实惠 [xznugcbx]不宜大量储存或久存&#xff0c;做好通风设施。自喷漆如果大量泄露操作人员应迅速撤离泄露污染区人员到安全区域&#xff0c;因罐内的二甲醚气体具有轻微的毒性&#xff0c;并将污染区域进行隔离&#xff0c;罐内的气体跟空气中…

css 滤镜之AlphaImageLoader

CreateTime--2017年12月25日17:05:37 Author:Marydon ie滤镜特效之AlphaImageLoader 作用&#xff1a; 用于设置背景图片特效样式 使用条件&#xff1a; IE8及以下版本不支持属性background-size&#xff0c;可以使用AlphaImageLoader来代替 语法&#xff1a; filter : progid:…

企业是否应该实现对客户需求的快速响应_互联网企业的数据化迭代和数据化应用...

数字时代&#xff0c;品牌和消费者正经历数字化的变革&#xff0c;谁能真正实现企业数据赋能&#xff0c;谁就是残酷市场竞争下的优胜者。企业需要加快实现全数据治理工具的研发&#xff0c;用数据推动企业发展。本文作者结合案例分享了关于企业数字化的方法论与感知响应模型&a…

windows server 触屏_宜昌触屏万能蒸烤箱价格-华春新能源有限公司

首页 > 新闻列表 > 浏览文章发布时间&#xff1a;2020-10-27 08:47:06 浏览量&#xff1a; 5导读&#xff1a;华春新能源有限公司为您提供宜昌触屏万能蒸烤箱价格的相关知识与详情&#xff1a; 所述水箱与水较少时的水位达到一个比预定热气体电磁阀被打开时系统压力平衡…

3ds Max制作碗实例教程

一、 碗的建模。模型的结果如图WB—1所示&#xff1a; 图WB—1 1. 创建圆柱&#xff0c;并调节参数&#xff0c;转换到多边形&#xff0c;最终的结果图WB—2所示&#xff1a; 图WB—2 2.使用Inset&#xff08;插入&#xff09;插入一个面&#xff0c;再次执行Extrude&#xff0…

unity hub服务器无响应_累积更新KB4541335反馈称无法安装 出现无响应情况

几天前微软面向Windows 10 Version 1903/Version 1909功能更新&#xff0c;发布了累积更新KB4541335&#xff0c;主要改善了开始菜单和文件管理器。不过部分用户在Feedback Hub上反馈无法安装该更新&#xff0c;过程中会收到错误信息。用户反馈称会收到“2020-03 Cumulative Up…

电脑二维码怎么扫描_扫描模组方案是如何满足多种应用场景需求?

随着自动识别技术的发展&#xff0c;扫描模组逐渐成为各个领域上的配套&#xff0c;然而很多人还停留在“主扫”的观念上&#xff0c;殊不知如今的“被扫”更受人们的欢迎&#xff0c;即采用硬件解码的方式去识读条形码或二维码。远景达作为扫描模组方案公司&#xff0c;在不断…

cad刷新快捷键_第16期分享:常用电脑快捷键是哪些?

电脑键盘快捷键的使用能很好的提高工作效率&#xff0c;所谓的快捷键就是使用键盘上某一个或某几个键的组合完成一条功能命令&#xff0c;从而达到提高操作速度的目的。善于使用快捷键能更快捷的使用电脑&#xff0c;那么电脑键盘快捷键有哪些呢?下面小编就来详细介绍一下常用…

ALSA声卡12_从零编写之添加音量控制_学习笔记

1、设置音量时应用程序的调用过程 &#xff08;1&#xff09;strace分析&#xff1a; amixer cset numid1 30 (设置音量) /dev/snd/controlC0 open SNDRV_CTL_IOCTL_CARD_INFO SNDRV_CTL_IOCTL_PVERSION SNDRV_CTL_IOCTL_ELEM_INFO SNDRV_CTL_IOCTL_ELEM_READSNDRV_CTL_IOCTL_E…

twrp3.3.0刷n9002_插画师必备笔刷,送你5套iPad5.0新出300款大神笔刷

由于插画行业的蒸蒸日上&#xff0c;人们对于插画的喜爱程度也大大提高。本身由于插画的趣味性&#xff0c;因此插画成为了不论在男女老幼之间都十分受欢迎的存在。尤其是目前来说最受欢迎之一的iPad插画绘制设计&#xff0c;相信很多在做的同学都有过想要学习插画设计的冲动&a…