前端码农
2015-04-08 16:26:44
Spring MVC+Spring+Hibrenarte实现的简单的CRUD项目实例
//创建一个User实体类,放在Entity包下,采用注解的方式: package ne.springmvc.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; /** * 此实体的定义应用了springmvc的注解,省去了传统的Hibernate跟数据库之间的映射配置文件 * * @author will * */ @Entity @Table(name = "T_USER") public class User { @Id @GeneratedValue(generator = "paymentableGenerator") @GenericGenerator(name = "paymentableGenerator", strategy = "increment") private Integer id; @Column(length = 32) private String userName; @Column(length = 32) private String age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
本篇关于SpringMVC基本都会采用注解的方式,首先配置好数据源以及事务spring-common.xml,放在config.spring包下
然后配置关于SpringMVC的内容,下面配置中都有注释说明,就不再赘述,spring-mvc.xml放在config.spring包下:
[html]
- <?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
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.2.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
- <!-- 注解扫描包 -->
- <context:component-scan base-package="com.tgb" />
- <!-- 开启注解 -->
- <mvc:annotation-driven />
- <!-- 静态资源(js/image)的访问 -->
- <mvc:resources location="/js/" mapping="/js/**"/>
- <!-- 定义视图解析器 -->
- <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/"></property>
- <property name="suffix" value=".jsp"></property>
- </bean>
- </beans>
完成这些共用的配置之后,来配置web项目起点web.xml:
[html]
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
- <display-name>json_test</display-name>
- <welcome-file-list>
- <welcome-file>login.jsp</welcome-file>
- </welcome-file-list>
- <!-- 加载所有的配置文件 -->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath*:config/spring/spring-*.xml</param-value>
- </context-param>
- <!-- 配置Spring监听 -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <!-- 配置SpringMVC -->
- <servlet>
- <servlet-name>springMVC</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath*:config/spring/spring-mvc.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>springMVC</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- <!-- 配置字符集 -->
- <filter>
- <filter-name>encodingFilter</filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- <init-param>
- <param-name>forceEncoding</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>encodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <!-- 配置Session -->
- <filter>
- <filter-name>openSession</filter-name>
- <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>openSession</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- </web-app>
读者需自行下载jquery包,放到webContent文件夹下的js包下。然后创建几个测试页面,分别如下:
Login.jsp,项目的入口界面。
[html]
- <h5><a href="/test_ssh/user/getAllUser">进入用户管理页</a></h5>
Index.jsp,用户管理的主界面
[html]
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <script type="text/javascript" src="../js/jquery-1.7.1.js"></script>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Insert title here</title>
- <script type="text/javascript">
- function del(id){
- $.get("/test_ssh/user/delUser?id=" + id,function(data){
- if("success" == data.result){
- alert("删除成功");
- window.location.reload();
- }else{
- alert("删除失败");
- }
- });
- }
- </script>
- </head>
- <body>
- <h6><a href="/test_ssh/user/toAddUser">添加用户</a></h6>
- <table border="1">
- <tbody>
- <tr>
- <th>姓名</th>
- <th>年龄</th>
- <th>操作</th>
- </tr>
- <c:if test="${!empty userList }">
- <c:forEach items="${userList }" var="user">
- <tr>
- <td>${user.userName }</td>
- <td>${user.age }</td>
- <td>
- <a href="/test_ssh/user/getUser?id=${user.id }">编辑</a>
- <a href="javascript:del('${user.id }')">删除</a>
- </td>
- </tr>
- </c:forEach>
- </c:if>
- </tbody>
- </table>
- </body>
- </html>
addUser.jsp,添加用户界面
[html]
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Insert title here</title>
- <script type="text/javascript">
- function addUser(){
- var form = document.forms[0];
- form.action = "/test_ssh/user/addUser";
- form.method="post";
- form.submit();
- }
- </script>
- </head>
- <body>
- <h1>添加用户</h1>
- <form action="" name="userForm">
- 姓名:<input type="text" name="userName">
- 年龄:<input type="text" name="age">
- <input type="button" value="添加" onclick="addUser()">
- </form>
- </body>
- </html>
editUser.jsp,修改用户信息界面。
[html]
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <script type="text/javascript" src="../js/jquery-1.7.1.js"></script>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Insert title here</title>
- </head>
- <body>
- <h1>编辑用户</h1>
- <form action="/test_ssh/user/updateUser" name="userForm" method="post">
- <input type="hidden" name="id" value="${user.id }">
- 姓名:<input type="text" name="userName" value="${user.userName }">
- 年龄:<input type="text" name="age" value="${user.age }">
- <input type="submit" value="编辑" >
- </form>
- </body>
- </html>
还有success.jsp和error.jsp页面,无代码,就不再展示。
框架越来越多,越来越好用,但随之而来的繁杂的、各成体系的配置怎么办?项目大了感觉注解靠谱些。
这篇接着上篇,把没贴完的代码写完,上篇主要完成了一些公共配置和界面的东西,这篇把后台的代码完成。
首先是web包下属于的control层的类UserController,这相当于Struts中的Action,是重要的类:
[java]
- 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:
[java]
- 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:
[java]
- 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:
[java]
- 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:
[java]
- 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);
- }
- }
到此为止,所有的配置和代码完成,部署—运行,运行结果如下图:
猜你喜欢
请下载代码后再发表评论
文件名:springmvc-hibernate-test.zip,文件大小:14279.058K
下载
- /
- /springmvc-hibernate-test
- /springmvc-hibernate-test/.classpath
- /springmvc-hibernate-test/.project
- /springmvc-hibernate-test/.settings
- /springmvc-hibernate-test/.settings/.jsdtscope
- /springmvc-hibernate-test/.settings/org.eclipse.jdt.core.prefs
- /springmvc-hibernate-test/.settings/org.eclipse.wst.common.component
- /springmvc-hibernate-test/.settings/org.eclipse.wst.common.project.facet.core.xml
- /springmvc-hibernate-test/.settings/org.eclipse.wst.jsdt.ui.superType.container
- /springmvc-hibernate-test/.settings/org.eclipse.wst.jsdt.ui.superType.name
- /springmvc-hibernate-test/src
- /springmvc-hibernate-test/src/ne
- /springmvc-hibernate-test/src/ne/springmvc
- /springmvc-hibernate-test/src/ne/springmvc/controller
- /springmvc-hibernate-test/src/ne/springmvc/dao
- /springmvc-hibernate-test/src/ne/springmvc/entity
- /springmvc-hibernate-test/src/ne/springmvc/service
- /springmvc-hibernate-test/src/ne/springmvc
- /springmvc-hibernate-test/src/ne
- /springmvc-hibernate-test
相关代码
最近下载
ming_123_9715 LV23
2022年12月13日
zmzmzmzm LV8
2021年7月4日
1973356987 LV13
2021年6月16日
liangge2115 LV27
2020年11月23日
嘿嘿嘿123333 LV3
2020年7月1日
IkunLYY LV4
2020年6月24日
沈思熟虑 LV10
2020年2月19日
1690356080 LV37
2019年12月24日
13148918399 LV9
2019年12月10日
努力的黑仔 LV4
2019年9月27日
最近浏览
微信网友_6974071747891200 LV1
5月1日
include LV8
2023年6月20日
兢兢业业
2023年4月29日
暂无贡献等级
彩色天空 LV5
2023年4月2日
微信网友_6328951600910336
2023年1月31日
暂无贡献等级
ming_123_9715 LV23
2022年12月13日
uni-code_0123 LV1
2022年10月24日
17787885952 LV3
2022年5月5日
兰文斌 LV6
2022年4月27日
微信网友_5928854184349696
2022年4月23日
暂无贡献等级