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,一经查实,立即删除!

相关文章

java铃声类_MediaPlayer.setDataSource中的java.lang.IllegalStateException,使用铃声类

我有一个用户(Samsung Galaxy S5&#xff0c;Android 4.4)报告的崩溃&#xff0c;我不明白发生了什么。这似乎是可以吸收的&#xff0c;但也许有些人遇到了同样的问题&#xff0c;或类似的问题。MediaPlayer.setDataSource中的java.lang.IllegalStateException&#xff0c;使用…

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

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

java nextintln_java – 从lambda表达式引用的局部变量必须是final或者有效的final

我有一个JavaFX 8程序(适用于JavaFXPorts交叉平台),它实际上是为了做我想做的事情,但却是一步之遥.程序读取文本文件,对行进行计数以建立随机范围,从该范围中选取一个随机数并读取该行以进行显示.The error is: local variables referenced from a lambda expression must be f…

css用hover制作下拉菜单

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

java链式调用空指针_java 链式调用

前言现在很多开源库或者代码都会使用链式调用。因为链式调用在很多时候&#xff0c;都可以使我们的代码更加简洁易懂。以下Student类有多数个属性&#xff0c;让我们看看非链式调用和链式调用有何区别。非链式调用Main类&#xff1a;/*** Created by chenxuxu on 17-1-10.*/pub…

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

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

java菜单面板设置完能关闭_用Java创建一个屏幕外框架(或者:当所有应用程序窗口关闭时,如何避免Mac上的空白菜单)?...

你一定要考虑WizardOfOdds非常有用的答案.正确使用“The Application Menu”将有所帮助,并且很容易设置最小的Info.plist开始.持久的文件菜单将允许您的应用程序在其他人关闭时打开一个新窗口.这个answer链接到一个简单的example.虽然Apple的Human Interface Guidelines是您用户…

mysql使用jtable_jtable 的简单使用

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

java正则表达 w_正则表达式[\s\S] 与[\w\W]这样的用法,比较.

更新时间&#xff1a;2020年03月04日 17:29:41 投稿&#xff1a;mdxy-dxy很多人咨询[\s\S]*与[\w\W]* 什么意思&#xff0c;不是有.了吗&#xff0c;那么它们的组合&#xff0c;表示所有的都匹配&#xff0c;与它相对应的&#xff0c;有[\w\W]等&#xff0c;意义完全相同,需要…

dalvik虚拟机与Java区别_05 Android---java虚拟机跟dalvik虚拟机的区别(从01开始点点入门,视频+笔记)...

大家好,我是森森这节课我简单给大家介绍一下java虚拟机跟安卓系统虚拟机的区别.可能时间太晚了,有点不在状态,也有点紧张,大家见谅.05java虚拟机跟dalvik虚拟机的区别这篇文章重点写一写安卓运行时和Java运行时的区别.什么是运行时呢?其实我们所说的虚拟机就是运行时.两种虚拟…

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

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

团队项目冲刺第一阶段03

回顾昨天:用了各种FQ软件下载SDK&#xff0c;最后终于在11点半后成功加载出helloworld 今天的任务:学习安卓数据库&#xff0c;实现对数据库信息的添加转载于:https://www.cnblogs.com/cairsha/p/8084694.html

java 解析xls 文件_java简单解析xls文件的方法示例【读取和写入】

本文实例讲述了java简单解析xls文件的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;读取&#xff1a;import java.io.*;import jxl.*;import jxl.write.*;import jxl.format.*;class Aa{public static void main(String args[]) {try{Workbook workbook null;t…

$(document).ready()和window.onload之间的差异

最近使用$(document).ready(function(){})遇到一个问题&#xff1a;加载页面后发送数据请求后台&#xff0c;得到的数据不对&#xff0c;后发现请求后台时&#xff0c;发送的数据为空&#xff0c;没有获取到值导致的。------改成window.onload function(){}或者$(window).load…

用java做出长方体的表面积_计算长方体、四棱锥的表面积和体积(Java)acm.sdut...

Problem Description计算如下立体图形的表面积和体积。从图中观察&#xff0c;可抽取其共同属性到父类Rect中&#xff1a;长度&#xff1a;l 宽度&#xff1a;h 高度&#xff1a;z在父类Rect中&#xff0c;定义求底面周长的方法length( )和底面积的方法area( )。定义父类Rect…

贝叶斯理论基础理解

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

java mongodb 关闭连接_如何在mongodb上使用java驱动程序保持连接池关闭?

我正在从java驱动程序2.12.3升级到3.3.0.奇怪的是,收集池似乎突然“起作用”.我的设置如下&#xff1a;Connection在主线程中建立&#xff1a;mongoClient new MongoClient(new MongoClientURI("mongodb://localhost:27017"));mongoClient.setWriteConcern(new Writ…

再论递归

再论递归 大概是从汉诺塔hanoi了解递归算法的&#xff1a; function hanoi(n, a, b, c) {if(n1) {console.log(${a} ---> ${c})return}hanoi(n-1, a, c, b);hanoi(1, a, b, c);hanoi(n-1, b, a, c); }hanoi(10, A, B, C); 我自诩脑回路清奇&#xff0c;然而面对这层层递归&a…

flock lock ex php,php – flock有可能用LOCK_EX返回false吗?

标签&#xff1a;phpBy default, this function will block until the requested lock isacquired在下面我发现了以下示例代码&#xff1a;$fp fopen("/tmp/lock.txt", "r");if (flock($fp, LOCK_EX)) { // acquire an exclusive lockftruncate($fp, 0); …

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

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