springMVC+spring data jpa的使用
来源:互联网 发布:Tensorflow doc 编辑:程序博客网 时间:2024/06/03 07:32
直入主题,不过多介绍spring的强大之处。
springMVC是一个mvc框架,而spring data jpa则是spring的一个数据层框架,二者整合的优势在于,都是spring产品,整体项目的风格会比较贴近,代码简洁高效。
1,需要的jar包,我的博客中已经给出了单独使用springMVC需要的包和单独使用spring data jpa需要的包(见spring data jpa简单案例和springMVC入门,环境搭建)。
原以为整合springMVC和spring data jpa只是简单将二者的包组合到一起,在EE环境下运行就可以了,但实际上还需要几个其他的依赖包。
,
整个项目需要的所有包如下图所示:
这些包可以在博文末尾的项目下载地址中得到(下载整个项目,也可以单独下载其中的jar包);
2,项目结构:
3,配置文件:
(1)web.xml:
<?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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <!-- 加载并处理spring-demo-cfg.xml文件,以便自动注入需要的bean对象 --> <display-name>springmvctest</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 加载/WEB-INF/[servlet-name]-servlet.xml --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping></web-app>
(2)springMVC的配置文件springmvc-servlet.xml:
<?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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.2.xsd"> <!-- 配置controller的扫描路径 --> <context:component-scan base-package="com.hxq.wap.controller" > <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!-- 视图层配置,视图层的读取路径由这里的属性决定,视图(页面)路径=prefix+controller返回的值+suffix --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> </bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!-- 启动JSON格式的配置,有此配置项可使用@ResponseBody注解返回json数据 --> <bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <!-- 解决 HttpMediaTypeNotAcceptableException: Could not find acceptable representation --> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> </list> </property> </bean> </list> </property> </bean></beans>
(3)spring的配置文件spring-demo-cfg.xml:
<?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:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa" 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/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd"> <!-- spring扫描的包路径 --> <context:component-scan base-package="com.hxq.wap"/> <!-- 使用事务管理和设置处理事务的类,通过bean id进行关联 --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- jpa的配置 --> <jpa:repositories base-package="com.hxq.wap.dao" repository-impl-postfix="Impl" entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="transactionManager"/> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="generateDdl" value="false"/> <property name="showSql" value="true"/> </bean> </property> </bean></beans>
(4)jpa的配置文件persistence.xml,注意这个配置文件的路径要在src/META-INF/目录下:
<?xml version="1.0" encoding="UTF-8"?><persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> <persistence-unit name="SimplePU" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <!-- SE环境中需要显示声明entity类路径 EE环境中不需要 --> <!-- <class>com.hxq.wap.entity.UserEntity</class> --> <properties> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jpa_test"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="root"/> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.use_sql_comments" value="false"/> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit></persistence>
嗯,配置文件挺多的,但我已经尽量把配置文件的内容简化了,呵呵;
4,数据表结构:
为了方便示例,表是简单的,代码也做了许多简化,例如各种条件判断等…
5,java代码:
(1)entity(或者说dto)层UserEntity.java:
package com.hxq.wap.entity;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.Table;//entity实体类的注解@Entity//实体类对应的数据表的注解@Table(name="user")public class UserEntity{ private Integer id; private String userName; private String password; private String realName; private Integer age; //主键注解 @Id 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 getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getRealName() { return realName; } public void setRealName(String realName) { this.realName = realName; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; }}
(2)dao层UserDao.java:
package com.hxq.wap.dao;import org.springframework.data.repository.Repository;import com.hxq.wap.entity.UserEntity;public interface UserDao extends Repository<UserEntity, String>{ public UserEntity findByUserNameAndPassword(String userName,String password);}
很轻松的dao层代码,只需要了解jpa的方法命名规范就可以实现简单的CRUD,也可以自定义SQL语句和HQL语句。
(3)service层,接口UserService.java和对应的实现类UserServiceImp.java:
package com.hxq.wap.service;import com.hxq.wap.entity.UserEntity;public interface UserService { public UserEntity login(String userName,String password);}
package com.hxq.wap.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.hxq.wap.dao.UserDao;import com.hxq.wap.entity.UserEntity;@Service("userService")public class UserServiceImp implements UserService{ //@Autowired是声明自动注入相应对象的注解,注入对象的类型须是接口类型 @Autowired private UserDao dao; @Override public UserEntity login(String userName,String password) { return dao.findByUserNameAndPassword(userName, password); }}
(4)控制层UserCtrl.java:
package com.hxq.wap.controller;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.servlet.ModelAndView;import com.hxq.wap.entity.UserEntity;import com.hxq.wap.service.UserService;@Controller@RequestMapping(value = "")public class UserCtrl{ @Autowired private UserService userService; @RequestMapping(value = "/wap/login.do") public String login(){ //返回字符串,实际就是返回一个页面,这个页面的路径等于springmvc-servlet.xml配置文件中的prefix+这里返回的值+suffix return "wap/login"; } @RequestMapping(value = "/wap/doLogin.do") //@ResponseBody 这个注解是用来返回json格式数据的;添加这个注解,返回的就不是页面,而是json数据 public ModelAndView doLogin(HttpServletRequest request,HttpSession session){ //返回类型为ModelAndView,也是返回一个页面,但是可以把页面需要的数据放在ModelAndView的对象中 ModelAndView m = new ModelAndView("wap/index"); String userName = request.getParameter("userName"); String password = request.getParameter("password"); //这里为了简便,省去参数是否为空是否合法的判断 UserEntity user = userService.login(userName, password); if(user!=null){ //放入一个数据,在页面可以通过"${userName}"的形式取出来 m.addObject("userName", user.getRealName()); } //为了简便,省略错误情况的处理。。。。 return m; }}
6,页面一般采用jsp+jstl展示需要的页面和数据,这里只写了一个非常简单的两个jsp页面作为参考:
(1)login.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML><html> <head> <!-- 定义当前页面的路径 --> <base href="<%=basePath%>wap/"> <title>简单登录页面</title> </head> <body> <form action="doLogin.do" method="POST"> <input name="userName" type="text"/> <br/> <input name="password" type="password"/> <br/> <input value="提交" type="submit"/> <input value="重置" type="reset"/> </form> </body></html>
(2)index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML><html> <head> <base href="<%=basePath%>wap/"> <title>简单首页</title> </head> <body> ${userName}...你好,欢迎登录。 </body></html>
嗯,简单还有点敷衍的页面…….
7,以上所有代码搞完之后,将项目部署到tomcat(我的项目名是springMVC),启动tomcat访问结果:
输入“juong”和“123”,点击提交,结果如下,
完整项目下载地址,需要使用git工具下载。
- springMVC+spring data jpa的使用
- spring-data-jpa的使用
- spring data jpa的使用
- Spring-Data-Jpa的使用
- spring data jpa的使用
- spring data jpa的使用
- spring data jpa的使用
- eclipse 使用maven 搭建spring + springMVC + spring Data + jpa 框架
- maven+springmvc+spring data jpa
- SpringMVC +Hibernate JPA+Spring-data-jpa
- Spring Data JPA 使用
- spring-data-jpa 使用
- spring data jpa使用
- spring-data-jpa 使用
- Spring Data JPA使用
- spring-data-jpa 使用
- Spring Data JPA的简单使用
- spring data jpa Specification的使用
- Android总结篇系列:Android广播机制
- SHU-“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛-I-丢史蒂芬妮
- 正则表达式的匹配原理
- 在idea下用Python搭建Django
- Excel使用经验——Excel连接Oracle,发生3706错误的解决办法
- springMVC+spring data jpa的使用
- 如何在Cygwin中使用Z-shell
- 继续逆向youdaodict
- VBA编码经验——日期类型的比较
- 学以致用——Excel连接Oracle生成iKB报告——Part3(功能优化)
- 他山定时 v1.0.7源码, 使用OHUI开发
- Activity相关笔记
- unity 加载图片文件
- [Amazon] Partion Array