用Eclipse搭建ssh框架

时间:2023-03-08 16:40:30

问:ssh是哪三大框架,以及他们的作用是什么?

答:分别是struts,spring,hibernate.

struts的作用是:是web层,其核心是mvc模式,他可以自动获取参数,自动类型转换,自动页面跳转(将业务接口返回的结果包装起来发送给指定的视图,并由视图完成处理结果的展现),还有一个就是做一些简单的校验或者是国际化工作。

spring的作用是:是业务层,采用IOC和AOP,是用于项目解耦。

hibernate的作用是:数据层,数据库的封装

事先需要做的准备工作:

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

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

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

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

用Eclipse搭建ssh框架

用Eclipse搭建ssh框架

第二步:搭建struts2环境

首先;引入struts2的包

用Eclipse搭建ssh框架

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

用Eclipse搭建ssh框架

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

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

用Eclipse搭建ssh框架

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

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

用Eclipse搭建ssh框架

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

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

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

首先我们也是需要导包的

用Eclipse搭建ssh框架

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

用Eclipse搭建ssh框架

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

如下:

用Eclipse搭建ssh框架

接着我们导hibernate需要的包

用Eclipse搭建ssh框架

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

用Eclipse搭建ssh框架

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

用Eclipse搭建ssh框架

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

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

用Eclipse搭建ssh框架

用Eclipse搭建ssh框架

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

用Eclipse搭建ssh框架

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

用Eclipse搭建ssh框架

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

用Eclipse搭建ssh框架

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

用Eclipse搭建ssh框架

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

用Eclipse搭建ssh框架

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

用Eclipse搭建ssh框架

再来运行

用Eclipse搭建ssh框架

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

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

用Eclipse搭建ssh框架

接下来我来跟大家分享用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

用Eclipse搭建ssh框架

代码如下

<?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;
} }

运行结果如下:

用Eclipse搭建ssh框架

用Eclipse搭建ssh框架

用Eclipse搭建ssh框架