zoukankan      html  css  js  c++  java
  • 基于注解的简单SSH保存用户小案例

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

    效果:

    一、导依赖包

    二、项目的目录结构

    三、web.xml配置

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     5          version="3.1">
     6 
     7     <!--懒加载过滤器,解决懒加载问题-->
     8     <filter>
     9         <filter-name>openSession</filter-name>
    10         <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
    11     </filter>
    12     <filter-mapping>
    13         <filter-name>openSession</filter-name>
    14         <url-pattern>*.action</url-pattern>
    15     </filter-mapping>
    16 
    17     <!-- struts2的前端控制器 -->
    18     <filter>
    19         <filter-name>struts</filter-name>
    20         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    21     </filter>
    22     <filter-mapping>
    23         <filter-name>struts</filter-name>
    24         <url-pattern>/*</url-pattern>
    25     </filter-mapping>
    26 
    27     <!-- spring 创建监听器 -->
    28     <listener>
    29         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    30     </listener>
    31 
    32     <context-param>
    33         <param-name>contextConfigLocation</param-name>
    34         <param-value>classpath:applicationContext.xml</param-value>
    35     </context-param>
    36 
    37 </web-app>

    四、applicationContext.xml配置

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4        xmlns:tx="http://www.springframework.org/schema/tx"
     5        xmlns:contex="http://www.springframework.org/schema/context"
     6        xsi:schemaLocation="http://www.springframework.org/schema/beans
     7         http://www.springframework.org/schema/beans/spring-beans.xsd
     8         http://www.springframework.org/schema/tx
     9         http://www.springframework.org/schema/tx/spring-tx.xsd
    10         http://www.springframework.org/schema/context
    11         http://www.springframework.org/schema/context/spring-context.xsd">
    12 
    13     <!-- 打开注解扫描开关 -->
    14     <contex:component-scan base-package="com.pri"/>
    15 
    16     <!-- 以下是属于hibernate的配置 -->
    17     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    18         <property name="driverClass" value="com.mysql.jdbc.Driver"/>
    19         <property name="jdbcUrl" value="jdbc:mysql:///ssh_demo1?useSSL=false"/>
    20         <property name="user" value="root"/>
    21         <property name="password" value=""/>
    22     </bean>
    23 
    24     <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    25         <!--1、核心配置-->
    26         <property name="dataSource" ref="dataSource"/>
    27 
    28         <!-- 2、可选配置-->
    29         <property name="hibernateProperties">
    30             <props>
    31                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
    32                 <prop key="hibernate.show_sql">true</prop>
    33                 <prop key="hibernate.format_sql">true</prop>
    34                 <prop key="hibernate.hbm2ddl.auto">update</prop>
    35             </props>
    36         </property>
    37         <!-- 3、扫描映射文件 -->
    38         <property name="packagesToScan" value="com.pri.domain"></property>
    39     </bean>
    40 
    41     <!--开启事务控制-->
    42     <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    43         <property name="sessionFactory" ref="sessionFactory"></property>
    44     </bean>
    45     <tx:annotation-driven transaction-manager= "transactionManager"/>
    46 </beans>

    五、log4j.properties配置

    #设置日志记录到控制台的方式
    log4j.appender.std=org.apache.log4j.ConsoleAppender
    #out以黑色字体输出,err以红色字体输出
    log4j.appender.std.Target=System.err
    log4j.appender.std.layout=org.apache.log4j.PatternLayout
    log4j.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.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    #日志输出的级别,以及配置记录方案,级别:error > warn > info>debug>trace
    log4j.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>

    七、实体层代码

     1 package com.pri.domain;
     2 
     3 import javax.persistence.*;
     4 
     5 
     6 @Entity
     7 @Table(name = "customer")
     8 public class Customer {
     9     @Id
    10     @Column(name = "userId")
    11     @GeneratedValue(strategy = GenerationType.IDENTITY)
    12     private Integer userId;
    13 
    14     @Column(name = "name")
    15     private String name;
    16     @Column(name = "age")
    17     private Integer age;
    18 
    19     public Integer getUserId() {return userId; }
    20 
    21     public void setUserId(Integer userId) {this.userId = userId;}
    22 
    23     public String getName() {return name;}
    24 
    25     public void setName(String name) {this.name = name;}
    26 
    27     public Integer getAge() {return age;}
    28 
    29     public void setAge(Integer age) {this.age = age;}
    30 }

    八、action层代码

     1 package com.pri.action;
     2 
     3 import com.pri.domain.Customer;
     4 import com.pri.service.CustomerService;
     5 import com.opensymphony.xwork2.ActionSupport;
     6 import com.opensymphony.xwork2.ModelDriven;
     7 import org.apache.struts2.convention.annotation.Action;
     8 import org.apache.struts2.convention.annotation.Namespace;
     9 import org.apache.struts2.convention.annotation.ParentPackage;
    10 import org.apache.struts2.convention.annotation.Result;
    11 import org.springframework.context.annotation.Scope;
    12 import org.springframework.stereotype.Controller;
    13 import javax.annotation.Resource;
    14 
    15 
    16 @Controller("customerAction")
    17 @ParentPackage(value = "struts-default")
    18 @Scope("prototype")
    19 @Namespace(value = "/")
    20 public class CustomerAction extends ActionSupport implements ModelDriven<Customer>{
    21 
    22     private Customer customer;
    23 
    24     @Resource(name = "customerService")
    25     private CustomerService customerService;
    26 
    27     @Override
    28     public Customer getModel() {
    29         if (customer == null ){
    30             customer = new Customer();
    31         }
    32         return customer;
    33     }
    34 
    35     @Action(value = "customerAction_save",
    36             results = {@Result(name = SUCCESS,type = "redirect",location = "/success.jsp")})
    37     public String save(){
    38         customerService.save(customer);
    39         return SUCCESS;
    40     }
    41 }

    九、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")
    @Transactional
    public 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

     

  • 相关阅读:
    ThinkPhp6.x+AntDesign+Vue前后端分离快速开发平台
    Laravel8.x+AntDesign+Vue前后端分离快速开发平台
    JavaWeb v1.0.0后台开发框架,专业版发布——细节完善,体验优化
    高并发情况下的DB重复插入解决方案随笔
    jQuery.qrcode.js客户端生成二维码,支持中文并且可以生成LOGO
    新能源车牌的问题
    OCR识别移动端的实现与应用
    在拥有vin码识别的时代,您还在傻乎乎手工录入吗?
    国内的车牌识别算法怎样选择
    一码在手运车无忧
  • 原文地址:https://www.cnblogs.com/gdwkong/p/8481496.html
Copyright © 2011-2022 走看看