现在的位置: 首页 > 操作系统 > 正文

基于注解的简单SSH保存用户小案例

2020年02月07日 操作系统 ⁄ 共 7316字 ⁄ 字号 评论关闭

需求:搭建SSH框架环境,使用注解进行相关的注入(实体类的注解,AOP注解、DI注入),保存用户信息

效果:

一、导依赖包

二、项目的目录结构

三、web.xml配置

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

<!--懒加载过滤器,解决懒加载问题--> <filter> <filter-name>openSession</filter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>openSession</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>

<!-- struts2的前端控制器 --> <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>

<!-- spring 创建监听器 --> <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>

</web-app>

四、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:tx="http://www.springframework.org/schema/tx" xmlns:contex="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<!-- 打开注解扫描开关 --> <contex:component-scan base-package="com.pri"/>

<!-- 以下是属于hibernate的配置 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql:///ssh_demo1?useSSL=false"/> <property name="user" value="root"/> <property name="password" value=""/> </bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <!--1、核心配置--> <property name="dataSource" ref="dataSource"/>

<!-- 2、可选配置--> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> <!-- 3、扫描映射文件 --> <property name="packagesToScan" value="com.pri.domain"></property> </bean>

<!--开启事务控制--> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <tx:annotation-driven transaction-manager= "transactionManager"/></beans>

五、log4j.properties配置

#设置日志记录到控制台的方式log4j.appender.std=org.apache.log4j.ConsoleAppender#out以黑色字体输出,err以红色字体输出log4j.appender.std.Target=System.errlog4j.appender.std.layout=org.apache.log4j.PatternLayoutlog4j.appender.std.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n#设置日志记录到文件的方式log4j.appender.file=org.apache.log4j.FileAppender#日志文件路径文件名log4j.appender.file.File=mylog.log#日志输出的格式log4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n#日志输出的级别,以及配置记录方案,级别:error > warn > info>debug>tracelog4j.rootLogger=info, std, file

六、页面代码

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html> <head> <title>$Title$</title> </head> <body> <h3>添加客户</h3> <form action="${ pageContext.request.contextPath }/customerAction_save" method="post"> 姓名:<input type="text" name="name" /><br/> 年龄:<input type="text" name="age" /><br/> <input type="submit" value="提交"/><br/> </form> </body></html>

success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>首页</title></head><body> <h1>保存成功!</h1></body></html>

七、实体层代码

package com.pri.domain;

import javax.persistence.*;

@Entity@Table(name = "customer")public class Customer { @Id @Column(name = "userId") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer userId;

@Column(name = "name") private String name; @Column(name = "age") private Integer age;

public Integer getUserId() {return userId; }

public void setUserId(Integer userId) {this.userId = userId;}

public String getName() {return name;}

public void setName(String name) {this.name = name;}

public Integer getAge() {return age;}

public void setAge(Integer age) {this.age = age;}}

八、action层代码

package com.pri.action;

import com.pri.domain.Customer;import com.pri.service.CustomerService;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.Namespace;import org.apache.struts2.convention.annotation.ParentPackage;import org.apache.struts2.convention.annotation.Result;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import javax.annotation.Resource;

@Controller("customerAction")@ParentPackage(value = "struts-default")@Scope("prototype")@Namespace(value = "/")public class CustomerAction extends ActionSupport implements ModelDriven<Customer>{

private Customer customer;

@Resource(name = "customerService") private CustomerService customerService;

@Override public Customer getModel() { if (customer == null ){ customer = new Customer(); } return customer; }

@Action(value = "customerAction_save", results = {@Result(name = SUCCESS,type = "redirect",location = "/success.jsp")}) public String save(){ customerService.save(customer); return SUCCESS; }}

九、service层代码

package com.pri.service;

import com.pri.domain.Customer;

public interface CustomerService { void save(Customer user);}//=======================================package com.pri.service.impl;

import com.pri.domain.Customer;import com.pri.dao.CustomerDao;import com.pri.service.CustomerService;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

@Service("customerService")@Transactionalpublic class CustomerServiceImpl implements CustomerService {

@Resource(name = "customerDao") private CustomerDao customerDao;

@Override public void save(Customer customer) { customerDao.save(customer); }}

十、dao层代码

package com.pri.dao;

import com.pri.domain.Customer;

public interface CustomerDao { void save(Customer customer);}

//==================================================================package com.pri.dao.impl;

import org.hibernate.SessionFactory;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import org.springframework.stereotype.Component;import javax.annotation.Resource;

@Component("myHibernateDaoSupport")public class MyHibernateDaoSupport extends HibernateDaoSupport {

@Resource(name = "sessionFactory") public void setSuperSessionFactory(SessionFactory sessionFactory){ super.setSessionFactory(sessionFactory); }}//=================================================package com.pri.dao.impl;

import com.pri.dao.CustomerDao;import com.pri.domain.Customer;import org.springframework.stereotype.Repository;

@Repository("customerDao")public class CustomerDaoImpl extends MyHibernateDaoSupport implements CustomerDao {

@Override public void save(Customer customer) { getHibernateTemplate().save(customer); }}

十一、Spring Beans Dependencies

以上就上有关基于注解的简单SSH保存用户小案例的全部内容,学步园全面介绍编程技术、操作系统、数据库、web前端技术等内容。

抱歉!评论已关闭.