• SSH框架搭建过程


    什么是SSH?

    SSH对应 struts spring hibernate
    struts 采用MVC模式,主要是作用于用户交互
    spring 采用IOC和AOP~作用比较抽象,是用于项目的松耦合
    hibernate 是对象持久化框架,其实就是实体类和数据库表建立关系,操作类就会触发相应的sql语句,可以不用写任何sql语句,完成数据库编程(引自百度知道)

    SSH就是Struts + Spring + Hibernate 3个Java框架的集合,现在Java开发中常用的框架组合。用来开发后台,与前台和数据库进行数据交互。最初学这个是为了写JSP。

    事先需要做的准备工作:

    1.安装jdk,这里就不多说了,我使用的是jdk1.8

    2.需要用到的工具:eclipse,mysql等等

    好,接下来我们就开始创建项目了。

    第一步:创建一个叫做ssh的项目吧。但是得提醒大家不要忘记勾选web.xml文件,请看如下截图。

    第二步:搭建struts2环境

    首先;引入struts2的包

    接下来需要修改WEB-INF里面的web.xml文件

    由于待会我们就要引入spring了,所以这个监听器我们这里一块配置

    第三小步就是添加我们的struts.xml文件了

     

    接下来我们需要创建一个action类,名字就叫做indexAction吧

    中间的话我们先相应的建一个dao类和service类

    刚刚的那个注入,也就替换了以前的new对象。

    接下来我们来先建jsp文件,我们先不写里面的内容,只是把流程弄出来

    第三步:搭建spring和hibernate的环境

    首先我们也是需要导包的

    这里我们的文件和源码是不需要导进来的

    到这里包并没有导完,还需要导struts2-spring的包

    如下:

    接着我们导hibernate需要的包

    接着我们来看看我们的实现类

    同理dao的实现类也是一样的

    hibernate包导完了我们就可以用sessionFactory注入了

    接下来我们编写applicationContext.xml文件

    看到实体类的映射文件我这里就随便举个例子说下

    接着我们继续弄applicateContext.xml文件

    如上图那样的话我们需要在自己写一份jdbc的属性,所以我们需要在头部导入

    接着我们需要创建一份jdbc.properties

    现在我们来运行,发现程序报错了

    然后发现是c3p0的架包没有导入

    再来运行

    看到这里我们就知道框架搭建成功了

     下面是我画的一张流程图,大家可以参考下

    接下来我来跟大家分享用EntityManagerFactory来实现上面一样的功能

    由于这样的话我们需要在dao的实现类注入EntityManagerFactory,

    代码如下:

    复制代码
    package dao;
    import java.util.List;
    
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.PersistenceContext;
    
    import entity.BookCard;
    
    
    public class IndexDaoImpl implements IndexDao {
        //注入:
        //private SessionFactory sf;
        
        //public void setSf(SessionFactory sf) {
            //this.sf = sf;
        //}
        @PersistenceContext
        private EntityManagerFactory emf;
        
    
        public void setEmf(EntityManagerFactory emf) {
            this.emf = emf;
        }
    
        @Override
        public List<BookCard> getAllBookCard(){
            //这个是没有交给spring去做的实例化对象
            //sf=new Configuration().configure().buildSessionFactory();
            //Session session=sf.openSession();//实例化session
            //session.beginTransaction();//实例化一个事务
            /*List<BookCard> list=
                    session.createQuery("from BookCard").getResultList();
            session.getTransaction().commit();
            session.close();
            //sf.close();
             
    */        
            EntityManager entityManager=emf.createEntityManager();
            List<BookCard> list=entityManager.createQuery("from BookCard",BookCard.class).getResultList();
            entityManager.close();
            //emf.close();
            return list;
        }
    }
    复制代码

    大家可以做个对比,其实大同小异

    但是EntityManagerFactory需要persistence.xml

    代码如下

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0"  
        xmlns:persistence="http://java.sun.com/xml/ns/persistence"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_2_1.xsd ">
        
        <persistence-unit name="jpa" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider><!-- 驱动实现类,入口类 -->
        
        <mapping-file>entity/BookCard.hbm.xml</mapping-file>
        <properties>
          
             <!-- Common properties -->
             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"></property>
             <property name="hibernate.show_sql" value="true"></property>
             <property name="hibernate.format_sql" value="true"></property>
             <property name="hibernate.hbm2dll.auto" value="update"></property>
             
             <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"></property>
             <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/CardDB"></property>
             <property name="hibernate.connection.username" value="root"></property>
             <property name="hibernate.connection.password" value="123456"></property>
          
            
          </properties>
      </persistence-unit>
    </persistence>
    复制代码

    当然也别忘了applicationContext.xml里面需要配置,如下:

    <bean id="myEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">  
            <property name="persistenceUnitName" value="jpa" />  
        </bean> 

    这里还需要说的一个就是,如果实体类.hbm.xml删除了,那就要配着注解才可以使用。

    下面是实体类的映射文件,如下:

    复制代码
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package="entity">
        <!-- 这里的名和数据库那边一一对应,不写则默认一样 -->
        <class name="BookCard" table="BookCard">
            <id name="cid" column="cid">
                <generator class="increment"/>
            </id>
            <property name="name"></property>
            <property name="sex"></property>
            <property name="cardDate" column="cardDate"></property>
            <property name="deposit"></property>
        </class>
    </hibernate-mapping>
    复制代码

    再次声明一下,如果删除了映射文件,那么就要在实体类那边注解。

     现在,我们把实体类的映射文件删了,但是我们要在实体类那边加上注解,如下:

    复制代码
    package entity;
    
    import java.math.BigDecimal;
    import java.util.Date;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    @Entity
    @Table(name="BookCard")//如果不加则表明类名和表名相同
    public class BookCard {
        private int cid  ;
        private String name;
        private String sex ;
        private Date cardDate;
        private BigDecimal deposit;
        
        public BookCard() {
            super();
        }
        public BookCard(String name, String sex, Date cardDate, BigDecimal deposit) {
            super();
            this.name = name;
            this.sex = sex;
            this.cardDate = cardDate;
            this.deposit = deposit;
        }
    
        @Id
        @GeneratedValue(generator="increament")
        public int getCid() {
            return cid;
        }
        public void setCid(int cid) {
            this.cid = cid;
        }
        
        @Column
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        
        @Column
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        
        @Column
        public Date getCardDate() {
            return cardDate;
        }
        public void setCardDate(Date cardDate) {
            this.cardDate = cardDate;
        }
        
        @Column
        public BigDecimal getDeposit() {
            return deposit;
        }
        public void setDeposit(BigDecimal deposit) {
            this.deposit = deposit;
        }
    
    }
    复制代码

    运行结果如下:

     


    SSH框架搭建步骤很多,但是不难,因为MyEclipse已经帮我们做了大部分的工作,如果纯手动添加这个框架的话,那真是够复杂的了。不过涉及的知识挺多的,适合有一定基础的人。下面详细介绍一下SSH框架的搭建步骤并且解决了几个我在搭建过程中遇到的问题。

  • 相关阅读:
    JavaScript数组方法大全
    梁凤波工作周记3月10号
    JS解析联动JSON数据
    angularjs select 获取选中的值
    外部变量获取Ajax后台返回的参数值(success)
    ionic $ionicModal使用方法
    angularjs select ng-options延迟更新(联动)
    ionic使用iframe范围外部站点
    angularjs select 三级联动
    Ionic start 创建项目报错
  • 原文地址:https://www.cnblogs.com/guoxingbo/p/5845551.html
Copyright © 2020-2023  润新知