Spring+Spring MVC+Hibernate增查(使用注解)

时间:2022-01-07 23:18:07

使用Spring+Spring MVC+Hibernate做增删改查开发效率真的很高。使用Hibernate简化了JDBC连接数据库的的重复性代码。下面根据自己做的一个简单的增加和查询,把一些难点分析出来:

首先项目目录结构:(Hibernate持久化数据连接信息交给Spring进行管理;别忘了加入Hibernate和Spring相关的架包.jar)

Spring+Spring MVC+Hibernate增查(使用注解)

第一步:弄个用户实体类(配置Users.hbm.xml映射文件):

 1 package com.ssh.SpringMVC.enity;
2
3
4
5 public class Users {
6
7 private int id;//id
8 private String username;//用户名
9 private String password;//密码
10 private String sex;//性别
11 /**
12 * @return the id
13 */
14 public int getId() {
15 return id;
16 }
17 /**
18 * @param id the id to set
19 */
20 public void setId(int id) {
21 this.id = id;
22 }
23 /**
24 * @return the username
25 */
26 public String getUsername() {
27 return username;
28 }
29 /**
30 * @param username the username to set
31 */
32 public void setUsername(String username) {
33 this.username = username;
34 }
35 /**
36 * @return the password
37 */
38 public String getPassword() {
39 return password;
40 }
41 /**
42 * @param password the password to set
43 */
44 public void setPassword(String password) {
45 this.password = password;
46 }
47 /**
48 * @return the sex
49 */
50 public String getSex() {
51 return sex;
52 }
53 /**
54 * @param sex the sex to set
55 */
56 public void setSex(String sex) {
57 this.sex = sex;
58 }
59
60 }
 1 <?xml version="1.0"?>
2 <!DOCTYPE hibernate-mapping PUBLIC
3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
5
6
7 <hibernate-mapping
8 package="com.ssh.SpringMVC.enity">
9
10 <class name="Users" table="t_users">
11 <id name="id">
12 <generator class="increment"/>
13 </id>
14 <property name="username" />
15 <property name="password"/>
16 <property name="sex"/>
17 </class>
18
19
20 </hibernate-mapping>

第二步:建个Dao层(公共类)

 1 package com.ssh.SpringMVC.Dao;
2
3 import java.util.List;
4
5 /*
6 * 公共类
7 */
8 public interface IBaseDao<T> {
9 //保存对象
10 public void save(T t);
11 //删除对象
12 public void delete(int id);
13 //更新对象
14 public void update(T t);
15 //根据id查询对象
16 public T getObjectByid(int id);
17 //查询所有对象
18 public List<T> getObjectALL();
19 //根据一组id查询一组对象
20 public List<T> getObjectByids(int ids);
21
22 }
 1 package com.ssh.SpringMVC.Dao.Impl;
2
3 import java.lang.reflect.ParameterizedType;
4 import java.util.List;
5
6 import javax.annotation.Resource;
7
8 import org.hibernate.SessionFactory;
9
10 import org.springframework.transaction.annotation.Transactional;
11
12 import com.ssh.SpringMVC.Dao.IBaseDao;
13
14 /*
15 * 公共方法实现类
16 */
17 @SuppressWarnings("unchecked")
18 @Transactional
19 public class IBaseDaoImpl<T> implements IBaseDao<T>{
20
21 //注入sessionfactory
22 @Resource
23 SessionFactory sessionFactory;
24 Class clazz;
25
26
27 //构造方法:获取T的真实类型
28 public IBaseDaoImpl(){
29 ParameterizedType pType=(ParameterizedType) this.getClass().getGenericSuperclass();
30 clazz=(Class) pType.getActualTypeArguments()[0];
31 System.out.print(clazz.getSimpleName());
32
33 }
34 /*
35 * 删除对象
36 * (non-Javadoc)
37 * @see com.ssh.SpringMVC.Dao.IBaseDao#delete(int)
38 */
39 public void delete(int id) {
40 // TODO Auto-generated method stub
41 sessionFactory.getCurrentSession().delete(
42 sessionFactory.getCurrentSession().get(clazz, id));
43 }
44
45 /*
46 * 查询所有对象
47 * (non-Javadoc)
48 * @see com.ssh.SpringMVC.Dao.IBaseDao#getObjectALL()
49 */
50
51 public List<T> getObjectALL() {
52 // System.out.println("=====:"+"from"+clazz.getSimpleName());
53 // System.out.println("=====:"+"from "+clazz.getSimpleName());
54 // System.out.println("--------------"+clazz.getSimpleName());
55 return sessionFactory.getCurrentSession().createQuery("from "+clazz.getSimpleName()).list();
56 }
57 /*
58 * 根据id获取对象
59 * (non-Javadoc)
60 * @see com.ssh.SpringMVC.Dao.IBaseDao#getObjectByid(int)
61 */
62 public T getObjectByid(int id) {
63 // TODO Auto-generated method stub
64 return (T) sessionFactory.getCurrentSession().get(clazz, id);
65 }
66
67
68 /*
69 * 根据一组id获取一组对象
70 * (non-Javadoc)
71 * @see com.ssh.SpringMVC.Dao.IBaseDao#getObjectByids(int)
72 */
73 public List<T> getObjectByids(int ids) {
74 // TODO Auto-generated method stub
75 return sessionFactory.getCurrentSession().createQuery(
76 "from"+clazz.getSimpleName()+"where id in(:ids)").setParameter("ids", ids).list();
77 }
78 /*
79 * 保存对象
80 * (non-Javadoc)
81 * @see com.ssh.SpringMVC.Dao.IBaseDao#save(java.lang.Object)
82 */
83 public void save(T t) {
84 // TODO Auto-generated method stub
85 sessionFactory.getCurrentSession().save(t);
86 }
87
88 public void update(T t) {
89 // TODO Auto-generated method stub
90 sessionFactory.getCurrentSession().update(t);
91 }
92
93 }

第三步:Servse用户逻辑层

 1 package com.ssh.SpringMVC.Servse;
2
3 import com.ssh.SpringMVC.Dao.IBaseDao;
4 import com.ssh.SpringMVC.enity.Users;
5
6 /*
7 * 用户逻辑层
8 */
9
10 public interface IUserService extends IBaseDao<Users>{
11 //定义特有方法。。。
12 }
 1 package com.ssh.SpringMVC.Servse.Impl;
2
3 import org.springframework.stereotype.Service;
4
5 import com.ssh.SpringMVC.Dao.Impl.IBaseDaoImpl;
6 import com.ssh.SpringMVC.Servse.IUserService;
7 import com.ssh.SpringMVC.enity.Users;
8 /*
9 * 用户实现类
10 *
11 */
12 @Service("userService")
13 public class IUserServiceImpl extends IBaseDaoImpl<Users> implements IUserService{
14
15 }

 

第四步:配置applicationContext.xml和springmvc.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:context="http://www.springframework.org/schema/context"
4 xmlns:tx="http://www.springframework.org/schema/tx"
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6 xsi:schemaLocation="http://www.springframework.org/schema/beans
7 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
8 http://www.springframework.org/schema/context
9 http://www.springframework.org/schema/context/spring-context-2.5.xsd
10 http://www.springframework.org/schema/tx
11 http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
12
13
14
15 <!-- 引入外部配置文件 -->
16 <context:property-placeholder location="classpath:oracle.properties" />
17
18 <!-- 配置数据源(将所有的配置写在Spirng中) -->
19 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
20
21 <!-- 数据库连接信息 -->
22 <property name="url" value="${url}" />
23 <property name="username" value="${username}" />
24 <property name="password" value="${password}" />
25 <property name="driverClassName" value="${driverClassName}" />
26
27 <!-- 最大连接数 -->
28 <property name="maxActive" value="${maxActive}" />
29 <!-- 最大空闲数 -->
30 <property name="maxIdle" value="${maxIdle}" />
31 <!--最小空闲数-->
32 <property name="minIdle" value="${minIdle}" />
33 <!-- 初始连接数 -->
34 <property name="initialSize" value="${initialSize}" />
35
36 </bean>
37
38 <!-- 创建sessionFactory -->
39 <bean id="sessionFactory"
40 class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
41 <property name="dataSource" ref="dataSource" />
42
43
44 <!-- 配置Hibernate配置信息 -->
45 <property name="hibernateProperties">
46 <props>
47 <prop key="hibernate.show_sql">true</prop>
48 <prop key="hibernate.hbm2ddl.auto">update</prop>
49 <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
50 </props>
51 </property>
52
53 <!-- 配置实体类映射信息 -->
54 <property name="mappingResources">
55 <list>
56
57 <value>com/ssh/SpringMVC/enity/Users.hbm.xml</value>
58
59 </list>
60 </property>
61
62 </bean>
63
64 <!-- 配置事务管理器 -->
65 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
66 <property name="sessionFactory" ref="sessionFactory"/>
67 </bean>
68
69
70
71 </beans>
 1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://www.springframework.org/schema/beans
6 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
7 http://www.springframework.org/schema/context
8 http://www.springframework.org/schema/context/spring-context-2.5.xsd
9 http://www.springframework.org/schema/tx
10 http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
11
12 <!-- SpringMVC的配置规则和Spring是一样的:无缝集成 -->
13 <!-- 配置扫描器;自动装配 -->
14 <context:component-scan base-package="com.ssh.SpringMVC" />
15
16 <!-- 注解事务配置 -->
17 <tx:annotation-driven transaction-manager="transactionManager" />
18
19 <!-- 配置视图 -->
20 <bean id="internalView"
21 class="org.springframework.web.servlet.view.InternalResourceViewResolver">
22 <!-- 配置视图前缀 -->
23
24 <property name="prefix" value="/" />
25 <!-- 配置视图后缀 -->
26 <property name="suffix" value=".jsp" />
27 </bean>
28
29
30 </beans>

web.xml配置:

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app version="2.5"
3 xmlns="http://java.sun.com/xml/ns/javaee"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
7
8 <!-- spring监听器: -->
9 <listener>
10 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
11
12 </listener>
13
14 <!-- 指定spring文件路径 -->
15 <context-param>
16 <param-name>contextConfigLocation</param-name>
17 <param-value>classpath:applicationContext.xml</param-value>
18 </context-param>
19
20 <!-- =====================配置spring mvc Start================================= -->
21 <servlet>
22 <servlet-name>SpringMVC</servlet-name>
23 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
24
25 <!--配置springmvc路劲-->
26 <init-param>
27 <param-name>contextConfigLocation</param-name>
28 <param-value>classpath:springmvc.xml</param-value>
29 </init-param>
30 <!-- >=0代表web容器启动的时候加载servlet(数字代表优先级) -->
31 <load-on-startup>1</load-on-startup>
32 </servlet>
33
34 <servlet-mapping>
35 <servlet-name>SpringMVC</servlet-name>
36 <url-pattern>/</url-pattern>
37
38 </servlet-mapping>
39
40 <!-- 配置编码过滤器 -->
41 <filter>
42 <filter-name>encoding</filter-name>
43 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
44 <init-param>
45 <param-name>encoding</param-name>
46 <param-value>utf-8</param-value>
47 </init-param>
48 <init-param>
49 <param-name>forceEncoding</param-name>
50 <param-value>true</param-value>
51 </init-param>
52 </filter>
53 <filter-mapping>
54 <filter-name>encoding</filter-name>
55 <url-pattern>/*</url-pattern>
56 </filter-mapping>
57
58
59
60 <welcome-file-list>
61 <welcome-file>index.jsp</welcome-file>
62 </welcome-file-list>
63 </web-app>

第五步:注册页面:

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%
3 String path = request.getContextPath();
4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
5 %>
6
7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
8 <html>
9 <head>
10 <base href="<%=basePath%>">
11
12 <title>用户注册</title>
13
14
15 </head>
16
17 <body>
18 <form action="userController?add" method="post">
19 <table>
20 <tr>
21 <td>用户名:</td>
22 <td><input type="text" name="username" /></td>
23 </tr>
24 <tr>
25 <td>密码:</td>
26 <td><input type="text" name="password" /></td>
27 </tr>
28 <tr>
29 <td>性别:</td>
30 <td><input type="radio" name="sex" value="男" />&nbsp;<input type="radio" name="sex" value="女" /></td>
31 </tr>
32 <tr>
33 <td></td>
34 <td><input type="submit" /></td>
35 </tr>
36
37
38 </table>
39
40 </form>
41 </body>
42 </html>

Spring+Spring MVC+Hibernate增查(使用注解)

注册跳转至处理页:

 1 package com.ssh.SpringMVC.controller;
2
3
4 import java.util.List;
5
6 import javax.annotation.Resource;
7
8
9 import org.springframework.web.bind.annotation.RequestMapping;
10 import org.springframework.web.servlet.ModelAndView;
11
12
13 import com.ssh.SpringMVC.Servse.IUserService;
14 import com.ssh.SpringMVC.enity.Users;
15
16 /**
17 * 控制层
18 * @author Administrator
19 *
20 */
21 @org.springframework.stereotype.Controller
22 @RequestMapping("/userController")
23 public class UserController {
24
25 //注入业务层
26 @Resource
27 IUserService userService;
28 /*
29 * 添加用户
30 */
31 @RequestMapping(params="add")
32 public String add(Users user){
33 userService.save(user);
34
35 return "redirect:userController?all";
36
37 }
38 /*
39 * 查询所有对象
40 */
41 @RequestMapping(params="all")
42 public ModelAndView all(){
43
44 //list集合
45 List<Users> li=userService.getObjectALL();
46
47 return new ModelAndView("index","userLi",li);
48 }
49 }

然后跳转至index.jsp查询所有用户信息:

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
3 <%
4 String path = request.getContextPath();
5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
6 %>
7
8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
9 <html>
10 <head>
11 <base href="<%=basePath%>">
12
13 <title>My JSP 'index.jsp' starting page</title>
14 <meta http-equiv="pragma" content="no-cache">
15 <meta http-equiv="cache-control" content="no-cache">
16 <meta http-equiv="expires" content="0">
17 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
18 <meta http-equiv="description" content="This is my page">
19 <!--
20 <link rel="stylesheet" type="text/css" href="styles.css">
21 -->
22 </head>
23
24 <body>
25 <table border="1" cellpadding="10" cellspacing="0">
26 <tr>
27 <th>id</th>
28 <th>姓名</th>
29 <th>密码</th>
30 <th>性别</th>
31 </tr>
32 <c:forEach items="${userLi}" var="li">
33 <tr>
34 <td>${li.id}</td>
35 <td>${li.username}</td>
36 <td>${li.password}</td>
37 <td>${li.sex}</td>
38 </tr>
39 </c:forEach>
40 </table>
41
42 </body>
43 </html>

Spring+Spring MVC+Hibernate增查(使用注解)

陷阱先知:

本人在做查询的时候犯了个严重的不细心的问题:错误如下:

Spring+Spring MVC+Hibernate增查(使用注解)

因为这个错纠结了一个多小时。原因是什么,看下图就明白了:

Spring+Spring MVC+Hibernate增查(使用注解)

查询语句忘记了打空格,本来查询from Users,结果from Users合成一个fromUsers,才出现上面的错,都是不细心造成的,谨记,下次务犯。

您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态。 

如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦

如果您对文章内容有任何疑问, 可以通过评论或发邮件的方式联系我: 2276292708@qq.com或加入JAVA技术交流群:306431857

如果需要转载,请注明出处,谢谢!!