前言

前面整合完了SpringMVC+MyBatis,自然也少不了SpringMVC+Hibernate,严格来说Hibernate才是我们真正想要的ORM框架么。只记得最初学习hibernate时,又是config.xml又是hml.xml,各种的xml。 今天试着用SpringMVC4整合Hibernate5,使用自动扫描注解的方式处理hibernate类文件,几乎零配置,这就爽很多了是不是。

开发环境

SpringMVC4、Hibernate5、SQLServer2014

项目结构

SpringMVC+Hibernate整合

1、查询分页数据

从控制台里看hql执行情况

2、pom.xml,先把依赖的jar准备好

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.autohome</groupId>
  5. <artifactId>SpringMVC6</artifactId>
  6. <packaging>war</packaging>
  7. <version>1.0-SNAPSHOT</version>
  8. <name>SpringMVC6</name>
  9. <url>http://maven.apache.org</url>
  10. <dependencies>
  11. <dependency>
  12. <groupId>org.springframework</groupId>
  13. <artifactId>spring-beans</artifactId>
  14. <version>4.3.6.RELEASE</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.springframework</groupId>
  18. <artifactId>spring-context</artifactId>
  19. <version>4.3.6.RELEASE</version>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.springframework</groupId>
  23. <artifactId>spring-core</artifactId>
  24. <version>4.3.6.RELEASE</version>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework</groupId>
  28. <artifactId>spring-test</artifactId>
  29. <version>4.3.6.RELEASE</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.springframework</groupId>
  33. <artifactId>spring-web</artifactId>
  34. <version>4.3.6.RELEASE</version>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework</groupId>
  38. <artifactId>spring-webmvc</artifactId>
  39. <version>4.3.6.RELEASE</version>
  40. </dependency>
  41. <dependency>
  42. <groupId>org.springframework</groupId>
  43. <artifactId>spring-jdbc</artifactId>
  44. <version>4.3.6.RELEASE</version>
  45. </dependency>
  46. <dependency>
  47. <groupId>org.springframework</groupId>
  48. <artifactId>spring-orm</artifactId>
  49. <version>4.3.6.RELEASE</version>
  50. </dependency>
  51. <dependency>
  52. <groupId>junit</groupId>
  53. <artifactId>junit</artifactId>
  54. <version>4.10</version>
  55. </dependency>
  56. <!--servlet-->
  57. <dependency>
  58. <groupId>javax.servlet</groupId>
  59. <artifactId>javax.servlet-api</artifactId>
  60. <version>3.1.0</version>
  61. </dependency>
  62. <!--hibernate-->
  63. <dependency>
  64. <groupId>org.hibernate</groupId>
  65. <artifactId>hibernate-core</artifactId>
  66. <version>5.2.9.Final</version>
  67. </dependency>
  68. <dependency>
  69. <groupId>com.microsoft.sqlserver</groupId>
  70. <artifactId>sqljdbc4</artifactId>
  71. <version>4.0</version>
  72. </dependency>
  73. <!-- 支持jstl在jsp的应用 -->
  74. <dependency>
  75. <groupId>jstl</groupId>
  76. <artifactId>jstl</artifactId>
  77. <version>1.2</version>
  78. </dependency>
  79.  
  80. <dependency>
  81. <groupId>taglibs</groupId>
  82. <artifactId>standard</artifactId>
  83. <version>1.1.2</version>
  84. </dependency>
  85.  
  86. </dependencies>
  87. <build>
  88. <finalName>SpringMVC6</finalName>
  89. </build>
  90. </project>

3、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. <display-name>Archetype Created Web Application</display-name>
  8. <!--告知javaEE容器,有那些内容需要添加到上下文里去-->
  9. <context-param>
  10. <param-name>contextConfigLocation</param-name>
  11. <param-value>classpath:applicationContext.xml</param-value>
  12. </context-param>
  13.  
  14. <listener>
  15. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  16. </listener>
  17.  
  18. <!--spring 前端控制器-->
  19. <servlet>
  20. <servlet-name>SpringMVC</servlet-name>
  21. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  22. <init-param>
  23. <param-name>contextConfigLocation</param-name>
  24. <param-value>classpath:springmvc-servlet.xml</param-value>
  25. </init-param>
  26. </servlet>
  27. <servlet-mapping>
  28. <servlet-name>SpringMVC</servlet-name>
  29. <url-pattern>/</url-pattern>
  30. </servlet-mapping>
  31.  
  32. </web-app>

4、springmvc-servlet.xml。这里整合主要配置jdbc数据源、hibernate sessionfactory、事务管理器

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:mvc="http://www.springframework.org/schema/mvc"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context.xsd
  10. http://www.springframework.org/schema/mvc
  11. http://www.springframework.org/schema/mvc/spring-mvc.xsd
  12. ">
  13.  
  14. <!--从配置文件加载数据库信息-->
  15. <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  16. <property name="locations" value="classpath:config/jdbc.properties"/>
  17. <property name="fileEncoding" value="UTF-8"/>
  18. </bean>
  19.  
  20. <!--配置数据源,这里使用Spring默认-->
  21. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  22. <property name="driverClassName" value="${sqlserver.driver}"/>
  23. <property name="url" value="${sqlserver.url}"/>
  24. <property name="username" value="${sqlserver.username}"/>
  25. <property name="password" value="${sqlserver.password}"/>
  26. </bean>
  27. <!--配置hibernate sessionFacotry-->
  28. <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
  29. <property name="dataSource" ref="dataSource"/>
  30. <property name="hibernateProperties">
  31. <props>
  32. <prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</prop>
  33. <prop key="hibernate.show_sql">true</prop>
  34. <prop key="hibernate.format_sql">true</prop>
  35. </props>
  36. </property>
  37. <!--自动扫描注解的方式配置hibernate 类文件-->
  38. <property name="packagesToScan">
  39. <list>
  40. <value>com.autohome.model</value>
  41. </list>
  42. </property>
  43. </bean>
  44.  
  45. <!--配置事务管理器-->
  46. <bean id="txManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
  47. <property name="sessionFactory" ref="sessionFactory"/>
  48. </bean>
  49.  
  50. <!--启用最新的注解器、映射器-->
  51. <mvc:annotation-driven/>
  52.  
  53. <!--使用默认的Servlet来响应静态资源-->
  54. <mvc:default-servlet-handler/>
  55.  
  56. <!--扫描Controller注解类-->
  57. <context:component-scan base-package="com.autohome.controller"/>
  58. <!--扫描Service注解类-->
  59. <context:component-scan base-package="com.autohome.service"/>
  60. <!--扫描Dao注解类-->
  61. <context:component-scan base-package="com.autohome.dao"/>
  62.  
  63. <!--jsp视图解析器-->
  64. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  65. <property name="prefix" value="/WEB-INF/views/"/>
  66. <property name="suffix" value=".jsp"/>
  67. </bean>
  68. </beans>

5、UserInfoDao

  1. package com.autohome.dao;
  2.  
  3. import com.autohome.model.UserInfo;
  4. import org.hibernate.Session;
  5. import org.hibernate.SessionFactory;
  6. import org.hibernate.query.Query;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Repository;
  9.  
  10. import org.hibernate.Transaction;
  11. import java.util.List;
  12.  
  13. @Repository
  14. public class UserInfoDao {
  15.  
  16. @Autowired
  17. private SessionFactory sessionFactory;
  18.  
  19. public List<UserInfo> listAllUser(){
  20. String hql="from UserInfo";
  21. Session session = sessionFactory.openSession();
  22. Query query = session.createQuery(hql);
  23.  
  24. List<UserInfo> list = query.list();
  25.  
  26. return list;
  27. }
  28.  
  29. public List<UserInfo> getAllUser(){
  30. Session session = sessionFactory.openSession();
  31. String sql="select * from t_userinfo";
  32. //执行原生sql查询语句
  33. Query query = session.createSQLQuery(sql);
  34. List<UserInfo> list=query.list();
  35. //执行原生增加、删除、修改语句
  36. //query.executeUpdate();
  37.  
  38. return list;
  39. }
  40.  
  41. public List<UserInfo> listPageUser(int offset,int rows){
  42. String hql="from UserInfo";
  43. Session session = sessionFactory.openSession();
  44. Query query = session.createQuery(hql);
  45.  
  46. query.setFirstResult(offset);
  47. query.setMaxResults(rows);
  48.  
  49. List<UserInfo> list = query.list();
  50. return list;
  51. }
  52.  
  53. public void save(UserInfo model){
  54. Session session = sessionFactory.openSession();
  55. Transaction tran=session.getTransaction();
  56. tran.begin();
  57. session.save(model);
  58. tran.commit();
  59. }
  60.  
  61. public void delete(Integer id){
  62. String hql="delete from UserInfo where id=?";
  63.  
  64. Session session = sessionFactory.openSession();
  65. Transaction tran=session.getTransaction();
  66.  
  67. tran.begin();
  68. Query query = session.createQuery(hql);
  69. query.setParameter(0,id);
  70. query.executeUpdate();
  71. tran.commit();
  72. }
  73.  
  74. public void update(UserInfo model){
  75. Session session = sessionFactory.openSession();
  76. Transaction tran=session.getTransaction();
  77. tran.begin();
  78. session.update(model);
  79. tran.commit();
  80. }
  81.  
  82. }

6、UserInfoService

  1. package com.autohome.service;
  2.  
  3. import com.autohome.dao.UserInfoDao;
  4. import com.autohome.model.UserInfo;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7.  
  8. import java.util.List;
  9.  
  10. @Service
  11. public class UserInfoBiz {
  12.  
  13. @Autowired
  14. UserInfoDao userInfoDao;
  15.  
  16. public List<UserInfo> listAllUser(){
  17. return userInfoDao.listAllUser();
  18. }
  19.  
  20. public List<UserInfo> getAllUser(){
  21. return userInfoDao.getAllUser();
  22. }
  23.  
  24. public List<UserInfo> listPageUser(int offset,int rows){
  25. return userInfoDao.listPageUser(offset,rows);
  26. }
  27.  
  28. public void save(UserInfo model){
  29. userInfoDao.save(model);
  30. }
  31.  
  32. public void update(UserInfo model){
  33. userInfoDao.update(model);
  34. }
  35.  
  36. public void delete(Integer id){
  37. userInfoDao.delete(id);
  38. }
  39. }

 7、UserController

  1. package com.autohome.controller;
  2.  
  3. import com.autohome.model.UserInfo;
  4. import com.autohome.service.UserInfoBiz;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.servlet.ModelAndView;
  9.  
  10. import java.util.List;
  11.  
  12. @Controller
  13. @RequestMapping("/User")
  14. public class UserController {
  15.  
  16. @Autowired
  17. UserInfoBiz userInfoBiz;
  18.  
  19. @RequestMapping("/index")
  20. public ModelAndView index(int pageIndex,int pageSize){
  21.  
  22. // UserInfo model=new UserInfo();
  23. // model.setName("zhangsan");
  24. // model.setAddress("USA2017-03-28");
  25. //
  26. // userInfoBiz.save(model);
  27.  
  28. // UserInfo model=new UserInfo();
  29. // model.setId(1);
  30. // model.setName("李四");
  31. // model.setAddress("USA2017-03-28");
  32.  
  33. // userInfoBiz.update(model);
  34.  
  35. // userInfoBiz.delete(51);
  36.  
  37. List<UserInfo> list = userInfoBiz.listPageUser((pageIndex-1)*pageSize,pageSize);
  38.  
  39. List<UserInfo> users = userInfoBiz.getAllUser();
  40. System.out.println("size:"+users.size());
  41.  
  42. ModelAndView mav =new ModelAndView("index");
  43. mav.addObject("list",list);
  44. mav.addObject("title","用户列表");
  45.  
  46. return mav;
  47.  
  48. }
  49. }

 

8、UserInfo POJO

  1. package com.autohome.model;
  2.  
  3. import javax.persistence.*;
  4. import java.io.Serializable;
  5.  
  6. @Entity
  7. @Table(name="t_userinfo")
  8. public class UserInfo implements Serializable {
  9. @Id
  10. @Column(name="id")
  11. @GeneratedValue(strategy =GenerationType.IDENTITY)
  12. private Integer id;
  13. @Column(name="name")
  14. private String name;
  15. @Column(name="address")
  16. private String address;
  17.  
  18. public Integer getId() {
  19. return id;
  20. }
  21.  
  22. public void setId(Integer id) {
  23. this.id = id;
  24. }
  25.  
  26. public String getName() {
  27. return name;
  28. }
  29.  
  30. public void setName(String name) {
  31. this.name = name;
  32. }
  33.  
  34. public String getAddress() {
  35. return address;
  36. }
  37.  
  38. public void setAddress(String address) {
  39. this.address = address;
  40. }
  41. }

  

总结

在做这个整合demo的时候遇到两个问题,第一是实现分页调用querysetFirstResult和setMaxResults一直报一个索引超出。后更改hibernate断言SQLServer2008Dialect,一开始我用的是SQLServerDialect,因为本地连接sql server2014。第二是在jsp中用jstl显示controller中传过来的值时jsp中无法显示,百度了下是mavel默认生成web.xml的命名空间导致的(查看上面贴的web.xml代码)

另外记得以前学习hibernate类文件全部是用hml.xml来写,现在则是直接扫描model包内的所有实体,实体使用Entity、Table、ID、Column注解,sql server id自增用注解GeneratedValue(strategy =GenerationType.IDENTITY),也确实从项目开发效果和代码整洁程度有很大提高。

参考

http://blog.csdn.net/xumengxing/article/details/8728255

https://my.oschina.net/zimingforever/blog/216909

SpringMVC4+Hibernate5+SQLServer 2014 整合(包括增删改查分页)的更多相关文章

  1. SpringMVC4+MyBatis3+SQLServer 2014 整合(包括增删改查分页)

    前言 说起整合自然离开ssm,我本身并不太喜欢ORM,尤其是MyBatis,把SQL语句写在xml里,尤其是大SQL,可读性不高,出错也不容易排查. 开发环境 idea2016.SpringMVC4. ...

  2. android使用xfire webservice框架远程对sqlserver操作(包括增删改查)的实例!!已在真机上试验通过

    前两天,公司有一个利用android远程操作sqlserver的项目,对此我是毫无头绪的,但也挺感兴趣的,于是开始上网搜索方法,网上有挺多方法了,发现使用webservice的挺多的,不过我对这些技术 ...

  3. Spring4.0+Hibernate4.0+Struts2.3整合包括增删改查案例,解决整合中出现的异常

    源码下载:http://download.csdn.net/detail/cmcc_1234/7034775 ======================Application.xml======== ...

  4. springBoot(7)---整合Mybaties增删改查

    整合Mybaties增删改查 1.填写pom.xml <!-- mybatis依赖jar包 --> <dependency> <groupId>org.mybati ...

  5. OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)

    公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当 ...

  6. node-express项目的搭建并通过mongoose操作MongoDB实现增删改查分页排序(四)

    最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. Mongoose是在node.js ...

  7. python连接sqlserver和MySQL实现增删改查

    参考python核心编程 编写一个用户洗牌的脚本,根据用户输入,选择连接sqlserver或者MySQL,创建数据库.表,随机生成数据,并实现增删改查. 其中,为了兼容python2和python3, ...

  8. ztree使用系列三(ztree与springmvc+spring+mybatis整合实现增删改查)

    在springmvc+spring+mybatis里整合ztree实现增删改查,上一篇已经写了demo,以下就仅仅贴出各层实现功能的代码: Jsp页面实现功能的js代码例如以下: <script ...

  9. springboot整合mybatis增删改查(四):完善增删改查及整合swgger2

    接下来就是完成增删改查的功能了,首先在config包下配置Druid数据连接池,在配置之前先把相关配置在application.preperties中完善 application.preperties ...

随机推荐

  1. sqlserver 通过日志恢复误删的数据

    转载地址:https://www.cnblogs.com/mrzl/p/4043313.html

  2. 词向量之word2vec实践

    首先感谢无私分享的各位大神,文中很多内容多有借鉴之处.本次将自己的实验过程记录,希望能帮助有需要的同学. 一.从下载数据开始 现在的中文语料库不是特别丰富,我在之前的文章中略有整理,有兴趣的可以看看. ...

  3. spoj GSS系列简要题解

    文章目录 GSS1 GSS2 GSS3 GSS4 GSS5 GSS6 GSS7 GSS8 传送门 这个GSSGSSGSS系列全部是跟子段有关的数据结构菜题. 于是来水一篇博客. GSS1 传送门 题意 ...

  4. adb Android Debug Bridge 安卓调试桥

    adb devices 获取设备列表及设备状态 adb get-state 获取设备的状态,设备的状态有 3 钟,device , offline , unknown device:设备正常连接 of ...

  5. 判断终端类型、微信的文章防盗链、h5页面跳转打开新的app、跳转到app市场

    判断终端的类型.安卓.ios.微信.qq function  GetMobelType()  {                 var  browser  =   {                 ...

  6. 执行PowerShell脚本的时候出现"在此系 统上禁止运行脚本"错误

    使用get-executionpolicy查看当前的脚本执行策略, 默认是Restricted, 也就是不允许任何脚本运行. 此时应该使用set-executionpolicy remotesigne ...

  7. python3调用zabbix api

    前言 今天写了一个zabbix api,这里整理一下,过程中自己也学习了一些东西. 需求 我们需要查一个文件内容如下: cat /ops/flume_hosts node1 node2 需要把这个文件 ...

  8. SOPC与 hello world

    本次设计实验源码位于:http://download.csdn.net/detail/noticeable/9922865 实验目的:通过系统的搭建进一步了解FPGA的SOPC开发流程,并借此了姐pl ...

  9. 你应该这么理解TCP的三次握手和四次挥手

    前言: TCP协议是计算机的基础,他本身是一个非常非常复杂的协议. 本文只是蜻蜓点水,将从网络基础以及TCP的相关概念介绍开始,之后再将三次握手,四次挥手这些内容来阐述. 最后介绍一些常见问题,并给出 ...

  10. String、StringBuffer、StringBuild的区别

    他们之间的区别主要在两个重大方面 一.处理速度上 StringBuild > StringBuffer > String 原因: String : 它定义为字符串的常量,定以后不能修改 S ...