SpringMVC+Hibernate+Spring整合例項(二)
阿新 • • 發佈:2019-02-14
這篇接著上篇,把沒貼完的程式碼寫完,上篇主要完成了一些公共配置和介面的東西,這篇把後臺的程式碼完成。
首先是web包下屬於的control層的類UserController,這相當於Struts中的Action,是重要的類:
package com.tgb.web; import java.io.IOException; import java.io.PrintWriter; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.tgb.entity.User; import com.tgb.manager.UserManager; @Controller @RequestMapping("/user") public class UserController { @Resource(name="userManager") private UserManager userManager; @RequestMapping("/getAllUser") public String getAllUser(HttpServletRequest request){ request.setAttribute("userList", userManager.getAllUser()); return "/index"; } @RequestMapping("/getUser") public String getUser(String id,HttpServletRequest request){ request.setAttribute("user", userManager.getUser(id)); return "/editUser"; } @RequestMapping("/toAddUser") public String toAddUser(){ return "/addUser"; } @RequestMapping("/addUser") public String addUser(User user,HttpServletRequest request){ userManager.addUser(user); return "redirect:/user/getAllUser"; } @RequestMapping("/delUser") public void delUser(String id,HttpServletResponse response){ String result = "{\"result\":\"error\"}"; if(userManager.delUser(id)){ result = "{\"result\":\"success\"}"; } response.setContentType("application/json"); try { PrintWriter out = response.getWriter(); out.write(result); } catch (IOException e) { e.printStackTrace(); } } @RequestMapping("/updateUser") public String updateUser(User user,HttpServletRequest request){ if(userManager.updateUser(user)){ user = userManager.getUser(user.getId()); request.setAttribute("user", user); return "redirect:/user/getAllUser"; }else{ return "/error"; } } }
然後是屬於manager包下的業務邏輯類,介面UserManager:
package com.tgb.manager; import java.util.List; import com.tgb.entity.User; public interface UserManager { public User getUser(String id); public List<User> getAllUser(); public void addUser(User user); public boolean delUser(String id); public boolean updateUser(User user); }
實現類UserManagerImpl:
package com.tgb.manager; import java.util.List; import com.tgb.dao.UserDao; import com.tgb.entity.User; public class UserManagerImpl implements UserManager { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public User getUser(String id) { return userDao.getUser(id); } @Override public List<User> getAllUser() { return userDao.getAllUser(); } @Override public void addUser(User user) { userDao.addUser(user); } @Override public boolean delUser(String id) { return userDao.delUser(id); } @Override public boolean updateUser(User user) { return userDao.updateUser(user); } }
最後是屬於dao包底下的DAO層,主要由Hibernate完成。介面UserDao:
package com.tgb.dao;
import java.util.List;
import com.tgb.entity.User;
public interface UserDao {
public User getUser(String id);
public List<User> getAllUser();
public void addUser(User user);
public boolean delUser(String id);
public boolean updateUser(User user);
}
實現類UserDaoImpl:
package com.tgb.dao;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import com.tgb.entity.User;
public class UserDaoImpl implements UserDao {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public User getUser(String id) {
String hql = "from User u where u.id=?";
Query query = sessionFactory.getCurrentSession().createQuery(hql);
query.setString(0, id);
return (User)query.uniqueResult();
}
@Override
public List<User> getAllUser() {
String hql = "from User";
Query query = sessionFactory.getCurrentSession().createQuery(hql);
return query.list();
}
@Override
public void addUser(User user) {
sessionFactory.getCurrentSession().save(user);
}
@Override
public boolean delUser(String id) {
String hql = "delete User u where u.id = ?";
Query query = sessionFactory.getCurrentSession().createQuery(hql);
query.setString(0, id);
return (query.executeUpdate() > 0);
}
@Override
public boolean updateUser(User user) {
String hql = "update User u set u.userName = ?,u.age=? where u.id = ?";
Query query = sessionFactory.getCurrentSession().createQuery(hql);
query.setString(0, user.getUserName());
query.setString(1, user.getAge());
query.setString(2, user.getId());
return (query.executeUpdate() > 0);
}
}
最後外加一個配置spring-beans.xml,放在config.spring包下,負責為各層依賴注入需要的物件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="com.tgb.dao.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="userManagerBase" class="com.tgb.manager.UserManagerImpl">
<property name="userDao" ref="userDao"></property>
</bean>
<!-- 此處為代理 -->
<bean name="userManager" parent="transactionProxy">
<property name="target" ref="userManagerBase"></property>
</bean>
</beans>
到此為止,所有的配置和程式碼完成,部署—執行,執行結果如下圖:
這個小例項結束,下篇將對SpringMVC和Struts2做一個對比。