admin管理员组文章数量:1516870
我的笔记
目录
视频一 概述和基本配置
基本概念
SpringMvc简介
- SpringMvc是一种MVC框架
项目说明
- xml是容器入口
- DispatcherServlet类拦截器
- 标签启动优先级
- InternalResourceViewResolver 视图拦截器
实现功能
SpringMvc环境配置
web.xml
<servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
spring-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:context=""xmlns:xsi=""xmlns:mvc="" xsi:schemaLocation=" .0.xsd .0.xsd://www.springframework/schema/mvc/spring-mvc-3.0.xsd"><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/" /><property name="suffix" value=".jsp" /></bean>
视频二 helloworld示例
基本概念
Controller接口
注意:导入的是org.springframework.web.servlet.mvc.Controller下的Controller
ModelAndView 视图与数据类 handleRequset的返回类型
Controller如何找到相对于的jsp
通过配置spring-servlet.xml下的 bean 标签来进行配置路径
<bean name = "/test1/helloworld" class = "com.masssa.controller.HelloWorldController"/>
name 为用户访问的地址 class指向去处
实现功能
welcome页面的访问
HelloWorldController
public class HelloWorldController implements Controller
{@Overridepublic ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception{System.out.println("---hello masssa---");return new ModelAndView("/welcome");}}
访问路径:http://localhost:8090/SpringMvc/test1/helloworld
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9cUcvAwf-1582377370560)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20200220194406035.png)]
访问成功页面
视频三 修改配置文件路径和给界面传递数据
基本概念
修改springmvc的配置路径
因为一个项目有很多配置不能把所有的配置放在一个配置文件下面,于是建一个专门放在各种配置文件的地方,并修改springmvc的默认查找路径
传递数据
原理:因为返回一个ModalAndView的对象,该对象包括一个Object类型的View用来存放视图和一个ModalMap的modal用来存放数据(Map映射方式传值)
在jsp页面通过jstl表达式取出映射的值
实现功能
配置springmvc路径
新建一个config包存放配置文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bFc5iiEV-1582377370562)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20200221122139926.png)]
打开web.xml配置路径
<init-param><param-name>contextConfigLocation</param-name><param-value>classpath*:config/springMVC-servlet.xml</param-value>
</init-param>
向前端传递数据
Map<String, Object> map = new HashMap<String, Object>();map.put("map1", "test1");map.put("map2", "test2");map.put("map3", "test3");return new ModelAndView("/welcome","map",map);
前端接受后台的数据
<%@ taglib prefix="c" uri=""%><div><c:forEach items = "${map}" var="m">123132132${m.key} -----> ${m.value}</c:forEach></div>
视频四 一个Controller写多个方法
基本概念
MultiActionController
Spring提供了一个多动作控制器,用于支持在一个控制器里添加多种功能处理方法,即在一个控制器中存放多个功能处理方法。
实现功能
MultiActionController的配置
配置一个方法名称解析器
<bean id="paramMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
</bean>
配置解析器的标准
<property name="paramName" value="action"></property>
给我们的controller配置解析器
<bean name = "/test1/multi" class = "com.masssa.controller.MultiController" ><property name = "methodNameResolver"><ref bean = "paramMethodResolver"/></property> </bean>
MultiController.java
public class MultiController extends MultiActionController
{public ModelAndView add(HttpServletRequest arg0, HttpServletResponse arg1){System.out.println("add");return new ModelAndView("/multi","method","add");}public ModelAndView update(HttpServletRequest arg0, HttpServletResponse arg1){System.out.println("update");return new ModelAndView("/multi","method","update");}
}
multi.jsp
<body><h>多方法Controller</h>本次方法是 ${method }</body>
因为解析器的标准设置的是action 故通过访问映射路径的后面加?method = xxx来调用方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IOc4FIzZ-1582377370564)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20200221140340031.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4MW4i3PB-1582377370565)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20200221140354660.png)]
视频五 SpringMVC静态文件访问
基本概念
静态文件
如 js , css, 图片 等
静态文件的访问
静态文件的访问也是一种请求,因为我们的拦截器拦截了所有的请求访问
mvc resources
配置静态文件标签,使其访问路径过滤掉
实现功能
jsp图片的显示
配置静态标签
<mvc:resources location = "/img/" mapping="/img/**"/>
staticFile.jsp
<body><h>图片访问</h><img src="img/a.jpg"></img></body>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LjjAbG7v-1582377370566)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20200221143502400.png)]
jquery的使用
配置静态标签
<mvc:resources location = "/js/" mapping="/js/**"/>
jquery.jsp
<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script><script type="text/javascript">
$(document).ready(function(){
alert("登录成功!");
})
</script
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l5Nw86RK-1582377370566)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20200221143620860.png)]
视频六 注解访问
基本概念
springmvc配置
context:component-scan 开启包扫描,对指定的包进行注解扫描
AnnotationMethodHandlerAdapter 通过类找方法
DefaultAnnotationHandlerMapping通过url找类
controller注解
在类上加上@Controller 指定为Controller
@RequestMapping("/t请求名",post/get) 访问路径和配置方式
功能实现
通过注入的方法和不同的传值方式打开jquery
UserController.java
@Controller
public class UserController {@RequestMapping(value="/user/addUser",method=RequestMethod.POST)public ModelAndView addUser(){String result ="this is addUser------";return new ModelAndView("/jquery","result",result);}@RequestMapping(value="/user/delUser",method=RequestMethod.GET)public ModelAndView delUser(){String result ="this is delUser------";return new ModelAndView("/jquery","result",result);}@RequestMapping(value="/user/toUser",method=RequestMethod.GET)public ModelAndView toUser(){return new ModelAndView("/jquery");}
}
jquery.jsp
<body><form action="/springMVC4/user/addUser" method="post"><h>springMVC注解1</h><br/><div>${result }</div><input type="submit" value="post请求"></form>
</body>
视频七 注解优化
基本概念
注解优化
因为每次启用都要使用AnnotationMethodHandlerAdapter和DefaultAnnotationHandlerMapping 所以spring把他们封装起来用一句话代替
<mvn:annotation-driven/>
Controller类优化
- 在类上配置@RequestMapping("") 单个方法的配置就不用带上一个路径了
- 避免重复
- post和get方法都可以访问
功能实现
通过对Controller类设置@RequestMapping("")来访问页面
UserController.java
@Controller
@RequestMapping("user")
public class UserController {@RequestMapping("/addUser")public ModelAndView addUser(){String result ="this is addUser------";return new ModelAndView("/jquery","result",result);}
}
通过String和request进行页面访问与传值
@Controller
@RequestMapping("user")
public class UserController {@RequestMapping("/addUser")public String addUser(HttpServletRequest request){String result ="this is addUser------";request.setArribute("result",result);return "/jquery";}
}
视频八 参数传递
基本概念
通过form表单进行跳转
把值与名称一一对应进行传值,Controllor页面的req通过名字来获取值来进行下次传递
中文乱码
- 当传中文值过来时会乱码,因为默认是GBK格式 ,可以通过req.setCharacterEncoding(“UTF-8”)来解决乱码
- 通过Springmvc的配置来配置中文,配置图在功能实现中
- 设置Tomcat的传值格式,在conf/setting.xml中配置 改为UTF-8
功能实现
form传值跳转
jquery.jsp
<script type="text/javascript">function addUser(){var form = document.forms[0];form.action="/springMVC6/user/data/addUser";form.method="post";form.submit();}
</script>
</head>
<body><h>添加用户</h><form name="userForm" action="">姓名:<input type="text" name="userName">年龄:<input type="text" name="age"><input type="button" value="添加" οnclick="addUser()"></form>
</body>
DataController.java
@Controller
@RequestMapping("/user/data")
public class DataController {@RequestMapping("/addUser")public String addUser(User user,HttpServletRequest request){request.setAttribute("userName", user.getUserName());request.setAttribute("age", user.getAge());return "/userManager";}
}
userManager.jsp
<body><h1>用户管理</h1>姓名:=====${userName }<br/>年龄:=====${age }
</body>
字符编码过滤器
<filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping>
视频九 和josn结合传递数据
基本概念
josn概念
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.例如
{age:"11"}
Bean
java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性,凡是有方法或属性的类都需要实例化,这样才能具象化去使用这些方法和属性;
Ajax
Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。
本节课中通过ajax异步传递,已传递一个User bean
通过设置地址url 传递方式type 数据data来传递
其他
通过request.setAttribute(k, v);来进行下个页面的数据传递
功能实现
传递bean数据
Bean : User.java
public class User {private String userName;private String age;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}
}
json.jsp
<script type="text/javascript">$(document).ready(function(){$("#add").click(function(){var userName = $("#userName").attr("value");var age =$("#age").attr("value");var user = {userName:userName,age:age};$.ajax({url:"/springMVC6/user/data/addUserJson",type:"post",data:user,success:function(a){alert("userName--->" + a.userName + "age--->" + a.age );}}); });});
</script>
Controller: DataController.java
@RequestMapping("/addUserJson")public void addUserJson(User user,HttpServletRequest request,HttpServletResponse response){String username = URLDecoder.decode(user,getUsername(),"UTF-8");String age = URLDecoder.decode(user,getAge(),"UTF-8");request.setAttribute("userName", user.getUserName());request.setAttribute("age", user.getAge());return "/userManager"}
视频十 获取controller中的josn数据
基本概念
现在有Gosn的jar包了 所以这节没怎么细看 = =
通过设置String格式获得josn格式
String result = “{“userName”:” “+ user.getUserName() +” “,“age”:” “+ user.getAge()+” “}”;
向response页面传递josn
通过PrintWriter来设置格式
response.setContentType(“application/json”);
功能实现
配置String使controller获取Ajax中的data数据
userManager.jsp
@RequestMapping("/addUserJson")public void addUserJson(User user,HttpServletRequest request,HttpServletResponse response){//{"username":"userName","age","age"}String result = "{\"userName\":\" "+ user.getUserName() +" \",\"age\":\" "+ user.getAge()+" \"}";PrintWriter out = null;response.setContentType("application/json");try {out = response.getWriter();out.write(result);} catch (IOException e) {e.printStackTrace();}}
视频十一 上传文件
基本概念
上传文件解析器
通过CommonsMultipartResolver解析器解析文件去实例化一个multipartResolver 通过以下几个标签配置上传限制
- defaultEncoding 编码格式
- maxUploadSize 文件最大大小
- maxInMemorySize 缓冲区
Spring通过对HttpServletRequest接口继续扩展,接口名为org.springframework.web.multipart.MultipartHttpServletRequest;
@RequestParam(“file”) CommonsMultipartFile 解析文件
文件的读取
通过FileOutputStream进行编写,InputStream逐个读取
enctype
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
默认地,表单数据会编码为 “application/x-www-form-urlencoded”。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 “+” 加号,特殊符号转换为 ASCII HEX 值)。
注意!!!
文件的上传需要两个包 下载链接
- commons-codec-1.14.jar
- commons-fileupload-1.4.jar
文件上传一点要post方式,用get无法找到正确的路径
功能实现
文件上传功能
UploadController.java
@RequestMapping("/upload")public String addUser(@RequestParam("file") CommonsMultipartFile file,HttpServletRequest request) throws IOException{System.out.println("fileName---->" + file.getOriginalFilename());if(!file.isEmpty()){try {FileOutputStream os = new FileOutputStream("D:/" + new Date().getTime() + file.getOriginalFilename());InputStream in = file.getInputStream();int b = 0;while((b=in.read()) != -1){os.write(b);}os.flush();os.close();in.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return "/success";}
upload.jsp
<form name="userForm" action="/springMVC7/file/upload2" method="post" enctype="multipart/form-data" >选择文件:<input type="file" name="file"> <input type="submit" value="上传" >
</form>
视频十二 文件上传优化
基本概念
文件如何优化
上一节课中我们是通过自己一个个读取字节来实现文件上传的,现在使用Springmvc的CommonsMultipartResolver解析器进行上传,通过解析request来实现功能
CommonsMultipartResolver解析器
- multiRequest.getFileNames(); 获取request中所有文件的名字
- multiRequest.getFile(xxx); 通过名字获取文件
- .transferTo(file) 本地上传文件方法
如果需要上传到服务器上则需要 .InputStream 获得输入流来上传
功能实现
用CommonsMultipartResolver来上传文件
@RequestMapping("/upload2")public String upload2(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException{CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());if(multipartResolver.isMultipart(request)){MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;Iterator<String> iter = multiRequest.getFileNames();while(iter.hasNext()){MultipartFile file = multiRequest.getFile((String)iter.next());if(file != null){String fileName = "demoUpload" + file.getOriginalFilename();String path = "D:/" + fileName;File localFile = new File(path);file.transferTo(localFile);} } }return "/success";}
视频十三/四 和Spring集成
基本概念
省去了struts2 工厂和String的对接
不同框架的监听
Spting —> Listener
Struts2 —>filter
SpringMVC —>servlet
WEB容器的启动顺序
- Listener
- filter
- servlet
配置Spring入口
在web.xml中配置listener
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
使用注解获取Bean
@Resource(name = “userManager”)
private IUserManager userManager
功能介绍
Spring集成
SpringController.java
@Controller
public class SpringController {@Resource(name="springManager")private ISpring springManager;@RequestMapping("/spring/get")public String get(){System.out.println(springManager.get());return "/success";}
}
SpringManager.java
public class SpringManager implements ISpring {@Overridepublic String get() {System.out.println("------I am springManager----");return "I am getMethod";}
}
ISpring.java
public interface ISpring {public String get();
}
springAnnotation-core.xml
<beans><bean id="springManager" class="com.tgb.web.controller.annotation.SpringManager"> </bean>
</beans>
视频十五 和Spring上下文关系
基本概念
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dtpYW2QV-1582377370567)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20200221210454663.png)]
Spring上下文
Spring上下文是Spring启动的时候Listener加载Spring的配置文件——SpringBean和一些依赖关系以及其他事务,上下文会遍历WebApplicationContext对象
SpringMVC的启动
在Spring启动后SpringMVC开始启动通过Servlet加载1个或N个上下文,一个classpath对应一个上下文,都是由Spring的跟上下文继承而来
功能介绍
通过获取上下文不适用注解访问
@Controller
public class SpringController {//Spring的上下文WebApplicationContext ao1 = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServlerContext());//SpringMVC的上下文WebApplicationContext ao2 = RequestContextUtils.getWebApplicationContext(request);
ac1.getBean("springManager");System.out.println(springManager.get());return "/success";}
}
通过import导入本地配置文件
<import resource = "classpath":xxx.xml/>
视频十六/七 Spring+hibernate简单示例
基础概念
Hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架 下载地址:/
Hibernate五大对象
-
Configuration
Configuration用于配置并启动Hibernate
-
SessionFactory
一个SessionFactory对应一个数据源,它是个重量级对象,不可随意生成多个实例
-
Session
从SessionFactory中可以获得Session实例
-
Transaction
Transaction是Hibernate的数据库事务接口
-
Query和Criteria
这两个是Hibernate的查询接口,用于向数据库查询对象,以及控制执行查询的过程
使用Hibernate的前提
导入相关的包,建立spring对Hibernate的配置文件
<property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL"/>localhost为ip,1521为默认端口号,ORCL为数据库名称
<prop key="hibernate.show_sql">true</prop>显示sql语句
<prop key="hiberante.format_sql">true</prop>格式化sql语句
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10Dialect</prop>配置sql方言
<prop key="hibernate.hbm2ddl.auto">update</prop>自动更新表
配置Entity
@Entity 配置Entity类
@Table(name = “xxx”) 表名
@ID 主键
@GeneratedValue(generator = “system-uuid”) 生成字符串
@GenericGenerator(name = “system-uuid”, strategy = “uuid”) 自增
@Column(length=32) 定义长度
功能实现
Hibernate配置
springAnnotation-hibernate.xml
<beans><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/><property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL"/><property name="userName" value="spring"/><property name="password" value="spring"/></bean><bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.Oracle10Dialect</prop><prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.show_sql">true</prop><prop key="hiberante.format_sql">true</prop></props></property><property name="configLocations"><list><value>classpath*:com/tgb/web/controller/hibernate/hibernate.cfg.test.xml</value></list></property></bean><bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean><bean id="transactionBese" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" lazy-init="true" abstract="true"><property name="transactionManager" ref="transactionManager"></property><property name="transactionAttributes"><props><prop key="add*">PROPAGATION_REQUIRED,-Exception</prop><prop key="update*">PROPAGATION_REQUIRED,-Exception</prop><prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop><prop key="modify*">PROPAGATION_REQUIRED,-Exception</prop><prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop><prop key="get*">PROPAGATION_NEVER</prop></props></property></bean>
</beans>
User.java
@Entity
@Table(name="T_USER")
public class User {@Id@GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "uuid") private String id;@Column(length=32)private String userName;@Column(length=32)private String age;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getId() {return id;}public void setId(String id) {this.id = id;}
}
视频十八 Spring+hibernate事务配置
基础概念
事务的拦截 HibernateTransactionManager
对事务的拦截基于AOP方法,transactionManager管理sessionFactory的拦截,只有请求到sessionFactory中的才对其进行拦截
事务的基类 TransactionProxyFactoryBean
代理Bean,配置事务的描述,遇到哪些问题开启事务
| 事务传播行为类型 | 说明 |
|---|---|
| PROPAGATION_REQUIRED | 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 |
| PROPAGATION_SUPPORTS | 支持当前事务,如果当前没有事务,就以非事务方式执行。 |
| PROPAGATION_MANDATORY | 使用当前的事务,如果当前没有事务,就抛出异常。 |
| PROPAGATION_REQUIRES_NEW | 新建事务,如果当前存在事务,把当前事务挂起。 |
| PROPAGATION_NOT_SUPPORTED | 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 |
| PROPAGATION_NEVER | 以非事务方式执行,如果当前存在事务,则抛出异常。 |
| PROPAGATION_NESTED | 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 |
功能实现
事务配置
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean><bean id="transactionBese" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" lazy-init="true" abstract="true"><property name="transactionManager" ref="transactionManager"></property><property name="transactionAttributes"><props><prop key="add*">PROPAGATION_REQUIRED,-Exception</prop><prop key="update*">PROPAGATION_REQUIRED,-Exception</prop><prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop><prop key="modify*">PROPAGATION_REQUIRED,-Exception</prop><prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop><prop key="get*">PROPAGATION_NEVER</prop></props></property></bean>
视频十九 Spring+hibernate的实践
基本概念
Dao接口的引用
Spring要求的方式,必须通过接口才能实现代理类,否则会报错
三层架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z3nsTl5G-1582377370568)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20200222074431095.png)]
Dao的使用方法
通过SessionFactory获取当前的Session,通过Session来进行各种数据库操作
功能实现
三层架构的创建
IUserDAO.java 接口类
public interface IUserDAO {public void addUser(User user);}
UserDAO.java
public class UserDAO implements IUserDAO {private SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}@Overridepublic void addUser(User user) {sessionFactory.getCurrentSession().save(user);}
}
UserController.java
@Controller
@RequestMapping("/user")
public class UserController {@Resource(name="userManager")private IUserManager userManager;@RequestMapping("/addUser")public String addUser(User user){ userManager.addUser(user); return "/success";}
}
IUserManager.java
public interface IUserManager {public void addUser(User user);}
UserManager.java
public class UserManager implements IUserManager {private IUserDAO userDao;public void setUserDao(IUserDAO userDao) {this.userDao = userDao;}@Overridepublic void addUser(User user) {userDao.addUser(user);}
}
视频二十/一 Spring+hibernate的实践2
基本概念
基础代理的配置
事务配置的核心,抽象类的引用时引用示例化的Dao,实体Manager引用抽象类,层层引用,避免了延时问题
java.lang.NoClassDelFoundError:org/aopailance/aop/Adcie
缺少**aopalliacne-1.0.jar包**
updata的一些注意
如果表不存在,则增加,增加表中缺少的字段,不删除原来存在的多余字段,并且不会更新已存在字段的长度
实现功能
相关配置
<beans><bean id="userDao" class="com.tgb.web.controller.dao.UserDAO"><property name="sessionFactory" ref="sessionFactory"></property></bean><bean id="userManagerBase" class="com.tgb.web.controller.service.UserManager"><property name="userDao" ref="userDao"></property></bean><bean id="userManager" parent="transactionBese"><property name="target" ref="userManagerBase"></property></bean></beans>
视频二十二 Spring+hibernate查询实现
基本概念
hibernate查询
通过session来示例化一个query对象,里面的参数为sql语句,query.list 将查询结果转化为链表
No Session found for current thread
在使用数据时,session已经关闭导致的,一般是级联的时候,可以把要查的关联对象不设置检索,也可以在web.xml中配置一个过滤器
实现功能
hibernate查询实现
UserDAO.java
@Overridepublic List<User> getAllUser() {String hql = "from User";Query query = sessionFactory.getCurrentSession().createQuery(hql);return query.list();}
UserController.java
@RequestMapping("/getAllUser")public String getAllUser(HttpServletRequest request){List<User> user = userManager.getAllUser();request.setAttribute("user", user);return "/userManager";}
拦截器配置
web.xml
<filter><filter-name>openSession</filter-name><filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class></filter><filter-mapping><filter-name>openSession</filter-name><url-pattern>/*</url-pattern></filter-mapping>
视频二十三 Spring+hibernate删除数据
基本概念
hibernate删除
query.setString()和jdbc的seting一样给sql语句中的?传值,执行query.executeUpdate()来更新表单,返回值是一个int类型,判断是否大于0从而判断是否删除成功
删除成功页面刷新
通过js的window.location.reload();实现
实现功能
UserDAO.java
@Overridepublic boolean delUser(String id) {String hql = "delete User u where u.id=?";Query query = sessionFactory.getCurrentSession().createQuery(hql);query.setString(0, id);return (query.executeUpdate() > 0);}
UserController.java
@RequestMapping("/delUser")public void delUser(String id,HttpServletResponse response){String result = "{\"result\":\"error\"}";if(userManager.delUser(id)){result = "{\"result\":\"success\"}";}PrintWriter out = null;response.setContentType("application/json");try {out = response.getWriter();out.write(result);} catch (IOException e) {e.printStackTrace();}}
userManager.jsp
<script type="text/javascript">function del(id){$.get("/springMVC11/user/delUser?id=" + id,function(data){alert(data.result);if("success" == data.result){alert("删除成功!");window.location.reload(); }else{alert("删除失败!")}});}</script>
</head>
<body><table border="1"><tbody><tr><th>姓名</th><th>年龄</th><th>编辑</th></tr><c:if test="${!empty user }"><c:forEach items="${user }" var="u"><tr><td>${u.userName }</td><td>${u.age }</td><td><a href="javascript:void(0);">编辑</a><a href="javascript:del('${u.id }')">删除</a></td></tr></c:forEach></c:if></tbody></table>
</body>
视频二十四 Spring+hibernate查询单个实体
基本概念
修改步骤
查询——>修改——>重新查询该数据
返回entity
query.uniqueResult() 的返回值是Object类型 强制转为为你类的返回类型
重定向与转发的区别
请求重定向和请求转发都是web开发中资源跳转的方式。
请求转发是服务器内部的跳转
地址栏不发生变化
只有一个请求响应
可以通过request域传递数据
请求重定向是浏览器自动发起对跳转目标的请求
地址栏会发生变化
两次请求响应
无法通过request域传递对象
SpringMVC中实现转发和重定向
1.在springMVC中仍然可以使用传统方式实现和转发重定向
2.在SpringMVC中也提供了快捷方法实现转发和重定向
只要在返回视图时,使用如下方式指定即可:
3.可以利用转发 实现允许用户访问WEB-INF下保护的指定资源
Hibernate更新数据
原理和删除一样,只是sql语句的不同,query.setString()和jdbc的seting一样给sql语句中的?传值,执行query.executeUpdate()来更新表单,返回值是一个int类型,判断是否大于0从而判断是否修改成功
功能实现
编辑数据
UserDAO.java
@Overridepublic boolean updateUser(User user) {String hql = "update User u set u.userName=?,u.age=? where u.id=?";Query query = sessionFactory.getCurrentSession().createQuery(hql);query.setString(0, user.getUserName());query.setString(1, user.getAge());query.setString(2, user.getId());return (query.executeUpdate() > 0);}
UserController.java
@RequestMapping("/updateUser")public String updateUser(User user,HttpServletRequest request){if(userManager.updateUser(user)){user = userManager.getUser(user.getId());request.setAttribute("user", user);return "/editUser";}else{return "/error";}}
UserManager.java
public class UserManager implements IUserManager {private IUserDAO userDao;public void setUserDao(IUserDAO userDao) {this.userDao = userDao;}@Overridepublic void addUser(User user) {userDao.addUser(user);}@Overridepublic List<User> getAllUser() {return userDao.getAllUser();}@Overridepublic boolean delUser(String id) {return userDao.delUser(id);}@Overridepublic User getUser(String id) {return userDao.getUser(id);}@Overridepublic boolean updateUser(User user) {return userDao.updateUser(user);}}
样,只是sql语句的不同,query.setString()和jdbc的seting一样给sql语句中的?传值,执行query.executeUpdate()来更新表单,返回值是一个int类型,判断是否大于0从而判断是否修改成功
功能实现
编辑数据
UserDAO.java
@Overridepublic boolean updateUser(User user) {String hql = "update User u set u.userName=?,u.age=? where u.id=?";Query query = sessionFactory.getCurrentSession().createQuery(hql);query.setString(0, user.getUserName());query.setString(1, user.getAge());query.setString(2, user.getId());return (query.executeUpdate() > 0);}
UserController.java
@RequestMapping("/updateUser")public String updateUser(User user,HttpServletRequest request){if(userManager.updateUser(user)){user = userManager.getUser(user.getId());request.setAttribute("user", user);return "/editUser";}else{return "/error";}}
UserManager.java
public class UserManager implements IUserManager {private IUserDAO userDao;public void setUserDao(IUserDAO userDao) {this.userDao = userDao;}@Overridepublic void addUser(User user) {userDao.addUser(user);}@Overridepublic List<User> getAllUser() {return userDao.getAllUser();}@Overridepublic boolean delUser(String id) {return userDao.delUser(id);}@Overridepublic User getUser(String id) {return userDao.getUser(id);}@Overridepublic boolean updateUser(User user) {return userDao.updateUser(user);}}
本文标签: 我的笔记
版权声明:本文标题:我的笔记 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/biancheng/1702213577a558483.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论