struts 控制用的
hibernate 操作数据库的
spring 用解耦的
第一步:先创建一个wed项目 。
第二步:配置struts2
1.添加Struts2所需要的基本jar包到 lib目录下 包名如下图:

2.在web.xml 文件里添加struts的过滤器配置如下:《提示:struts2-2.3版本》
<?xml version="1.0" encoding="UTF-8"?>
<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">
<display-name>ssh</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3.在web.xml 文件里添加struts的过滤器配置如下:《提示:struts2-2.5版本》
<?xml version="1.0" encoding="UTF-8"?>
<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">
<display-name>ssh</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts-prepare</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareFilter</filter-class>
</filter>
<filter>
<filter-name>struts-execute</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-prepare</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts-execute</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
4.在src目录下创建struts配置文件,struts.xml,内容如下:《提示:注意配置头信息需要对应的版本》
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="struts2" extends="struts-default">
</package>
</struts>
使用Struts2的好处:1.实现了页面和代码的分离实现了mvc设计理念。2.获取表单内容,并组织生成参数对象3.根据请求的参数转发请求适当的控制器4.在控制器中调用业务接口5.将业务接口返回的结果包装起来发送给指定的视图,并由视图完成处理结果的展现6.做一些简单的校验或国际化工作第三步:配置spring
1.在lib目录下导入spring相关的jar包如下:《提示:spring跟struts结合还需要2个struts的jar包分别是:
struts2-spring-plugin-2.3.30.jar和commons-logging-1.1.3.jar》

2.在wed.xml文件下配置监听器,配置如下:
<!-- spring的监听器配置开始 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
使用Spring的好处:(1)Spring能有效地组织你的中间层对象。(2)Spring能消除在许多工程中常见的对Singleton的过多使用。(3)Spring能消除各种各样自定义格式的属性文件的需要,使配置信息一元化。(4)Spring能够帮助我们真正意义上实现针对接口编程。(5)在Spring应用中的大多数业务对象没有依赖于Spring。(6)使用Spring构建的应用程序易于单元测试。(7)Spring支持JDBC和O/R Mapping产品(Hibernate)(8)MVC Web框架,提供一种清晰,无侵略性的MVC实现方式。(9)JNDI抽象层,便于改变实现细节,可以方便地在远程服务和本地服务间切换。(10)简化访问数据库时的例外处理。(11)Spring能使用AOP提供声明性事务管理,可以不直接操作JTA也能够对事务进行管理。(12)提供了JavaMail或其他邮件系统的支持。
第四步:配置hibernate
1.在lib目录里导入hibernate相关的jar包如下:

2.在entity包下创建实体类
1 package ssh.entity;
2
3 import java.math.BigDecimal;
4 import java.util.Date;
5
6 /*
7 * 跟数据库表一致,作为一个java对象
8 * 1个对象代表的是数据库表中的一行记录
9 * 1个属性代表的是表中的一个字段
10 */
11 public class BookCard {
12 private int cid ;
13 private String name;
14 private String sex ;
15 private Date cardDate;
16 private BigDecimal deposit;
17
18 //定义get()、set()方法
19 public int getCid() {
20 return cid;
21 }
22 public void setCid(int cid) {
23 this.cid = cid;
24 }
25 public String getName() {
26 return name;
27 }
28 public void setName(String name) {
29 this.name = name;
30 }
31 public String getSex() {
32 return sex;
33 }
34 public void setSex(String sex) {
35 this.sex = sex;
36 }
37 public Date getCardDate() {
38 return cardDate;
39 }
40 public void setCardDate(Date cardDate) {
41 this.cardDate = cardDate;
42 }
43 public BigDecimal getDeposit() {
44 return deposit;
45 }
46 public void setDeposit(BigDecimal deposit) {
47 this.deposit = deposit;
48 }
49
50 }
在entity创建实体类对应的xxx..hbm.xml映射文件。
<?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 6 <hibernate-mapping> 7 <class name="ssh.entity.BookCard" table="BookCard"> 8 <!-- 卡号 --> 9 <id name="cid" column="cid"> 10 <generator class="native"></generator> 11 </id> 12 <!-- 姓名 --> 13 <property name="name" column="name"></property> 14 <!-- 性别 --> 15 <property name="sex" column="sex"></property> 16 <!-- 办卡日期 --> 17 <property name="cardDate" column="cardDate"></property> 18 <!-- 押金 --> 19 <property name="deposit" column="deposit"></property> 20 </class> 21 </hibernate-mapping>
3.应用IOC实现DAO接口
在Dao接口实现类里IndexDaoImpl定义一个sessionFactory的属性提供一个set的方法,方便在spring里注入 注入方式如下:
<bean id="myDao" class="dao.IndexDaoImpl" scope="prototype">
<property name="sessionFactory" ref="mysessionFactory"></property>
</bean>
<!-- mysql hibernate配置 -->
<!-- 注入sessionFactory -->
<bean id="mysessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 注入连接池,包含了数据库用户名,密码等等信息 -->
<property name="dataSource" ref="myDataSource2"></property>
<!-- 配置Hibernate的其他的属性 -->
<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.connection.autocommit">false</prop>
<!-- 开机自动生成表 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>entity/xxx.hbm.xml</value>
</list>
</property>
</bean>
<bean id="myDataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/CardDB"></property>
<property name="user" value="root"></property>
<property name="password" value="123456"></property>
</bean>
使用hibernate的好处:
1.连接数据库不用我们来管理。
2.原来是对表操作,现在是对对象操作。
环境第搭好了下面可写代码了
第五步 编写IndexAction(action类)。
1 package ssh.action;
2
3 import java.text.DecimalFormat;
4 import java.util.List;
5
6 import com.opensymphony.xwork2.ActionContext;
7 import com.opensymphony.xwork2.ActionSupport;
8
9 import ssh.entity.BookCard;
10 import ssh.service.IndexService;
11
12 //创建IndexAction(action类)继承ActionSupport接口
13 public class IndexAction extends ActionSupport {
14
15 private static final long serialVersionUID = 1L;
16
17 //声明service,但不给它创建具体的实现类的实例,
18 private IndexService is = null;
19 //添加set()方法
20 public void setIs(IndexService is) {
21 this.is = is;
22 }
23
24 //编写execute()方法
25 public String execute() {
26
27 //获取IndexService实例,调用getAllBookCard()方法
28 //将结果保存到List集合里
29 List<BookCard> myBookCardList = is.getAllBookCard();
30
31 //将查询出来的结构集打印到控制台
32 System.out.println("结果集:"+myBookCardList.size());
33
34 //获取Context上下文对象
35 ActionContext ac = ActionContext.getContext();
36 //将myBookCardList集合添加到上下文对象里
37 ac.put("myBookCardList", myBookCardList);
38
39 //返回一个字符串
40 return "success";
41 }
42
43 //金额格式转换
44 public String formatDouble(double s){
45 DecimalFormat fmat=new DecimalFormat("\u00A4##.0");
46 return fmat.format(s);
47 }
48
49 }
第六步:在ssh.service包里编写IndexService(接口类)和IndexServiceImpl(实现类)。

IndexService(接口类):
1 package ssh.service;
2
3 import java.util.List;
4
5 import ssh.dao.IndexDao;
6 import ssh.entity.BookCard;
7
8 //创建一个IndexService接口类
9 public interface IndexService {
10
11
12 public List<BookCard> getAllBookCard();
13
14 }
复制代码
IndexServiceImpl(实现类):
1 package ssh.service;
2
3 import java.util.List;
4
5 import ssh.dao.IndexDao;
6 import ssh.entity.BookCard;
7
8 //创建IndexServiceImpl(实现类)实现IndexService接口
9 public class IndexServiceImpl implements IndexService {
10
11 //dao实例使用注入方式
12 private IndexDao id;
13 //用于注入使用
14 public void setId(IndexDao id) {
15 this.id = id;
16 }
17
18
19 @Override
20 public List<BookCard> getAllBookCard() {
21 //本类应该编写业务逻辑的代码,
22 //但本例没有业务逻辑,就不用写。
23
24 //访问数据库的代码,不会出现在service这一层
25 //交给dao来操作数据库
26 List<BookCard> myBookCardList = id.getAllBookCard();
27
28 //进行其它的业务逻辑操作,比如增加多一个选项,是否过期
29 //本例不需要
30 //....
31
32 return myBookCardList;
33 }
34
35 }
IndexDao(接口类):
1 package ssh.dao;
2
3 import java.util.List;
4
5 import ssh.entity.BookCard;
6
7 //创建IndexDao(接口类)
8 public interface IndexDao {
9
10 public List<BookCard> getAllBookCard();
11
12 }
IndexDaoImpl(实现类):
1 package ssh.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
9 import ssh.entity.BookCard;
10
11 //创建IndexDaoImpl(实现类)实现IndexDao接口
12 public class IndexDaoImpl implements IndexDao {
13
14 //在SSH的设计理念:要使用某个实例,那么就定义声明一个对象,然后
15 //给它添加set方法(用于spring注入进来)
16 //实现不要关注这个实例来自于那里,以及怎么创建,或者它是谁
17 private SessionFactory sessionFactory;
18
19 public void setSessionFactory(SessionFactory sessionFactory) {
20 this.sessionFactory = sessionFactory;
21 }
22
23
24 @Override
25 public List<BookCard> getAllBookCard() {
26
27 //sessionFactory这个实例可以自己按常规的hibernate传统写法创建
28 //也可以交给spring去托管
29 /*
30 Configuration cfg = new Configuration().configure();
31 sessionFactory = cfg.buildSessionFactory();*/
32
33 //获取session
34 Session session = sessionFactory.openSession();
35
36 //后面当使用JPA的时候,EntityManager 类似于 Session
37 Query query = session.createQuery("from BookCard");
38
39 //将所有的数据查询出来并放到List集合里
40 List<BookCard> list = query.getResultList();
41
42 //将集合遍历循环
43 for(BookCard bookCard:list){
44 //打印输出到控制台
45 System.out.println(bookCard);
46 }
47
48 //关闭session
49 session.close();
50 //关闭sessionFactory
51 sessionFactory.close();
52 //返回list集合
53 return list;
54
55 }
56
57 }
运行结果:
浏览器显示:

控制台输出:

来源:https://www.cnblogs.com/zhaowancheng/p/5841591.html