spring+Struts2+hibernate(SSH)整合框架是一种非常典型与实用的Web项目MVC架构,其中: Spring主要通过控制反转(IOC)与依赖注入(DI)控制对象的创建与维护(概念详解可参看博客IOC与DI),与实现面向切片编程(AOP),核心配置文件为:applicationContext.xml。 Struts2是MVC的Controller控制器,主要控制请求与对应业务逻辑、视图的对应关系,核心配置文件为:struts.xml。 Hibernate是持久层框架,主要用于与数据库交互,它的优势在于它把实体类与数据库表建立了映射关系,在进行数据库操作时省去了繁琐的sql语句的构造过程与结果集的配置,使编程者可以以面向对象的思路来方便的进行编程,核心配置文件为:hibernate.cfg.xml与*.hbm.xml。
Javabean的基本构成,包括与数据库表列名对应的私有成员变量,有参与无参的构造方法,成员变量对应的get、set方法,很简单,在此不再赘述。本例中包括User类(用于登录)与Info类(用于增删改查测试)。
用于测试数据库操作是否正确,以TestUser类为例:
public class TestUser { //获取Spring资源文件 ApplicationContext ac = new FileSystemXmlApplicationContext("classpath:applicationContext.xml"); SessionFactory sessionFactory = (SessionFactory) ac.getBean("sessionFactory");; Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); @Test public void testInsert() throws Exception{ User user = new User("Alin", "123456", 1, 0); session.save(user); transaction.commit(); session.close(); } @Test public void testDelete() throws Exception{ User user = new User(); user.setUser_id(3); session.delete(user); transaction.commit(); session.close(); } @Test public void testUpdate() throws Exception{ User user = new User("rose", "666666", 1, 0); user.setUser_id(2); session.update(user); transaction.commit(); session.close(); } @Test public void testSelect1() throws Exception{ //当查询全部字段时,可省略select * Query query = session.createQuery("from User"); List<User> users = query.list(); for (User user : users) { System.out.println(user.toString()); } } @Test public void testSelect2() throws Exception{ //查询部分字段 Query query = session.createQuery("select new User(username,age,priority) from User"); List<User> users = query.list(); for (User users2 : users) { System.out.println(users2.toString()); } } }以UserService与UserServiceImpl为例:
public interface UserService { public User loginServce(User user); } public class UserServiceImpl implements UserService { //hibernate的SessionFactory对象由spring自动注入,入口为getSessionFactory方法 private SessionFactory sessionFactory; @Override public User loginServce(User user) { //执行数据库查询 String sql = "from User where username = ? and password = ?"; @SuppressWarnings("unchecked") List<User> list = sessionFactory.getCurrentSession().createQuery(sql) .setString(0, user.getUsername()) .setString(1, user.getPassword()).list(); if(list != null && list.size() == 1){ //返回结果 return list.get(0); } return null; } public SessionFactory getSessionFactory() { return sessionFactory; } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } }以UserAction为例:
public class UserAction extends ActionSupport implements ModelDriven<User>{ //用于ModelDriven填充对象,入口为getModel方法 private User user; //用于spring自动注入,入口为setUserService方法 private UserService userService; private static final long serialVersionUID = 1L; //方法名对应login_*.action中的*通配符 public String login(){ //调用service方法,返回从数据库取出的数据 User returnUser = userService.loginServce(user); if(returnUser != null){ //获取当前request对象 HttpServletRequest request = ServletActionContext.getRequest(); //将对象装入session request.getSession().setAttribute("User", user); //返回视图 return SUCCESS; } return ERROR; } public UserService getUserService(){ return userService; } public void setUserService(UserService userService){ this.userService = userService; } @Override public User getModel() { user = new User(); return user; } }到目前为止,一个简单的应用已经被我们搭建起来了。其他同类型的增删改查APP完全可以照着来写,非常愉快轻松。让我们看看效果图如何: