SpringMVC4+Hibernate5+SQLServer 2014 整合(包括增删改查分页)
前言
前面整合完了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准备好
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.autohome</groupId>
- <artifactId>SpringMVC6</artifactId>
- <packaging>war</packaging>
- <version>1.0-SNAPSHOT</version>
- <name>SpringMVC6</name>
- <url>http://maven.apache.org</url>
- <dependencies>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-beans</artifactId>
- <version>4.3.6.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- <version>4.3.6.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-core</artifactId>
- <version>4.3.6.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <version>4.3.6.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-web</artifactId>
- <version>4.3.6.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>4.3.6.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-jdbc</artifactId>
- <version>4.3.6.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-orm</artifactId>
- <version>4.3.6.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.10</version>
- </dependency>
- <!--servlet-->
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <version>3.1.0</version>
- </dependency>
- <!--hibernate-->
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>5.2.9.Final</version>
- </dependency>
- <dependency>
- <groupId>com.microsoft.sqlserver</groupId>
- <artifactId>sqljdbc4</artifactId>
- <version>4.0</version>
- </dependency>
- <!-- 支持jstl在jsp的应用 -->
- <dependency>
- <groupId>jstl</groupId>
- <artifactId>jstl</artifactId>
- <version>1.2</version>
- </dependency>
- <dependency>
- <groupId>taglibs</groupId>
- <artifactId>standard</artifactId>
- <version>1.1.2</version>
- </dependency>
- </dependencies>
- <build>
- <finalName>SpringMVC6</finalName>
- </build>
- </project>
3、web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <display-name>Archetype Created Web Application</display-name>
- <!--告知javaEE容器,有那些内容需要添加到上下文里去-->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:applicationContext.xml</param-value>
- </context-param>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <!--spring 前端控制器-->
- <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:springmvc-servlet.xml</param-value>
- </init-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>SpringMVC</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- </web-app>
4、springmvc-servlet.xml。这里整合主要配置jdbc数据源、hibernate sessionfactory、事务管理器
- <?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:mvc="http://www.springframework.org/schema/mvc"
- xmlns:context="http://www.springframework.org/schema/context"
- 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.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc.xsd
- ">
- <!--从配置文件加载数据库信息-->
- <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations" value="classpath:config/jdbc.properties"/>
- <property name="fileEncoding" value="UTF-8"/>
- </bean>
- <!--配置数据源,这里使用Spring默认-->
- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName" value="${sqlserver.driver}"/>
- <property name="url" value="${sqlserver.url}"/>
- <property name="username" value="${sqlserver.username}"/>
- <property name="password" value="${sqlserver.password}"/>
- </bean>
- <!--配置hibernate sessionFacotry-->
- <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
- <property name="dataSource" ref="dataSource"/>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</prop>
- <prop key="hibernate.show_sql">true</prop>
- <prop key="hibernate.format_sql">true</prop>
- </props>
- </property>
- <!--自动扫描注解的方式配置hibernate 类文件-->
- <property name="packagesToScan">
- <list>
- <value>com.autohome.model</value>
- </list>
- </property>
- </bean>
- <!--配置事务管理器-->
- <bean id="txManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
- <property name="sessionFactory" ref="sessionFactory"/>
- </bean>
- <!--启用最新的注解器、映射器-->
- <mvc:annotation-driven/>
- <!--使用默认的Servlet来响应静态资源-->
- <mvc:default-servlet-handler/>
- <!--扫描Controller注解类-->
- <context:component-scan base-package="com.autohome.controller"/>
- <!--扫描Service注解类-->
- <context:component-scan base-package="com.autohome.service"/>
- <!--扫描Dao注解类-->
- <context:component-scan base-package="com.autohome.dao"/>
- <!--jsp视图解析器-->
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/WEB-INF/views/"/>
- <property name="suffix" value=".jsp"/>
- </bean>
- </beans>
5、UserInfoDao
- package com.autohome.dao;
- import com.autohome.model.UserInfo;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.query.Query;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Repository;
- import org.hibernate.Transaction;
- import java.util.List;
- @Repository
- public class UserInfoDao {
- @Autowired
- private SessionFactory sessionFactory;
- public List<UserInfo> listAllUser(){
- String hql="from UserInfo";
- Session session = sessionFactory.openSession();
- Query query = session.createQuery(hql);
- List<UserInfo> list = query.list();
- return list;
- }
- public List<UserInfo> getAllUser(){
- Session session = sessionFactory.openSession();
- String sql="select * from t_userinfo";
- //执行原生sql查询语句
- Query query = session.createSQLQuery(sql);
- List<UserInfo> list=query.list();
- //执行原生增加、删除、修改语句
- //query.executeUpdate();
- return list;
- }
- public List<UserInfo> listPageUser(int offset,int rows){
- String hql="from UserInfo";
- Session session = sessionFactory.openSession();
- Query query = session.createQuery(hql);
- query.setFirstResult(offset);
- query.setMaxResults(rows);
- List<UserInfo> list = query.list();
- return list;
- }
- public void save(UserInfo model){
- Session session = sessionFactory.openSession();
- Transaction tran=session.getTransaction();
- tran.begin();
- session.save(model);
- tran.commit();
- }
- public void delete(Integer id){
- String hql="delete from UserInfo where id=?";
- Session session = sessionFactory.openSession();
- Transaction tran=session.getTransaction();
- tran.begin();
- Query query = session.createQuery(hql);
- query.setParameter(0,id);
- query.executeUpdate();
- tran.commit();
- }
- public void update(UserInfo model){
- Session session = sessionFactory.openSession();
- Transaction tran=session.getTransaction();
- tran.begin();
- session.update(model);
- tran.commit();
- }
- }
6、UserInfoService
- package com.autohome.service;
- import com.autohome.dao.UserInfoDao;
- import com.autohome.model.UserInfo;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.List;
- @Service
- public class UserInfoBiz {
- @Autowired
- UserInfoDao userInfoDao;
- public List<UserInfo> listAllUser(){
- return userInfoDao.listAllUser();
- }
- public List<UserInfo> getAllUser(){
- return userInfoDao.getAllUser();
- }
- public List<UserInfo> listPageUser(int offset,int rows){
- return userInfoDao.listPageUser(offset,rows);
- }
- public void save(UserInfo model){
- userInfoDao.save(model);
- }
- public void update(UserInfo model){
- userInfoDao.update(model);
- }
- public void delete(Integer id){
- userInfoDao.delete(id);
- }
- }
7、UserController
- package com.autohome.controller;
- import com.autohome.model.UserInfo;
- import com.autohome.service.UserInfoBiz;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.servlet.ModelAndView;
- import java.util.List;
- @Controller
- @RequestMapping("/User")
- public class UserController {
- @Autowired
- UserInfoBiz userInfoBiz;
- @RequestMapping("/index")
- public ModelAndView index(int pageIndex,int pageSize){
- // UserInfo model=new UserInfo();
- // model.setName("zhangsan");
- // model.setAddress("USA2017-03-28");
- //
- // userInfoBiz.save(model);
- // UserInfo model=new UserInfo();
- // model.setId(1);
- // model.setName("李四");
- // model.setAddress("USA2017-03-28");
- // userInfoBiz.update(model);
- // userInfoBiz.delete(51);
- List<UserInfo> list = userInfoBiz.listPageUser((pageIndex-1)*pageSize,pageSize);
- List<UserInfo> users = userInfoBiz.getAllUser();
- System.out.println("size:"+users.size());
- ModelAndView mav =new ModelAndView("index");
- mav.addObject("list",list);
- mav.addObject("title","用户列表");
- return mav;
- }
- }
8、UserInfo POJO
- package com.autohome.model;
- import javax.persistence.*;
- import java.io.Serializable;
- @Entity
- @Table(name="t_userinfo")
- public class UserInfo implements Serializable {
- @Id
- @Column(name="id")
- @GeneratedValue(strategy =GenerationType.IDENTITY)
- private Integer id;
- @Column(name="name")
- private String name;
- @Column(name="address")
- private String address;
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- }
总结
在做这个整合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 整合(包括增删改查分页)的更多相关文章
- SpringMVC4+MyBatis3+SQLServer 2014 整合(包括增删改查分页)
前言 说起整合自然离开ssm,我本身并不太喜欢ORM,尤其是MyBatis,把SQL语句写在xml里,尤其是大SQL,可读性不高,出错也不容易排查. 开发环境 idea2016.SpringMVC4. ...
- android使用xfire webservice框架远程对sqlserver操作(包括增删改查)的实例!!已在真机上试验通过
前两天,公司有一个利用android远程操作sqlserver的项目,对此我是毫无头绪的,但也挺感兴趣的,于是开始上网搜索方法,网上有挺多方法了,发现使用webservice的挺多的,不过我对这些技术 ...
- Spring4.0+Hibernate4.0+Struts2.3整合包括增删改查案例,解决整合中出现的异常
源码下载:http://download.csdn.net/detail/cmcc_1234/7034775 ======================Application.xml======== ...
- springBoot(7)---整合Mybaties增删改查
整合Mybaties增删改查 1.填写pom.xml <!-- mybatis依赖jar包 --> <dependency> <groupId>org.mybati ...
- OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)
公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当 ...
- node-express项目的搭建并通过mongoose操作MongoDB实现增删改查分页排序(四)
最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. Mongoose是在node.js ...
- python连接sqlserver和MySQL实现增删改查
参考python核心编程 编写一个用户洗牌的脚本,根据用户输入,选择连接sqlserver或者MySQL,创建数据库.表,随机生成数据,并实现增删改查. 其中,为了兼容python2和python3, ...
- ztree使用系列三(ztree与springmvc+spring+mybatis整合实现增删改查)
在springmvc+spring+mybatis里整合ztree实现增删改查,上一篇已经写了demo,以下就仅仅贴出各层实现功能的代码: Jsp页面实现功能的js代码例如以下: <script ...
- springboot整合mybatis增删改查(四):完善增删改查及整合swgger2
接下来就是完成增删改查的功能了,首先在config包下配置Druid数据连接池,在配置之前先把相关配置在application.preperties中完善 application.preperties ...
随机推荐
- sqlserver 通过日志恢复误删的数据
转载地址:https://www.cnblogs.com/mrzl/p/4043313.html
- 词向量之word2vec实践
首先感谢无私分享的各位大神,文中很多内容多有借鉴之处.本次将自己的实验过程记录,希望能帮助有需要的同学. 一.从下载数据开始 现在的中文语料库不是特别丰富,我在之前的文章中略有整理,有兴趣的可以看看. ...
- spoj GSS系列简要题解
文章目录 GSS1 GSS2 GSS3 GSS4 GSS5 GSS6 GSS7 GSS8 传送门 这个GSSGSSGSS系列全部是跟子段有关的数据结构菜题. 于是来水一篇博客. GSS1 传送门 题意 ...
- adb Android Debug Bridge 安卓调试桥
adb devices 获取设备列表及设备状态 adb get-state 获取设备的状态,设备的状态有 3 钟,device , offline , unknown device:设备正常连接 of ...
- 判断终端类型、微信的文章防盗链、h5页面跳转打开新的app、跳转到app市场
判断终端的类型.安卓.ios.微信.qq function GetMobelType() { var browser = { ...
- 执行PowerShell脚本的时候出现"在此系 统上禁止运行脚本"错误
使用get-executionpolicy查看当前的脚本执行策略, 默认是Restricted, 也就是不允许任何脚本运行. 此时应该使用set-executionpolicy remotesigne ...
- python3调用zabbix api
前言 今天写了一个zabbix api,这里整理一下,过程中自己也学习了一些东西. 需求 我们需要查一个文件内容如下: cat /ops/flume_hosts node1 node2 需要把这个文件 ...
- SOPC与 hello world
本次设计实验源码位于:http://download.csdn.net/detail/noticeable/9922865 实验目的:通过系统的搭建进一步了解FPGA的SOPC开发流程,并借此了姐pl ...
- 你应该这么理解TCP的三次握手和四次挥手
前言: TCP协议是计算机的基础,他本身是一个非常非常复杂的协议. 本文只是蜻蜓点水,将从网络基础以及TCP的相关概念介绍开始,之后再将三次握手,四次挥手这些内容来阐述. 最后介绍一些常见问题,并给出 ...
- String、StringBuffer、StringBuild的区别
他们之间的区别主要在两个重大方面 一.处理速度上 StringBuild > StringBuffer > String 原因: String : 它定义为字符串的常量,定以后不能修改 S ...