引言
SSH框架(Struts2 + Spring + Hibernate)是企业级开发中常用的一种技术组合。它通过整合Struts2、Spring和Hibernate三个框架,实现了表现层、业务逻辑层和数据访问层的分离,提高了开发效率和代码的可维护性。本文将带领读者从零开始,通过一个实战项目,轻松掌握SSH框架的企业级开发技巧。
环境准备
在开始之前,我们需要准备以下环境:
- Java开发环境:安装JDK 1.8及以上版本。
- IDE:推荐使用IntelliJ IDEA或Eclipse。
- 数据库:MySQL 5.7及以上版本。
- SSH框架相关依赖:Struts2、Spring、Hibernate、MyBatis等。
项目结构
以下是一个简单的SSH框架项目结构示例:
- src
- main
- java
- com
- myproject
- action
- service
- dao
- entity
- resources
- applicationContext.xml
- struts.xml
- hibernate.cfg.xml
- test
- java
- com
- myproject
- test
- webapp
- WEB-INF
- web.xml
- pages
- index.jsp
- list.jsp
- detail.jsp
- assets
- css
- js
- images
实战项目:图书管理系统
以下将使用SSH框架开发一个简单的图书管理系统,实现图书的增删改查功能。
1. 创建实体类(Entity)
首先,我们需要创建一个实体类Book,用于表示图书信息。
package com.myproject.entity;
public class Book {
private Integer id;
private String name;
private String author;
private String isbn;
// getter和setter方法
}
2. 创建数据访问层(DAO)
接下来,我们需要创建一个数据访问层接口BookDao,用于操作数据库中的图书信息。
package com.myproject.dao;
public interface BookDao {
void addBook(Book book);
void deleteBook(Integer id);
void updateBook(Book book);
Book getBookById(Integer id);
List<Book> getAllBooks();
}
然后,我们实现这个接口,使用Hibernate进行数据库操作。
package com.myproject.dao.impl;
import com.myproject.entity.Book;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import java.util.List;
public class BookDaoImpl implements BookDao {
private SessionFactory sessionFactory;
public void addBook(Book book) {
Session session = sessionFactory.getCurrentSession();
session.save(book);
}
public void deleteBook(Integer id) {
Session session = sessionFactory.getCurrentSession();
Book book = session.get(Book.class, id);
session.delete(book);
}
public void updateBook(Book book) {
Session session = sessionFactory.getCurrentSession();
session.update(book);
}
public Book getBookById(Integer id) {
Session session = sessionFactory.getCurrentSession();
return session.get(Book.class, id);
}
public List<Book> getAllBooks() {
Session session = sessionFactory.getCurrentSession();
Query<Book> query = session.createQuery("from Book");
return query.list();
}
}
3. 创建业务逻辑层(Service)
接下来,我们需要创建一个业务逻辑层接口BookService,用于处理图书的增删改查业务。
package com.myproject.service;
public interface BookService {
void addBook(Book book);
void deleteBook(Integer id);
void updateBook(Book book);
Book getBookById(Integer id);
List<Book> getAllBooks();
}
然后,我们实现这个接口,调用数据访问层的方法。
package com.myproject.service.impl;
import com.myproject.dao.BookDao;
import com.myproject.entity.Book;
import com.myproject.service.BookService;
import java.util.List;
public class BookServiceImpl implements BookService {
private BookDao bookDao;
public void addBook(Book book) {
bookDao.addBook(book);
}
public void deleteBook(Integer id) {
bookDao.deleteBook(id);
}
public void updateBook(Book book) {
bookDao.updateBook(book);
}
public Book getBookById(Integer id) {
return bookDao.getBookById(id);
}
public List<Book> getAllBooks() {
return bookDao.getAllBooks();
}
}
4. 创建表现层(Action)
最后,我们需要创建一个表现层类BookAction,用于接收用户请求,调用业务逻辑层的方法,并返回结果。
package com.myproject.action;
import com.myproject.entity.Book;
import com.myproject.service.BookService;
import com.opensymphony.xwork2.ActionSupport;
import java.util.List;
public class BookAction extends ActionSupport {
private BookService bookService;
private Book book;
private List<Book> bookList;
public String list() {
bookList = bookService.getAllBooks();
return "list";
}
public String add() {
bookService.addBook(book);
return "list";
}
public String delete() {
bookService.deleteBook(Integer.parseInt(getParameter("id")));
return "list";
}
public String update() {
bookService.updateBook(book);
return "list";
}
// getter和setter方法
}
5. 配置文件
接下来,我们需要配置SSH框架的配置文件。
- web.xml:配置Struts2过滤器。
<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>
- struts.xml:配置Action映射。
<package name="default" extends="struts-default">
<action name="book_*" class="com.myproject.action.BookAction" method="{1}">
<result name="list">/pages/list.jsp</result>
</action>
</package>
- applicationContext.xml:配置Spring框架。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<property name="packagesToScan" value="com.myproject.entity" />
</bean>
<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/bookdb" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<!-- 配置BookDao -->
<bean id="bookDao" class="com.myproject.dao.impl.BookDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 配置BookService -->
<bean id="bookService" class="com.myproject.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao" />
</bean>
</beans>
- hibernate.cfg.xml:配置Hibernate框架。
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/bookdb</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<mapping class="com.myproject.entity.Book" />
</session-factory>
</hibernate-configuration>
总结
通过以上步骤,我们成功使用SSH框架开发了一个简单的图书管理系统。在这个过程中,我们学习了SSH框架的基本原理和开发流程,掌握了企业级开发技巧。希望本文能对您有所帮助。
