SpringMVC
简介
SpringMVC概述
- SpringMVC是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow中
- SpringMVC已经成为目前最主流的MVC框架之一,并且随着Spring3.0的发布,全面超越Stuts2,成为最优秀的MVC框架。他通过一套注解,让一个简单的Java类成为处理请求的控制器,而无需实现任何接口。同时它是支持RESTful编程风格的请求
SpringMVC开发步骤
- 需求:客户端发送请求,服务器端接受请求,执行逻辑并进行视图跳转
- 导入SpringMVC相关坐标
- 配置SpringMVC核心控制器DispathcerServlet
- 创建Controller类和视图页面
- 使用注解配置Controller类中业务方法的映射地址
- 配置SpringMVC核心文件Spring-mvc.xml文件(配置组件扫描)
- 客户端发送请求测试
-
导入坐标
-
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.2.12.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.12.RELEASE</version> </dependency>
-
-
配置核心控制器
-
<!-- 配置SpringMVC的前端控制器--> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
-
-
创建Controller类和视图页面
-
@Controller public class UserController { @RequestMapping("/quick") public String save(){ System.out.println("Controller running....."); return "success.jsp"; } }
-
-
配置SpringMVC核心文件
-
<!-- Controller组件扫描--> <context:component-scan base-package="com.ytzl.controller"/>
-
知识要点
SpringMVC组件解析
SpringMVC的执行流程
- 用户发送请求至前端控制器DispatcherServlet
- DispatcherServlet收到请求调用HandlerMapping处理器映射器
- 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
- DispatcherServlet调动HandlerAdapter处理器适配器
- HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)
- Controller执行完成返回ModelAndView
- HandlerAdapter将controller执行结果ModelAdnView返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器
- ViewReslover解析后返回具体View
- DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet响应用户
SpringMVC注解解析
注解 | 说明 |
---|---|
@RequestMapping | 用户建立请求URL和处理请求方法之间的对应关系 |
位置 | |
类上 | 请求URL的第一级访问目录。此处不写的话,就相当于应用的根目录 |
方法上 | 请求URL的第二级访问目录,与类上的使用@RequestMapping标注的一级目录一起组成访问虚拟目录 |
//请求地址 https://lcoalhost:8080/类上的/方法上的 | |
属性 | |
value | 用于指定请求的URL,他和path属性的作用是一样的 |
method | 用于指定请求的方式 |
params | 用于指定限制请求参数的条件,它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样 |
例如 | |
params={“accountName”} | 表示请求参数必须有accountName |
params={“money!100”} | 表示请求参数中money不能是100 |
@ResponseBody | 告诉MVC框架 不进行视图跳转 直接进行数据回响 |
mvc命名空间引入
SpringMVCd的xml配置解析
<!-- Controller组件扫描-->
<context:component-scan base-package="com.ytzl.controller"/>
<!--配置内部资源视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- /jsp/success.jsp-->
<property name="prefix" value="/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
知识要点
- SpringMVC的相关组件
- 前端控制器:DispatcherServlet
- 处理器映射器:HandlerMapping
- 处理器适配器:HandlerAdapter
- 处理器:Handler
- 视图解析器:View Resolver
- 视图:View
- SpringMVC的注解和配置
- 请求映射注解:@RequestMapping
- 视图解析器配置:
- REDIRECT_URL_PREFIX=“redirect”
- FORWARD_URL_PREFIX=“forward”
- prefix=“”
- suffix=“”
SpringMVC的数据响应
SpringMVC的数据响应方式
- 页面跳转
- 直接返回字符串
- 通过ModelAndView对象返回
- 会写数据
- 直接返回字符串
- 返回对象或集合
返回字符串形式
- 直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转。
返回ModelAndView对象
形式一:
@RequestMapping("/quick1")
public ModelAndView save1(){
/**
* Mode:模型 作用封装数据
* View:视图 作用展示数据
* */
ModelAndView modelAndView = new ModelAndView();
//设置视图名称
modelAndView.setViewName("success");
//设置模型数据
modelAndView.addObject("oLike","凌乱的房间里头还留着你的香味");
return modelAndView;
}
@RequestMapping("/quick2")
public ModelAndView save2(ModelAndView modelAndView ){
/**
* Mode:模型 作用封装数据
* View:视图 作用展示数据
* */
//设置视图名称
modelAndView.setViewName("success");
//设置模型数据
modelAndView.addObject("oLike","凌乱的房间里头还留着你的香味");
return modelAndView;
}
/**
常用
*/
@RequestMapping("/quick3")
public String save3(Model model){
model.addAttribute("oLike","凌乱的房间里头还留着你的香味");
return "success";
}
<h1>放过我吧... ${oLike}</h1>
形式二:
@RequestMapping("/quick4")
public String save4(HttpServletRequest request){
request.setAttribute("oLike","看到你和你的墙说话,我的心都碎了");
return "success";
}
回写数据
直接返回字符串
-
Web基础阶段,客户端访问服务器端,如果想直接回写字符串作为响应体返回的话,只需要使用response.getWriter().print(“hello world”)即可,那么在Controller中想直接返回字符串该怎么做?
-
通过SpringMVC框架注入的response对象,使用response.getWriter().print(“”)回写数据,此时不需要视图跳转,业务方法返回值为void。
-
@RequestMapping("/quick5") public void save5(HttpServletResponse response) throws IOException { response.setContentType("text/html;charset=utf-8"); response.getWriter().print("不爱我就拉倒"); }
-
-
将需要回写的字符串直接返回,但此时需要通过 @ResponseBody注解告诉MVC框架,方法的字符串不是跳转是直接在http响应体中返回
-
@RequestMapping("/quick6") @ResponseBody public String save6(HttpServletResponse response){ response.setContentType("text/html;charset=utf-8"); return "love baby~"; }
-
-
返回json格式字符串
-
/** * 回写数据 * 返回json格式数据 * */ @RequestMapping("/json1") @ResponseBody public String json1(){ return "{\"username\":\"yang\",\"age\":\"19\"}"; }
-
导如maven坐标
-
<!--导入json格式转换工具--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.0</version> </dependency>
-
/** * 回写数据 * 返回json格式数据 * */ @RequestMapping("/json2") @ResponseBody public String json2() throws JsonProcessingException { User user = new User(); user.setName("yang"); user.setAge(19); System.out.println(user.toString()); //使用json的转换工具将对象转换成json格式字符串在返回 ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(user); System.out.println(json); return json; }
返回对象或集合数据,自动转成json格式
/**
* 回写数据
* 返回对象或集合数据
* */
@RequestMapping("/objectOrListToJson")
@ResponseBody
//期望SpringMVC自动将User转换成json格式的字符串
public User objectOrListToJson() throws JsonProcessingException {
User user = new User("ListOrObject",20);
return user;
}
处理器适配器:
<!-- 配置处理器映射器 返回对象或集合返回json格式字符串-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</list>
</property>
</bean>
注释版返回对象或集合转换为json格式⭐
-
在方法上添加 @ResponseBody就可以返回json格式的字符串,但是这样配置比较麻烦,配置的代码比较多,因此我们可以使用mvc的注解驱动代替上述配置
-
<!--mvc的注解驱动--> <mvc:annotation-driven/>
-
在SpringMVC的各个组件中,处理映射器、处理器适配器、视图解析器称为SpringMVC的三大组件。
-
使用mvc:annorarion-driven自动加载RequestMappingHandlerMapping(处理映射器)和RequestMappingHandlerAdapter(处理适配器),可用在Spring-xml.xml配置文件中使用mvc:annotation-driven替代注解处理器和适配器的配置。同时使用mvc:annotation-driven默认底层就会集成jackson进行对象或集合的json格式字符转换。
-
可以替代
处理器适配器
的配置
知识要点
- MVC的数据响应方式
- 页面跳转
- 直接返回字符串
- 通过ModelAndView对象返回
- 回写数据
- 直接返回字符串
- 返回对象或集合
- 页面跳转
SpringMVC获得请求数据
-
客户端请求参数的格式是:name=value&name=value… …
-
服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接收如下类型的参数
- 基本类型参数
- POJO类型参数
- 数组类型参数
- 集合类型参数
获得基本类型参数
-
Controller的业务方法的参数名称要与请求参数的name一致,参数值会自动映射匹配
-
/** * 获取数据 * 获得基本类型参数 * */ @RequestMapping("/request1") @ResponseBody public void request1(String name,Integer age){ System.out.println(name); System.out.println(age); }
-
http://localhost:8080/dataRequest/request1?name="葛霄"&age=18
获得POJO类型参数
-
Controller中的业务方法的POJO参数的属性名与请求参数的name一致,参数值会自动映射匹配
-
/** * 获取数据 * 获得POJO类型参数 * */ @RequestMapping("/POJOData") @ResponseBody public void POJO(User user){ System.out.println(user); }
-
http://localhost:8080/dataRequest/request1?name="葛霄"&age=18
获得数组类型参数
-
Controller中的业务方法数据名称与请求参数的name一致,参数值会自动映射匹配
-
/** * 获取数据 * 获得'数组'类型参数 * */ @RequestMapping("/arrayData") @ResponseBody public void Array(String[] loves){ System.out.println(Arrays.asList(loves)); }
-
http://localhost:8080/dataRequest/arrayData?loves="葛霄" loves="尚琪奇"
获得集合类型参数
List
-
获得集合参数时,要将集合参数包装到一个POJO中才可以
-
/** * 获取数据 * 获得'集合List'类型参数 * */ @RequestMapping("/listData") @ResponseBody public void List(VO vo){ System.out.println(vo); }
-
List集合实体类
-
@Getter @Setter @ToString public class VO { private List<User> userList; }
-
jsp测试网页
-
<form action="${pageContext.request.contextPath}/dataRequest/listData" method="post"> <%--表明是第一个User对象的name age--%> <input type="text" name="userList[0].name"><br> <input type="text" name="userList[0].age"><br> <input type="text" name="userList[1].name"><br> <input type="text" name="userList[1].age"><br> <input type="submit" value="提交"> </form>
ajax
-
当使用ajax提交时,可以指定contentType为json形式,那么在方法参数位置使用@RequestBody可以直接接受集合数据而无需使用POJO进行包装。
-
/** * 获取数据 * 获得'集合List'类型参数 * 使用ajax * */ @RequestMapping("/listAjaxData") @ResponseBody public void listAjax(@RequestBody List<User> userList){ System.out.println(userList); }
-
ajax传递跳转
-
<script src="${pageContext.request.contextPath}/js/jquery-3.3.1.min.js"></script> <script> console.log("${pageContext.request.contextPath}/js/jquery-3.3.1.min.js") var userList = new Array(); userList.push({name:"葛霄",age:18}); userList.push({name:"葛霄",age:19}); $.ajax({ type:"POST", url:"${pageContext.request.contextPath}/dataRequest/listAjaxData", data:JSON.stringify(userList), contentType:"application/json;charset:utf-8" }) </script>
-
开放资源的访问-静态资源过滤 mvc.xml
-
<!--开放资源的访问-静态资源过滤--> <mvc:resources mapping="/js/**" location="/js/"/>
静态资源访问的开启⭐
<mvc:default-servlet-handler/>
请求数据中文乱码问题⭐
-
当post请求时,数据会出现乱码,我们可以设置一个过滤器来进行编码的过滤
-
WEB.xml
-
<!--配置全局过滤的filter--> <filter> <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
参数绑定注解@requestParam⭐
-
当请求的参数名称与Controller的业务方法参数名称不一致时,就需要 @RequestParam注解显示的绑定
-
注解@RequestParam还有如下参数可以使用:
-
参数 说明 value 与请求参数名称 required 此在指定的请求参数是否必须包括,默认是true,提交时如果没有此参数则报错 defaultValue 当没有指定请求参数时,则使用指定的默认值赋值
-
-
/** * 获取数据 * 参数绑定注解 * value * 与请求参数名称 * required * 此在指定的请求参数是否必须包括,默认是true,提交时如果没有此参数则报错 * defaultValue * 当没有指定请求参数时,则使用指定的默认值赋值 * */ @RequestMapping("/basicDataPlus") @ResponseBody public void basicDataPlus(@RequestParam(value = "userName",required = false,defaultValue = "藏在心底的喜欢") String name){ System.out.println(name); }
获得Restful风格的参数
-
Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。
-
主要用于客户端和服务端交互类的软件,基于这个风格设计的软件可以更简介,更有层次,更易于实现缓存机制等
-
Restful风格的请求是使用==“url+请求方式”==表示一次请求目的地,HTTP协议里面四个表示操作方式的动词如下:
-
参数 说明 GET 用于获取资源 POST 用于新建资源 PUT 用于更新资源 DELETE 用于删除资源 例如: /user/1 GET: 得到 id=1
的user/user/1 DELETE: 删除 id=1
的user/user/1 PUT: 更新 id=1
的user/user POST: 新增user
-
-
上述url地址
/user/1
中的1
就是要获得的请求参数,在SpringMVC中可以使用占位符进行参数绑定。 -
地址
/user/1
可以写成/user/{id}
,占位符{id}
对应的就是1
的值。 -
在业务方法中我们可以使用 @PathVariable注解进行占位符的匹配获取工作
-
/** * 获取数据 * Restful风格的参数 * localhost:8080/dataRequest/basicRestfulData/葛霄 * */ @RequestMapping("/basicRestfulData/{username}") @ResponseBody public void basicRestfulData(@PathVariable(value = "username") String name){ System.out.println(name); }
自定义类型转换器
-
SpringMVC默认已经提供了一些常用的类型转换器,例如客户端提交的字符转换成int型进行参数设置
-
但是,不是所有的数据类型都提供了转换器,没有提供的就需要自定义转换器,例如:日期类型的数据就需要自定义转换器
-
自定义类型转换器的开发步骤
-
定义转换器类实现Converter接口
-
public class DateConverter implements Converter<String,Date> { @Override public Date convert(String dateStr) { //将日期字符串转换成日期对象返回 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd|"); Date date = null; try { date = format.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return date; } }
-
-
在配置文件中声明转换器
-
mvc.xml
-
<!--声明转换器--> <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <list> <bean class="com.ytzl.converter.DateConverter"/> </list> </property> </bean>
-
-
在<annotation-driven>中引用转换器
-
mvc.xml
-
<mvc:annotation-driven conversion-service="conversionService"/>
-
-
获得SpringMVC相关API
-
SpringMVC支持使用原始ServletAPI对象作为控制器方法的参数进行注入,常用的对象如下
HttpServletRequest
HttpServletResponse
HttpSession
-
/** * 获得SpringMVC相关API * HttpServletRequest * HttpServletResponse * HttpSession * */ @RequestMapping("/getSpringMvcApi") @ResponseBody public void getSpringMvcApi(HttpServletRequest servletRequest, HttpServletResponse servletResponse, HttpSession session){ System.out.println(servletRequest); System.out.println(servletResponse); System.out.println(session); }
获得请求头
-
@RequestHeader
-
使用@RequestHeader可以获得请求头信息,相当于web阶段学习的request.getHeader(name),
-
@RequestHeader注解的属性如下:
-
属性 说明 value 请求头的名称 required 是否必须携带此请求头 -
/** * 获得请求头 * @RequestHeader * */ @RequestMapping("/getRequestHeader") @ResponseBody public void getRequestHeader(@RequestHeader(value = "User-Agent",required = false) String user_agent){ System.out.println(user_agent); }
-
-
@CookieValue
-
使用 @CookieValue可以获得指定的Cookie的值
-
@CookieValue注解的属性如下:
-
属性 说明 value 指定cookie的名称 required 是否必须携带此cookie -
/** * 获得Cookie的值 * @CookieValue * */ @RequestMapping("/getCookie") @ResponseBody public void getCookie(@CookieValue(value = "JSESSIONID",required = false) String jsessionid){ System.out.println(jsessionid); }
-
文件上传
文件上传客户端三要素
-
表单项type=“file”
-
文件<input type="file" name="upload"><br>
-
-
表单的提交方式是post
-
<form method="post">
-
-
表单的enctype属性是多部分表单形式,及enctype=“multipart/form-data”
-
<form enctype="multipart/form-data">
-
文件上传原理
- 当form表单修改为多部分表单时,request.getParameter()将失效
- enctype=“application/x-www-form-urlencoded”时,form表单的正文内容是:
- key=value&key=value&key=value
- 当form表单的enctype取值为Mutilpart/form-data时,请求正文内容就变成多部分形式。
单文件上传步骤
-
导入fileupload和io坐标
-
<!-- 导入fileupload和io坐标--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
-
-
配置文件上传解析器
-
mvc.xmls
-
<!--配置文件上传解析器--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--上传文件的编码类型--> <property name="defaultEncoding" value="UTF-8"/> <!--上传文件总大小--> <property name="maxUploadSize" value="500000"/> </bean>
-
-
编写文件上传代码
-
<form action="${pageContext.request.contextPath}/fileUpload/oneFileUpload" method="post" enctype="multipart/form-data"> 名称<input type="text" name="username"><br> 文件<input type="file" name="upload"><br> <input type="submit" value="提交"> </form>
-
/** * 文件上传 * 单文件上传 * */ @RequestMapping("/oneFileUpload") @ResponseBody public void oneFileUpload(String username, MultipartFile upload){ System.out.println(username); //获得上传文件的名称 String originalFilename = upload.getOriginalFilename(); upload.transferTo(new File("F:\\uploadText\\"+originalFilename)); System.out.println(upload); }
-
多文件上传实现
-
导入fileupload和io坐标
-
配置文件上传解析器
-
<form action="${pageContext.request.contextPath}/fileUpload/FileUploads" method="post" enctype="multipart/form-data"> 名称<input type="text" name="username"><br> 文件<input type="file" name="upload"><br> 文件<input type="file" name="upload"><br> 文件<input type="file" name="upload"><br> <input type="submit" value="提交"> </form>
-
-
编写文件上传代码
-
/** * 文件上传 * 多文件上传 * */ @RequestMapping("/FileUploads") @ResponseBody public void FileUploads(String username, MultipartFile[] upload) throws IOException { System.out.println(username); for (MultipartFile multipartFile : upload) { String originalFilename = multipartFile.getOriginalFilename(); multipartFile.transferTo(new File("F:\\uploadText\\"+originalFilename)); } }
-
知识要点
MVC实现数据请求方式
- 基本类型参数
- POJO类型参数
- 数组类型参数
- 集合类型参数
MVC获取数据细节
- 中文乱码问题
- @RequestParam和@PathVariable
- 自定义类型转换器
- 获取Servlet相关API
- @RequestHeader和@CookieValue
- 文件上传
JdbcTemplate
概述
- 它是Spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象简单的封装。Spring框架为我们提供了很多的操作模板类。
- 例如:操作关系型数据的JdbcTemplate和HibernateTemplate,操作nosql数据库的RedisTemplate,操作消息队列JmsTemplate等等。
JdbcTemplate开发步骤
-
导入spring-jdbc和spring-tx、mysql-connector坐标
-
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.0.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.0.5.RELEASE</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency>
-
-
创建数据库表和实体类
- name-money
-
创建JdbcTemplate对象
-
//创建数据源对象 ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/jdbctemplate"); dataSource.setUser("root"); dataSource.setPassword("123456"); //创建JdbcTemplate对象 JdbcTemplate jdbcTemplate = new JdbcTemplate(); //设置数据源对象 知道数据库在哪 jdbcTemplate.setDataSource(dataSource);
-
-
执行数据库操作
-
//执行操作 int love = jdbcTemplate.update("insert into account values(?,?)", "yazai", 520); if (love==1){ System.out.println("插入成功"); }
-
Spring产生JdbcTemplate对象
-
我们可以将JdbcTemplate的创建权交给Spring,将数据源DataSource的创建权也交给Spring,在Spring容器内部将数据源DataSource注入到JdbcTemplate模板对象中,配置如下
-
applicationContext.xml
-
<!--加载jdbc.properties--> <context:property-placeholder location="classpath:jdbc.properties"/> <!--数据源对象--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!--数据源模板对象--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean>
-
-
jdbc.properties
-
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/jdbctemplate jdbc.username=root jdbc.password=123456
-
-
test
-
/** * 测试Spring产生jdbcTemplate对象 * */ @Test public void springNewTemplate(){ ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml"); JdbcTemplate jdbcTemplate = app.getBean(JdbcTemplate.class); int niu = jdbcTemplate.update("insert into account values(?,?)", "niu", 666); if (niu==1){ System.out.println("插入成功"); } }
-
-
JdbcTemplate常用操作
头部代码
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class JdbcTemplateCRUDTest {
@Autowired
private JdbcTemplate jdbcTemplate;
修
/**
* 修改操作
* */
@Test
public void testUpdate(){
int niu2 = jdbcTemplate.update("update account set money=? where name=?", 1000, "niu2");
if (niu2==1){
System.out.println("修改成功");
}
}
查
/**
* 查询
* 查询总条数
* */
@Test
public void testQueryCount(){
Long aLong = jdbcTemplate.queryForObject("select count(*) from account", Long.class);
System.out.println(aLong);
}
/**
* 查询
* 查询单个
* */
@Test
public void testQueryOne(){
Account account = jdbcTemplate.queryForObject("select * from account where name = ?", new BeanPropertyRowMapper<Account>(Account.class), "niu2");
System.out.println(account);
}
/**
* 查询
* 查询全部
* */
@Test
public void testQueryAll(){
List<Account> accountList = jdbcTemplate.query("select * from account", new BeanPropertyRowMapper<Account>(Account.class));
System.out.println(accountList);
}
/**
知识要点
-
导入Spring-jdbc和Spring-tx坐标
-
创建数据库表和实体
-
创建JdbcTemplate对象
-
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class JdbcTemplateCRUDTest { @Autowired private JdbcTemplate jdbcTemplate;
-
-
执行数据库操作
-
更新操作:
-
int niu2 = jdbcTemplate.update("update account set money=? where name=?", 1000, "niu2");
-
-
查询操作:
-
/*查询单个*/ Account account = jdbcTemplate.queryForObject("select * from account where name = ?", new BeanPropertyRowMapper<Account>(Account.class), "niu2");
-
/*查询多个*/ List<Account> accountList = jdbcTemplate.query("select * from account", new BeanPropertyRowMapper<Account>(Account.class));
-
-