zoukankan      html  css  js  c++  java
  • 写了好多次SSH现在对于框架还是有一定的基础了,但是对于框架下我们该如何进行操作呢???

    首先,对于一个老手来说,我们最快捷的就是ctrl+c和ctrl+v,但是我们自己应该复制哪一些代码呢?

    1、在我们导完包之后,我们需要写的就是web.xml,在其中,我们要有过滤器及映射和监听器.

    web.xml文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
     3   <display-name>news</display-name>
     4   <welcome-file-list>
     5     <welcome-file>default.jsp</welcome-file>
     6   </welcome-file-list>
     7   <filter>
     8     <filter-name>struts2</filter-name>
     9     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    10   </filter>
    11   <filter-mapping>
    12     <filter-name>struts2</filter-name>
    13     <url-pattern>/*</url-pattern>
    14   </filter-mapping>
    15   <context-param>
    16     <param-name>contextConfigLocation</param-name>
    17     <param-value>classpath:applicationContext.xml</param-value>
    18   </context-param>
    19   <listener>
    20     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    21   </listener>
    22 </web-app>

    2、在我们做好所有的准备之后,就是定义所有的包、类、接口、applicationContext.xml等。

    按照一般的习惯我们定义的包名也有一定的技巧的.如图:

    例如下面我们定义的一个项目(jsp----->struts----->action----->service----->dao----->sessionFactory----->applicationContext.xml)

    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    [这是我自己从中总结出来的-----在此之外,还有product.entity实体类]

    product.action包

    package product.action;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Controller;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    
    import product.entity.Product;
    import product.service.ProService;
    
    @SuppressWarnings("serial")
    @Controller("proAction")
    @Scope("prototype")
    public class ProAction extends ActionSupport {
        @Autowired
        private ProService ps;
        
        private Integer[] proId;
        public void setProId(Integer[] proId) {
            this.proId = proId;
        }
    
        public String showAllPro(){
            List<Product> proList = ps.getAllPro();
            ActionContext.getContext().put("proList", proList);
            return "data";
        }
        
        public String delPro(){
            ps.delPro(proId);
            return "deleteOK";
        }
    }


    product.entity包(大家也可以看到,我在entity中使用了注解,如果不熟悉注解的可以进入这个网址
     1 package product.entity;
     2 
     3 import javax.persistence.Column;
     4 import javax.persistence.Entity;
     5 import javax.persistence.GeneratedValue;
     6 import javax.persistence.GenerationType;
     7 import javax.persistence.Id;
     8 import javax.persistence.Table;
     9 
    10 @Entity
    11 @Table(name="t_product")
    12 public class Product {
    13     private    Integer proId;
    14     private String proName;
    15     private Float proPrice;
    16     private Integer proCount;
    17     private String proDesc;
    18     
    19     @Id
    20     @GeneratedValue(strategy=GenerationType.IDENTITY)
    21     public Integer getProId() {
    22         return proId;
    23     }
    24     public void setProId(Integer proId) {
    25         this.proId = proId;
    26     }
    27     
    28     @Column(name="proName",nullable=false,length=50)
    29     public String getProName() {
    30         return proName;
    31     }
    32     public void setProName(String proName) {
    33         this.proName = proName;
    34     }
    35     
    36     @Column(name="proPrice",nullable=false)
    37     public Float getProPrice() {
    38         return proPrice;
    39     }
    40     public void setProPrice(Float proPrice) {
    41         this.proPrice = proPrice;
    42     }
    43     
    44     @Column(name="proCount",nullable=false)
    45     public Integer getProCount() {
    46         return proCount;
    47     }
    48     public void setProCount(Integer proCount) {
    49         this.proCount = proCount;
    50     }
    51     
    52     @Column(name="proDesc",nullable=false,length=250)
    53     public String getProDesc() {
    54         return proDesc;
    55     }
    56     public void setProDesc(String proDesc) {
    57         this.proDesc = proDesc;
    58     }
    59 
    60 
    61 }
    
    
    
    product.dao包(包含接口和实现类)
    【接口】
     1 package product.dao;
     2 
     3 import java.util.List;
     4 
     5 import product.entity.Product;
     6 
     7 public interface ProDao {
     8     public List<Product> getAllPro();
     9     
    10     public void delPro(Integer proId[]);
    11 }

     可以看到,和数据库进行交互的就是dao包,在dao包中,我们可以定义最原始的方法,然后通过service进行逻辑处理,最后通过action的返回字符串在struts中进行跳转到对应的jsp或者其他的页面.

    【实现类】
     1 package product.dao;
     2 
     3 import java.util.List;
     4 
     5 import org.hibernate.Session;
     6 import org.hibernate.SessionFactory;
     7 import org.hibernate.query.Query;
     8 import org.springframework.beans.factory.annotation.Autowired;
     9 import org.springframework.context.annotation.Scope;
    10 import org.springframework.stereotype.Repository;
    11 
    12 import product.entity.Product;
    13 
    14 @Repository
    15 @Scope("prototype")
    16 public class ProDaoImpl implements ProDao {
    17     @Autowired
    18     private SessionFactory sf;
    19     
    20     @Override
    21     public List<Product> getAllPro() {
    22         // TODO Auto-generated method stub
    23         
    24         Session session = sf.getCurrentSession();
    25         
    26         @SuppressWarnings("unchecked")
    27         Query<Product> query = session.createQuery("from Product");
    28         
    29         return query.getResultList();
    30     }
    31 
    32     @Override
    33     public void delPro(Integer proId[]) {
    34         // TODO Auto-generated method stub
    35         Session session = sf.getCurrentSession();
    36         
    37         @SuppressWarnings("unchecked")
    38         Query<Product> query = session.createQuery("from Product where proId=:myid");
    39         //System.out.println("proId:"+proId);
    40         for(Integer id : proId){
    41             query.setParameter("myid", id);
    42 
    43             if(query.getResultList().size()>0){
    44                 Product pro = query.getResultList().get(0);
    45                 session.delete(pro);
    46             }
    47         }
    48     }
    49 }

    product.service包
    【接口】--------在这里我们可以对比于上面dao包中的接口,我们清晰的看到代码一模一样
    package product.service;
    
    import java.util.List;
    
    import product.entity.Product;
    
    public interface ProService {
        public List<Product> getAllPro();
        
        public void delPro(Integer proId[]);
    }

    【实现类】

     1 package product.service;
     2 
     3 import java.util.List;
     4 
     5 import org.springframework.beans.factory.annotation.Autowired;
     6 import org.springframework.context.annotation.Scope;
     7 import org.springframework.stereotype.Service;
     8 import org.springframework.transaction.annotation.Transactional;
     9 
    10 import product.dao.ProDao;
    11 import product.entity.Product;
    12 
    13 @Transactional
    14 @Service
    15 @Scope("prototype")
    16 public class ProServiceImpl implements ProService {
    17     @Autowired
    18     private ProDao pd;
    19     
    20     @Override
    21     @Transactional(readOnly=true)
    22     public List<Product> getAllPro() {
    23         // TODO Auto-generated method stub
    24         return pd.getAllPro();
    25     }
    26 
    27     @Override
    28     public void delPro(Integer proId[]) {
    29         //System.out.println("proId:"+proId);
    30         pd.delPro(proId);
    31     }
    32 }
    
    
    
    还有我们数据库的一些信息。我们使用什么数据库,以及它的参数
    jdbc.properties文件
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/news
    jdbc.user=root
    jdbc.password=123456
    

        如果是用mysql,则复制楼上代码,
        如果是oracle则复制楼下代码。

    #oracle jdbc_oracle.driver
    =oracle.jdbc.driver.OracleDriver jdbc_oracle.url=jdbc:oracle:thin@127.0.0.1:1521:orcl jdbc_oracle.user=news jdbc_oracle.password=123456
    
    
    
    而struts中,我们可以进行跳转,对应action中不同返回额字符串
    struts.xml
     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     4     "http://struts.apache.org/dtds/struts-2.3.dtd">
     5 <struts>
     6     <constant name="struts.objectFactory" value="spring" />
     7 
     8     <constant name="struts.ui.theme" value="simple"></constant>
     9     
    10     <!-- 先定义一个包 -->
    11     <package name="mypck001" extends="struts-default">
    12         <action name="ProAction_*" class="proAction" method="{1}">
    13             <result name="data">/WEB-INF/jsp/index.jsp</result>
    14             <result name="deleteOK" type="redirectAction">ProAction_showAllPro</result>
    15         </action>        
    16     </package>
    17</struts>
    
    
    
    最后面就是最容易,但也是最容易出错的applicationContext.xml文件-----(但是我们可以复制粘贴,唯独需要改动的就是自动扫描包的【包名】)
    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" xmlns:p="http://www.springframework.org/schema/p"
     4     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
     5     xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
     6     xsi:schemaLocation="    
     7             http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd  
     8             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  
     9             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
    10             http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd  
    11             http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
    12 
    13     <!-- 原理:自动注入processor解析器,用来解析注解 -->
    14     <!-- <context:annotation-config/> -->
    15 
    16     <!-- 自动扫描包,也会自动注入解释器,所以不需要 context:annotation-config -->
    17     <context:component-scan base-package="product" />
    18 
    19 
    20     <!-- 引入外部属性文件 -->
    21     <context:property-placeholder location="classpath:jdbc.properties" />
    22 
    23     <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    24         <!-- 注入连接池,包含了数据库用户名,密码等等信息 -->
    25         <property name="dataSource" ref="myDataSource" />
    26 
    27         <!-- 配置Hibernate的其他的属性 -->
    28         <property name="hibernateProperties">
    29             <props>
    30                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
    31                 <prop key="hibernate.show_sql">true</prop>
    32                 <prop key="hibernate.format_sql">true</prop>
    33                 <prop key="hibernate.connection.autocommit">false</prop>
    34                 <!-- 开机自动生成表 -->
    35                 <prop key="hibernate.hbm2ddl.auto">update</prop>
    36             </props>
    37         </property>
    38         <property name="mappingResources">
    39             <list>
    40                 
    41             </list>
    42         </property>
    43         
    44         <property name="packagesToScan">
    45             <list>
    46                 <value>product.*</value>
    47             </list>
    48         </property>
    49 
    50     </bean>
    51 
    52     <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    53         <property name="driverClass" value="${jdbc.driver}" />
    54         <property name="jdbcUrl" value="${jdbc.url}" />
    55         <property name="user" value="${jdbc.user}" />
    56         <property name="password" value="${jdbc.password}" />
    57         <!-- 每300秒检查所有连接池中的空闲连接 -->
    58         <property name="idleConnectionTestPeriod" value="300"></property>
    59         <!-- 最大空闲时间,900秒内未使用则连接被丢弃。若为0则永不丢弃 -->
    60         <property name="maxIdleTime" value="900"></property>
    61         <!-- 最大连接数 -->
    62         <property name="maxPoolSize" value="2"></property>
    63 
    64     </bean>
    65     <!-- 事务管理-->
    66     <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    67         <property name="sessionFactory" ref="sessionFactory"></property>
    68     </bean>
    69     <!--  注解驱动加载 -->
    70     <tx:annotation-driven transaction-manager="transactionManager"/>
    71 
    72 
    73 </beans>
    74             
    
    
    
    当你完成复制之后,你的代码也算是完成可九成,注意修改一些需要通过加载包名或者类名进行操作的步骤代码。

    今天难得静下心来写了一个博客,求打赏求关注!!!

        如果错误请指正!
  • 相关阅读:
    ubuntu 可以用 root 登录 ftp
    正则表达式 匹配中文,英文字母和数字及_的写法!同时控制长度
    HttpUtility.UrlEncode,Server.UrlEncode 的区别
    HttpUtility.UrlEncode 方法 (String) 对 URL 字符串进行编码 NET Framework 4.6 and 4.5
    C# 多线程task
    NET Framework 4.5 有更加简便的方法 Task.Run()
    Tuple<int, int> Dictionary<string, object>妙用
    sha1加密
    MD5和sha1加密算法--散列加密技术 MD5:128bit的大整数
    3、Task.Factory属性
  • 原文地址:https://www.cnblogs.com/lhh-njq-best/p/6000355.html
Copyright © 2011-2022 走看看