使用SPRing+Spring MVC+Hibernate做增删改查开发效率真的很高。使用Hibernate简化了JDBC连接数据库的的重复性代码。下面根据自己做的一个简单的增加和查询,把一些难点分析出来:
首先项目目录结构:(Hibernate持久化数据连接信息交给Spring进行管理;别忘了加入Hibernate和Spring相关的架包.jar)
第一步:弄个用户实体类(配置Users.hbm.xml映射文件):
1packagecom.ssh.SpringMVC.enity;2345publicclassUsers {67privateintid;//id8privateString username;//用户名9privateString passWord;//密码10privateString sex;//性别11/**12*@returnthe id13*/14publicintgetId() {15returnid;16}17/**18*@paramid the id to set19*/20publicvoidsetId(intid) {21this.id =id;22}23/**24*@returnthe username25*/26publicString getUsername() {27returnusername;28}29/**30*@paramusername the username to set31*/32publicvoidsetUsername(String username) {33this.username =username;34}35/**36*@returnthe password37*/38publicString getPassword() {39returnpassword;40}41/**42*@parampassword the password to set43*/44publicvoidsetPassword(String password) {45this.password =password;46}47/**48*@returnthe sex49*/50publicString getSex() {51returnsex;52}53/**54*@paramsex the sex to set55*/56publicvoidsetSex(String sex) {57this.sex =sex;58}5960}
1<?xml version="1.0"?>2<!DOCTYPE hibernate-mapping PUBLIC3"-//Hibernate/Hibernate Mapping DTD 3.0//EN"4"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">567<hibernate-mapping8package="com.ssh.SpringMVC.enity">910<classname="Users"table="t_users">11<idname="id">12<generatorclass="increment"/>13</id>14<propertyname="username"/>15<propertyname="password"/>16<propertyname="sex"/>17</class>181920</hibernate-mapping>
第二步:建个Dao层(公共类)
1packagecom.ssh.SpringMVC.Dao;23importjava.util.List;45/*6* 公共类7*/8publicinterfaceIBaseDao<T>{9//保存对象10publicvoidsave(T t);11//删除对象12publicvoiddelete(intid);13//更新对象14publicvoidupdate(T t);15//根据id查询对象16publicT getObjectByid(intid);17//查询所有对象18publicList<T>getObjectALL();19//根据一组id查询一组对象20publicList<T> getObjectByids(intids);2122}
1packagecom.ssh.SpringMVC.Dao.Impl;23importjava.lang.reflect.ParameterizedType;4importjava.util.List;56importjavax.annotation.Resource;78importorg.hibernate.sessionFactory;910importorg.springframework.transaction.annotation.Transactional;1112importcom.ssh.SpringMVC.Dao.IBaseDao;1314/*15* 公共方法实现类16*/17@SuppressWarnings("unchecked")18@Transactional19publicclassIBaseDaoImpl<T>implementsIBaseDao<T>{2021//注入sessionfactory22@Resource23SessionFactory sessionFactory;24Class clazz;252627//构造方法:获取T的真实类型28publicIBaseDaoImpl(){29ParameterizedType pType=(ParameterizedType)this.getClass().getGenericSuperclass();30clazz=(Class) pType.getActualTypeArguments()[0];31System.out.print(clazz.getSimpleName());3233}34/*35* 删除对象36* (non-Javadoc)37* @see com.ssh.SpringMVC.Dao.IBaseDao#delete(int)38*/39publicvoiddelete(intid) {40//TODO Auto-generated method stub41sessionFactory.getCurrentSession().delete(42sessionFactory.getCurrentSession().get(clazz, id));43}4445/*46* 查询所有对象47* (non-Javadoc)48* @see com.ssh.SpringMVC.Dao.IBaseDao#getObjectALL()49*/5051publicList<T>getObjectALL() {52//System.out.println("=====:"+"from"+clazz.getSimpleName());53//System.out.println("=====:"+"from "+clazz.getSimpleName());54//System.out.println("--------------"+clazz.getSimpleName());55returnsessionFactory.getCurrentSession().createQuery("from "+clazz.getSimpleName()).list();56}57/*58* 根据id获取对象59* (non-Javadoc)60* @see com.ssh.SpringMVC.Dao.IBaseDao#getObjectByid(int)61*/62publicT getObjectByid(intid) {63//TODO Auto-generated method stub64return(T) sessionFactory.getCurrentSession().get(clazz, id);65}666768/*69* 根据一组id获取一组对象70* (non-Javadoc)71* @see com.ssh.SpringMVC.Dao.IBaseDao#getObjectByids(int)72*/73publicList<T> getObjectByids(intids) {74//TODO Auto-generated method stub75returnsessionFactory.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*/83publicvoidsave(T t) {84//TODO Auto-generated method stub85sessionFactory.getCurrentSession().save(t);86}8788publicvoidupdate(T t) {89//TODO Auto-generated method stub90sessionFactory.getCurrentSession().update(t);91}9293}
第三步:Servse用户逻辑层
1packagecom.ssh.SpringMVC.Servse;23importcom.ssh.SpringMVC.Dao.IBaseDao;4importcom.ssh.SpringMVC.enity.Users;56/*7* 用户逻辑层8*/910publicinterfaceIUserServiceextendsIBaseDao<Users>{11//定义特有方法。。。12}
1packagecom.ssh.SpringMVC.Servse.Impl;23importorg.springframework.stereotype.Service;45importcom.ssh.SpringMVC.Dao.Impl.IBaseDaoImpl;6importcom.ssh.SpringMVC.Servse.IUserService;7importcom.ssh.SpringMVC.enity.Users;8/*9* 用户实现类10*11*/12@Service("userService")13publicclassIUserServiceImplextendsIBaseDaoImpl<Users>implementsIUserService{1415}
第四步:配置applicationContext.xml和springmvc.xml
1<?xml version="1.0" encoding="UTF-8"?>2<beansxmlns="http://www.springframework.org/schema/beans"3xmlns:context="http://www.springframework.org/schema/context"4xmlns:tx="http://www.springframework.org/schema/tx"5xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"6xsi:schemaLocation="http://www.springframework.org/schema/beans7http://www.springframework.org/schema/beans/spring-beans-2.5.xsd8http://www.springframework.org/schema/context9http://www.springframework.org/schema/context/spring-context-2.5.xsd10http://www.springframework.org/schema/tx11http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">12131415<!--引入外部配置文件-->16<context:property-placeholderlocation="classpath:Oracle.properties"/>1718<!--配置数据源(将所有的配置写在Spirng中)-->19<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource">2021<!--数据库连接信息-->22<propertyname="url"value="${url}"/>23<propertyname="username"value="${username}"/>24<propertyname="password"value="${password}"/>25<propertyname="driverClassName"value="${driverClassName}"/>2627<!--最大连接数-->28<propertyname="maxActive"value="${maxActive}"/>29<!--最大空闲数-->30<propertyname="maxIdle"value="${maxIdle}"/>31<!--最小空闲数-->32<propertyname="minIdle"value="${minIdle}"/>33<!--初始连接数-->34<propertyname="initialSize"value="${initialSize}"/>3536</bean>3738<!--创建sessionFactory-->39<beanid="sessionFactory"40class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">41<propertyname="dataSource"ref="dataSource"/>424344<!--配置Hibernate配置信息-->45<propertyname="hibernateProperties">46<props>47<propkey="hibernate.show_sql">true</prop>48<propkey="hibernate.hbm2ddl.auto">update</prop>49<propkey="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>50</props>51</property>5253<!--配置实体类映射信息-->54<propertyname="mappingResources">55<list>5657<value>com/ssh/SpringMVC/enity/Users.hbm.xml</value>5859</list>60</property>6162</bean>6364<!--配置事务管理器-->65<beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">66<propertyname="sessionFactory"ref="sessionFactory"/>67</bean>68697071</beans>
1<?xml version="1.0" encoding="UTF-8"?>2<beansxmlns="http://www.springframework.org/schema/beans"3xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"4xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"5xsi:schemaLocation="http://www.springframework.org/schema/beans6http://www.springframework.org/schema/beans/spring-beans-2.5.xsd7http://www.springframework.org/schema/context8http://www.springframework.org/schema/context/spring-context-2.5.xsd9http://www.springframework.org/schema/tx10http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">1112<!--SpringMVC的配置规则和Spring是一样的:无缝集成-->13<!--配置扫描器;自动装配-->14<context:component-scanbase-package="com.ssh.SpringMVC"/>1516<!--注解事务配置-->17<tx:annotation-driventransaction-manager="transactionManager"/>1819<!--配置视图-->20<beanid="internalView"21class="org.springframework.web.servlet.view.InternalResourceViewResolver">22<!--配置视图前缀-->2324<propertyname="prefix"value="/"/>25<!--配置视图后缀-->26<propertyname="suffix"value=".jsp"/>27</bean>282930</beans>
web.xml配置:
1<?xml version="1.0" encoding="UTF-8"?>2<web-appversion="2.5"3xmlns="http://java.sun.com/xml/ns/javaee"4xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"5xsi:schemaLocation="http://java.sun.com/xml/ns/javaee6http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">78<!--spring监听器:-->9<listener>10<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>1112</listener>1314<!--指定spring文件路径-->15<context-param>16<param-name>contextConfigLocation</param-name>17<param-value>classpath:applicationContext.xml</param-value>18</context-param>1920<!--=====================配置spring mvc Start=================================-->21<servlet>22<servlet-name>SpringMVC</servlet-name>23<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>2425<!--配置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>3334<servlet-mapping>35<servlet-name>SpringMVC</servlet-name>36<url-pattern>/</url-pattern>3738</servlet-mapping>3940<!--配置编码过滤器-->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>57585960<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<%3Stringpath=request.getContextPath();4StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";5%>67<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">8<html>9<head>10<basehref="<%=basePath%>">1112<title>用户注册</title>131415</head>1617<body>18<formaction="userController?add"method="post">19<table>20<tr>21<td>用户名:</td>22<td><inputtype="text"name="username"/></td>23</tr>24<tr>25<td>密码:</td>26<td><inputtype="text"name="password"/></td>27</tr>28<tr>29<td>性别:</td>30<td><inputtype="radio"name="sex"value="男"/>男 <inputtype="radio"name="sex"value="女"/>女</td>31</tr>32<tr>33<td></td>34<td><inputtype="submit"/></td>35</tr>363738</table>3940</form>41</body>42</html>
注册跳转至处理页:
1packagecom.ssh.SpringMVC.controller;234importjava.util.List;56importjavax.annotation.Resource;789importorg.springframework.web.bind.annotation.RequestMapping;10importorg.springframework.web.servlet.ModelAndView;111213importcom.ssh.SpringMVC.Servse.IUserService;14importcom.ssh.SpringMVC.enity.Users;1516/**17* 控制层18*@authorAdministrator19*20*/21@org.springframework.stereotype.Controller22@RequestMapping("/userController")23publicclassUserController {2425//注入业务层26@Resource27IUserService userService;28/*29* 添加用户30*/31@RequestMapping(params="add")32publicString add(Users user){33userService.save(user);3435return"redirect:userController?all";3637}38/*39* 查询所有对象40*/41@RequestMapping(params="all")42publicModelAndView all(){4344//list集合45List<Users> li=userService.getObjectALL();4647returnnewModelAndView("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<%4Stringpath=request.getContextPath();5StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";6%>78<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">9<html>10<head>11<basehref="<%=basePath%>">1213<title>My JSP 'index.jsp' starting page</title>14<metahttp-equiv="pragma"content="no-cache">15<metahttp-equiv="cache-control"content="no-cache">16<metahttp-equiv="expires"content="0">17<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">18<metahttp-equiv="description"content="This is my page">19<!--20<link rel="stylesheet" type="text/CSS" href="styles.css">21-->22</head>2324<body>25<tableborder="1"cellpadding="10"cellspacing="0">26<tr>27<th>id</th>28<th>姓名</th>29<th>密码</th>30<th>性别</th>31</tr>32<c:forEachitems="${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>4142</body>43</html>
陷阱先知:
本人在做查询的时候犯了个严重的不细心的问题:错误如下:
因为这个错纠结了一个多小时。原因是什么,看下图就明白了:
查询语句忘记了打空格,本来查询from Users,结果from Users合成一个fromUsers,才出现上面的错,都是不细心造成的,谨记,下次务犯。
您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态。
如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦
如果您对文章内容有任何疑问, 可以通过评论或发邮件的方式联系我: 2276292708@QQ.com或加入JAVA技术交流群:306431857
如果需要转载,请注明出处,谢谢!!