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类优化
  1. 在类上配置@RequestMapping("") 单个方法的配置就不用带上一个路径了
  2. 避免重复
  3. 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通过名字来获取值来进行下次传递

中文乱码
  1. 当传中文值过来时会乱码,因为默认是GBK格式 ,可以通过req.setCharacterEncoding(“UTF-8”)来解决乱码
  2. 通过Springmvc的配置来配置中文,配置图在功能实现中
  3. 设置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 通过以下几个标签配置上传限制

  1. defaultEncoding 编码格式
  2. maxUploadSize 文件最大大小
  3. maxInMemorySize 缓冲区

Spring通过对HttpServletRequest接口继续扩展,接口名为org.springframework.web.multipart.MultipartHttpServletRequest;

@RequestParam(“file”) CommonsMultipartFile 解析文件

文件的读取

通过FileOutputStream进行编写,InputStream逐个读取

enctype

enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。

默认地,表单数据会编码为 “application/x-www-form-urlencoded”。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 “+” 加号,特殊符号转换为 ASCII HEX 值)。

注意!!!

文件的上传需要两个包 下载链接

  1. commons-codec-1.14.jar
  2. 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解析器
  1. multiRequest.getFileNames(); 获取request中所有文件的名字
  2. multiRequest.getFile(xxx); 通过名字获取文件
  3. .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容器的启动顺序
  1. Listener
  2. filter
  3. 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);}}

本文标签: 我的笔记