JavaEE企业级框架PPT完整全套教学课件_第1页
JavaEE企业级框架PPT完整全套教学课件_第2页
JavaEE企业级框架PPT完整全套教学课件_第3页
JavaEE企业级框架PPT完整全套教学课件_第4页
JavaEE企业级框架PPT完整全套教学课件_第5页
已阅读5页,还剩437页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JAVAWEB

第1章-传统JavaWeb开发.pptx第2章-JavaEE框架-SSM.pptx第3章-SpringBoot.pptx第4章-SpringData.pptx第5章-模版引擎.pptx第6章-Shiro权限管理.pptx第7章-Redis.pptx第8章-缓存.pptx第9章-项目实战.pptx全套PPT课件目录CONTENTS1234掌握面向对象编程基础熟练使用javaweb技术进行web开发掌握常用API使用web项目实战-电商项目使用JDBC和PreparedStatement完成对数据库中的信息提取并对DAO的重构使用DAO层和Service层的两层结构完成登陆验证熟练使用Servlet并理解Servlet的生命周期并重构LoginServlet完成登陆验证过程完成对JSP的创建和输出工作并使用JSP重构登陆利用JSP完成对商品列表的显示完成查看购物车中的商品和商品详细信息利用JNDI,JSTL,EL表达式重构页面与数据库链接利用Filter处理中文乱码和过滤未登陆用户Javaweb-本章目标理解什么是JSP了解JSP的页面元素掌握并熟练使用JSP的指令与内置对象理解JSP的生命周期使用JSP脚本元素完成登陆与注册功能JSP技术解析-本节目标什么是JSP什么是静态网页什么是动态网页JSP有哪些页面元素JSP技术解析-预习检查PART1Javaweb基础知识了解javaweb的基础知识C/S架构需要安装不同的客户端什么是B/S技术IE应用服务器数据库服务器B/S架构-Browser/Server架构将程序完全部署在服务器上,通过浏览器访问URLUniformResourceLocator统一资源定位符组成http://localhost:8080/news/index.html协议部分主机IP地址:端口号项目资源地址Tomcat配置完成tomcat配置PART2Tomcat服务器简介Tomcat服务器ApacheJakarta的开源项目JSP/Servlet容器

在tomcat官网下载安装版tomcat8.0.37安装tomcat打开Myeclipse-Windows-Myeclipse-Servers-RuntimeEnvironents点击Add按钮,选择ApacheTomcat8.x,勾选createanewlocalserver,点击next在新的页面中点击Brower,选择tomcat安装目录配置jre为IDE默认JRE,也可以点击installedjres配置想要的JRE点击finish完成tomcat配置Tomcat配置Tomcat的目录结构Tomcat服务器的目录结构

目录说明/bin存放各种平台下用于启动和停止Tomcat的脚本文件/conf存放Tomcat服务器的各种配置文件/lib存放Tomcat服务器所需的各种JAR文件/logs存放Tomcat的日志文件/tempTomcat运行时用于存放临时文件/webapps当发布Web应用时,默认情况下会将Web应用的文件存放于此目录中/workTomcat把由JSP生成的Servlet放于此目录下Tomcat的端口配置通过配置文件server.xml修改Tomcat端口号<Connectorport=“8088"

protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443"

/><Connectorport="8080"

protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443"

/>演示:修改端口过程http://localhost:8080/...http://localhost:6060/...学员操作——手动创建Web项目需求说明手动创建一个简单的Web项目,实现项目发布,并能通过浏览器输入网址访问完成时间:15分钟

PART3JSP技术解析使用JSP技术完成登陆与注册效果子目录JSP全名为JavaServerPages,其根本是一个简化的Servlet设计,他实现了Html语法中的java扩张(以<%,%>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户端。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。JSP是什么JSP是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态技术标准。在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标签,就构成了JSP网页。Java程序片段可以操纵数据库、重新定向网页以及发送E-mail等,实现建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,这样大大降低了对客户浏览器的要求,即使客户浏览器端不支持Java,也可以访问JSP网页。

JSP技术的发展历程创建、部署和发布项目

编写Web应用的代码在webapps目录下创建应用文件目录将创建的页面复制到应用目录下启动Tomcat服务并进行访问演示示例1:手动部署和发布项目<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.4" xmlns="/xml/ns/j2ee" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-app_2_4.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>配置访问页面演示:配置访问页面假定在web应用(news)下存在一个index.jsp页面,输入http://localhost:8080/news地址时,web容器会默认调用index.jsp页面通过配置文件web.xml修改访问起始页20/53JSP的页面元素指令静态元素表达式声明小脚本注释JSP页面元素JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。页面中所有的HTML+CSS部分JSP注释的分类:显式注释隐式注释JSP注释Jsp中指令有三个pageInclude3.taglibJSP指令<%@pagelanguage="java"import="java.util.*"contentType="text/html;charset=UTF-8"%><%@includefile="head.jsp"%><%@tagliburi="/jsp/jstl/core"prefix="c"%>通过设置内部多个属性定义整个页面的属性

语法常用属性JSP指令<%@page属性1="属性值"属性2="属性值1,属性值2"…属性n="属性值n"%>属性描述默认值language指定JSP页面使用的脚本语言javaimport通过该属性来引用脚本语言中使用到的类文件无contentType用来指定JSP页面所采用的编码方式text/html,ISO-8859-1范例-进行两个数字的加法运算,并将结果显示在页面上JSP脚本<%@pagelanguage="java"import="java.util.*"contentType="text/html;charset=UTF-8"%><html><head><title>计算两个数的和</title></head> <body>

<%

inta=10;

intb=20;

intresult=a+b;

%><%!intadd(inta,intb){

returna+b;

}%>a+b=<%=result%><br>a+b=<%=add(10,20)%> </body></html>Page指令小脚本声明表达式<%@pagelanguage="java"import="java.util.*,java.text.*"contentType="text/html;charset=utf-8"%><html><%!StringformatDate(Dated){SimpleDateFormatformater=newSimpleDateFormat("yyyy年MM月dd日");returnformater.format(d);}%>你好,今天是<%=formatDate(newDate())

%></body></html>JSP中的声明JSP页面中定义方法方法声明后可在页面中多处调用语法<%!Java代码%>训练要点–jsp脚本元素需求说明:编写JSP页面,计算1-100所有素数的和练习–完成时间20’提示:只能被自身以及1整除的数被称为素数JSP的生命周期理解jsp的生命周期PART2JSP执行过程2-1客户端应用服务器2编译JSP.class3执行请求响应1翻译1.翻译阶段Web容器处理JSP文件请求需要经过3个阶段.java2.编译阶段3.执行阶段

JSP执行过程2-2注意

.class执行应用服务器响应第一次请求之后,Web容器可以重用已经编译好的字节码文件第二次请求如果对JSP文件进行了修改,Web容器会重新对JSP文件进行翻译和编译作业课后作业使用JSP完成闰年判断

PART1Servlet子目录什么是servlet如何使用servlet实现转发与重定向servlet技术解析-预习检查使用servlet实现用户登陆编写servlet类,获取初始化参数编写servlet类,获取系统上下文参数使用servlet修改用户信息本节任务为什么需要Servlet使用JSP技术如何编写服务器动态网页?请求响应JSP页面运行执行Java代码HTML代码生成JSP使用Java

生成动态内容

什么是ServletServlet是一个Java程序,是在服务器上运行以处理客户端请求并做出响应的程序请求

响应Servlet运行于服务器端

什么是Servletimportjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;public

classHelloServletTestextendsHttpServlet{

public

voiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{ response.setContentType("text/html;charset=UTF-8"); PrintWriterout=response.getWriter(); out.println("<html>"); out.println("<head><title>Servlet</title></head>"); out.println("<body>"); out.println("你好,欢迎来到Servlet世界"); out.println("</body>"); out.println("</html>"); out.close();}}继承HttpServlet类Servlet输出HTML标签和内容导入所需的包处理请求的方法将数据发送给客户端演示示例1:HelloServlet从本质上来看,jsp就是一个serveltServlet与JSP的关系Servlet接口Servlet概述定义了所有Servlet需要实现的方法Servlet接口的常用方法方法名称功能描述publicvoidinit(ServletConfigconfig)由servlet容器调用,用于完成Servlet对象在处理客户请求前的初始化工作publicvoidservice(ServletRequest

req,ServletResponse

res)由servlet容器调用,用来处理客户端的请求publicvoiddestroy()由servlet容器调用,释放Servlet对象所使用的资源publicServletConfiggetServletConfig()返回ServletConfig对象,该对象包含此servlet的初始化和启动参数。返回的ServletConfig对象是传递给init()方法的对象publicStringgetServletInfo()返回有关servlet的信息,比如作者、版本和版权。返回的字符串是纯文本,而不是任何种类的标记(比如HTML、XML,等等)39/43Servlet的生命周期

实例化Servlet容器创建Servlet的实例初始化该容器调用init()方法请求处理如果请求Servlet,则容器调用service()方法销毁实例之前调用destroy()方法服务终止演示示例2:Servlet的生命周期

Servlet的生命周期

HTTP请求容器12解析请求345响应6创建Servlet实例调用init()方法Servlet调用service()方法调用destroy()方法输出响应信息78

创建Servlet实现doGet()或者doPost()方法部署Servlet编辑部署描述文件web.xml启动Tomcat,访问ServletServlet的应用代码演示:创建和访问Servlet需求编写servlet,验证用户登陆,如果用户名与密码都为“admin”则验证通过,跳转欢迎页面,否则弹出提示信息“用户名或密码错误,请重新输入!”,点击“确定”后跳转至登陆页面实现思路建立Web应用配置web.xml编写Servlet集成自HttpServlet配置web.xml启动Tomcat,访问Servlet练习-实现用户登陆20’需求说明创建一个Servlet作为控制器,实现用户信息管理实现用户信息查询实现用户信息修改在用户信息修改之后可以通过信息查询功能查询练习-实现用户信息管理页面50’Servlet的应用Servlet初始化参数配置总结创建servlet:实现doPost()或doGet()方法部署servlet:编辑部署描述文件web.xml启动Tomcat,访问Servlet<init-param><param-name>initParam</param-name><param-value>HelloServlet</param-value></init-param>PART1Filter子目录为什么要使用FilterFilter的组成部分Filter技术解析-预习检查知道Filter的工作流程了解Filter的生命周期掌握Filter的配置使用Filter解决前后台数据传递乱码问题使用Filter完成未登录用户过滤本节任务什么是过滤器:过滤器是一个驻留在服务器端的Web组件,可以截取用户端和资源之间的请求和响应信息,并对信息进行过滤过滤器概述在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。在HttpServletResponse到达客户端之前,拦截HttpServletResponse。根据需要检查HttpServletResponse,可以修改HttpServletResponse头和数据。过滤器的作用描述过滤器的组成部分:过滤源所有符合规则的数据交互行为过滤规则过滤结果过滤器的组成实现javax.servlet.Filter接口1.voiddestroy();销毁,再服务器关闭是调用,释放filter占用的资源2.voiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException;过滤规则,自动执行的过滤代码,我们需要自定义的部分,如果符合过滤规则,则通过chain放行,如果不符合规则,则做出处理3.voidinit(FilterConfigfilterConfig)throwsServletException;再服务器启动时自动调用,初始化Filter过滤器的部署过滤器的配置web.xml中,配置<filter>和<filter-mapping>Filte的元素过滤器在web.xml中的配置filterdescriptiondisplay-nameiconfilter-namefilter-classinit-paramparam-nameparam-value过滤器的配置web.xml中,配置<filter>和<filter-mapping>过滤器的部署<filter> <filter-name>ZFirstFilter</filter-name> <filter-class>com.woniuxy.fd.filter.ZTestFilter</filter-class></filter><filter-mapping> <filter-name>ZFirstFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>分类路径映射:以”/’开头和以”/*”结尾的是用来做路径映射的url-pattern-Filter的映射<filter> <filter-name>SecondFilter</filter-name> <filter-class>com.woniuxy.fd.filter.SecondFilter</filter-class></filter><filter-mapping> <filter-name>SecondFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>代码中的”/*”在这里表示所有请求都进行过滤,一般用于编码过滤,防止乱码分类2.扩展映射:以前缀”*.”开头的是用来做扩展映射的<filter> <filter-name>ZFirstFilter</filter-name> <filter-class>com.woniuxy.fd.filter.ZTestFilter</filter-class></filter><filter-mapping> <filter-name>ZFirstFilter</filter-name> <url-pattern>*.do</url-pattern></filter-mapping>代码中的”*.do”在这里表示当前过滤器仅过滤.do结尾的请求如果配置文件的写法如图中代码所示,那么程序会有怎样的结果呢?思考<filter> <filter-name>ZFirstFilter</filter-name> <filter-class>com.woniuxy.fd.filter.ZTestFilter</filter-class></filter><filter-mapping> <filter-name>ZFirstFilter</filter-name> <url-pattern>/*.do</url-pattern></filter-mapping>Filter的生命周期Web容器启动,产生filter实例调用init方法,初始化filter当发送请求时,调用dofilterWeb容器关闭时,调用destroy方法释放资源 Filter使用户可以改变一个request和修改一个response。Filter不是一个servlet,它不能产生一个response,但它能够在一个request到达servlet之前预处理这个request,也可以在response离开servlet时处理response。换句话说,Filter更像时一个“servletchaining”说明在一个web应用中,可以部署多个过滤器,组成一个过滤器链。过滤器链中的每个过滤器负责特定的操作和任务,客户端的亲贵在这些过滤器之间传递,知道目标资源配置多个过滤器多个Filter的处理流程使用filter完成编码过滤使用filter完成未登录用户过滤实战范例PART1EL表达式了解EL的基础知识理解并会使用EL表达式理解并会使用常用的JSTL标签本章目标JavaBean在JSP中的局限在JSP页面中嵌入大量的JAVA代码获取JavaBean属性必须实例化强制类型转化《此处加入代码演示》解决办法使用EL表达式进行简化为什么使用EL什么是ELExpressionLanguage(表达式语言)EL的功能替代JSP页面中的复杂代码EL的特点自动转换类型EL得到某个数据可以自动转换类型使用简单EL表达式简介EL语法规则${Scope.AttributeName.AttributeName}对象域在对象域中的属性名实例的属性名EL表达式语法6-2使用变量名获取值${变量名}变量属性范围名称属性范围EL中的名称pagepageScope,例如${pageScope.username},表示在page范围内查找username变量,找不到返回NullrequestrequstScopesessionsessionScopeapplicationapplicationScope<%request.setAttribute("username","LiYang");%>姓名:${username}68/44${requstScope.username}EL表达式语法6-3获取对象的属性值点操作符${}[]操作符${user["name"]}<% Useruser=(User)request.getAttribute("user");user.getName();%>69/44EL表达式语法<%Listnames=newArrayList();names.add(0,"LiYang");names.add(1,"WangHua");request.setAttribute("names",names);%>姓名:${names[0]}<br/>姓名:${names[1]}<br/>使用EL表达式输出姓名代码演示:EL表达式获取List数据关系操作符EL表达式关系操作符说明示例结果==(或eq)等于${23==5}或${23eq5}${"a"=="a"}或${"a"eq"a"}falsetrue!=(或ne)不等于${23!=5}或${23ne5} true<(或lt)小于${23<5}或${23lt5} false>(或gt)大于${23>5}或${23gt5} true<=(或le)小于等于${23<=5}或${23le5} false>=(或ge)大于等于${23>=5}或${23ge5} ture逻辑运算

与·或·非EL表达式逻辑操作符说明示例结果&&(或and)逻辑与 如果A为true,B为false,则A&&B(或AandB) false||(或or)逻辑或如果A为true,B为false,则A||B(或AorB)true!(或not)逻辑非如果A为true,则!A(或notA)falseEL表达式变量a不存在,则${emptya}返回的结果为true${notemptya}或${!emptya}返回的结果为falseEmpty操作符EL隐式对象EL隐式对象隐式对象JSP隐式对象paramValuesparamapplicationScoperequestScopesessionScopepageScope作用域访问对象参数访问对象pageContextEL隐式对象EL隐式对象介绍对象名称说明pageScope返回页面范围的变量名,这些名称已映射至相应的值requestScope返回请求范围的变量名,这些名称已映射至相应的值sessionScope返回会话范围的变量名,这些名称已映射至相应的值applicationScope返回应用范围内的变量,并将变量名映射至相应的值param返回客户端的请求参数的字符串值paramValues返回映射至客户端的请求参数的一组值pageContext提供对用户请求和页面信息的访问75/44EL表达式的综合应用注册信息的读取和显示演示示例1:EL表达式的综合应用需求说明用户输入昵称,所在城市,并且以多选的方式让用户选择所使用的开发语言,然后使用EL表达式显示在页面上昵称和所在城市使用param对象输出练习-使用EL表达式实现问卷调查30’为什么使用JSTL使用了EL表达式可以简化JSP页面代码,但是如果需要进行逻辑判断怎么办?虽然EL表达式可以访问JavaBean的属性,但是并不能实现在JSP中进行逻辑判断,因而要使用JSTL标签。78/44JSTL的定义JSP标准标签库(JavaServerPagesStandardTagLibrary)JSTL通常会与EL表达式合作实现JSP页面的编码什么是JSTLJSTL的优点提供一组标准标签可用于编写各种动态JSP页面使用步骤在工程中引用JSTL的两个jar包和标签库描述符文件在JSP页面中添加taglib指令使用JSTL标签JSTL的环境搭建<%@tagliburi="/jsp/jstl/core"prefix="c"%>JSTL标准标签库介绍

JSTL标准标签库内的标签JSTL标准标签库核心标签库通用标签条件标签迭代标签setremoveoutifforEachchoose81/44语法Set:设置指定范围内的变量值将value值存储在范围为scope的变量variable将value值设置到对象的属性中通用标签<c:setvar="variable"value="v"scope="scope"/><c:setvalue="value"target="target"property="property"/><%Useruser=newUser();request.setAttribute("user",user);%><c:settarget="${user}"property="name"value="defaultName"/>Out:计算表达式并将结果输出显示不指定默认值指定默认值通用标签<c:outvalue="value"/><c:outvalue="value"default="default"/><%Useruser=newUser();request.setAttribute("user",user);%><c:settarget="${user}"property="name"value="defaultName"/><c:outvalue="${}"default="noUserName"/>out:计算表达式并将结果输出显示转义特殊字符通用标签<p>${"<ahref=''>百度</a>"}</p><p><c:outescapeXml="Y"value="<ahref=''>百度</a>"/></p><c:outvalue="<ahref=''>百度</a>"/>代码演示语法remove:删除指定范围内的变量通用标签<body><!--设置之前应该是空值-->设置变量之前的值是:msg=<c:outvalue="${msg}"default="null"/><!--给变量msg设值--><c:setvar="msg"value="Hellowoniu!"scope="page"></c:set><!--此时msg的值应该是上面设置的"已经不是空值了"-->设置新值以后:msg=<c:outvalue="${msg}"></c:out><br><!--把msg变量从page范围内移除--><c:removevar="msg"scope="page"/><!--此时msg的值应该显示null-->移除变量msg以后:msg=<c:outvalue="${msg}“default="null"></c:out></body> 小结通用标签的使用<%@tagliburi="/jsp/jstl/core"prefix="c"%><body><c:setvar="example"value="${100+1}"scope="session"/> <c:outvalue="${example}"/><c:removevar="example"scope="session"/></body> out标签在页面上显示信息或变量值remove标签用于删除作用域内的变量

引入使用核心标签的指令set标签用于给变量设置值和作用范围scope="page|request|session|application"Foreach:用于替换jsp中所有的循环代码语法结构示例代码最常用的标签-<foreach><c:forEachbegin=“开始位置”end=“结束位置”items=“目标items”step=“步进”var=“遍历变量”varStatus=“迭代信息”>循环体</c:forEach><c:forEachitems="${users}"var="user">循环体${}</c:forEach>使用JSTL+EL实现隔行换色展示JSTL+EL实战演示<%inti=0;%><c:forEachitems="${users}"var="user"begin="0"varStatus="sta"step="1"> <div<c:iftest="${sta.count%2==0}">class="one"</c:if><c:iftest="${sta.count%2!=0}">class="two"</c:if>> c:foreach:<c:outvalue="${sta.count}"></c:out>username:${user}<%=i++%><br> </div></c:forEach>请使用JSTL和EL代换JSP中的java代码,完成登陆注册以及用户信息展示。要求用户展示必须隔行改变样式练习谢谢聆听THANKSFORYOURATTENTIONMybatis目录CONTENTSMybatis概述Mybatis实现数据持久化Mybatis配置文件详解Mybatis关系映射掌握Mybaits框架构成掌握动态代理开发掌握动态SQL掌握Mybatis关系映射课程目标Mybatis概述掌握Mybatis框架架构本节目标什么是ORM框架什么是ORM框架及其作用预习检查JDBC实例代码传统JDBC编程问题总结加载数据库驱动获取数据库连接准备执行语句执行语句释放资源异常处理JDBC编程步骤加载驱动获取数据库连接准备语句执行语句处理结果集关闭数据库(释放资源)异常处理问题总结频繁获取数据库连接、释放数据库资源造成数据库资源浪费Sql语句硬编码在代码中,不方便维护参数绑定存在硬编码,因为where条件不定,可多可少,修改sql语句还得修改代码,不方便维护对结果集处理存在硬编码(列名)传统JDBC编程问题总结Mybatis框架框架结构基本概念Mybatis配置SqlMapConfig.xml,配置mybatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂由会话工厂创建sqlSession即会话,从而操作数据库Executor(执行器)是mybati底层操作数据库的接口MappedStatement执行的sql的包装,输入参数以及输出参数的定义Mybatis实现数据持久化搭建Mybatis入门程序使用Mybatis实现数据的持久化本节目标Mybatis如何实现数据的持久化selectOne和selectList的区别预习检查Mybatis下载地址:/mybatis/mybatis-3/releases文件结构:mybatis-3.3.0.jarmybatis的核心包libmybatis的依赖包mybatis-3.3.0.pdfmybatis使用手册创建mybatis数据库编码utf8--UTF-8Unicode排序utf8_general_ci导入sql语句mybatis.sql表结构如下创建mysql数据库Mybatis入门程序需求,实现以下功能:根据用户id查询一个用户信息根据用户名称模糊查询用户信息列表添加用户更新用户删除用户创建java工程添加依赖配置perties日志文件(mybatis文档查找)Sqlsession.xml配置Mybatis入门程序Mybatis入门程序创建po类Po类作为mybatis进行sql映射使用,po类通常与数据库表对应。查询编写User.xml映射文件namespace:命名空间,用于隔离sql语句,后面会讲另一层非常重要的作用parameterType:定义输入到sql中的映射类型,#{id}表示使用preparedstatement设置占位符号并将输入变量id传到sql。resultType:定义结果映射类型。在sqlsession.xml中添加映射文件

编写测试程序Mybatis入门程序Mybatis入门程序#{}和${}区别#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以接收简单类型值或pojo属性值。如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。${}表示拼接sql串,通过${}可以将parameterType传入的内容拼接在sql中且不进行jdbc类型转换,${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。parameterType和resultTypeparameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。selectOne和selectList 添加映射文件测试程序获取mysql自增主键keyProperty:返回的主键存储在pojo中的哪个属性order:selectKey的执行顺序,是相对与insert语句来说,由于mysql的自增原理执行完insert语句之后才将主键生成,所以这里selectKey的执行顺序为afterresultType:返回的主键是什么类型LAST_INSERT_ID():是mysql的函数,返回auto_increment自增列新记录id值使用mysqluuid设置主键

Mybatis入门程序注意:BeforeMybatis入门程序删除映射文件测试程序修改映射文件测试程序Mybatis入门程序原始Dao开发映射文件接口实现类问题Dao方法体存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法调用sqlSession的数据库操作方法需要指定statement的id,这里存在硬编码,不得于开发维护。Dao开发Mapper代理开发规则Mapper.xml文件中的namespace与mapper接口为全类名。Mapper接口方法名和Mapper.xml中定义的每个statement的id相同Mapper接口方法的参数类型和mapper.xml中定义的每个sql的parameterType的类型相同Mapper接口方法的返回值类型和mapper.xml中定义的每个sql的resultType的类型相同映射文件Mapper代理类测试代码Dao开发总结selectOne和selectList动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据mapper接口方法的返回值决定,如果返回list则调用selectList方法,如果返回单个对象则调用selectOne方法。namespacemybatis官方推荐使用mapper代理方法开发mapper接口,程序员不用编写mapper接口实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或map对象,保证dao的通用性。Mybatis配置文件详解掌握Mybatis配置文件组成掌握别名的使用本章目标Mybatis配置文件的组成什么是类型别名预习检查Sqlsession.xml配置内容SqlMapConfig.xml中配置的内容和顺序如下:properties(属性):引入分离的配置文件settings(全局配置参数)typeAliases(类型别名):指定entity的类的别名(映射文件中resultType、parameterType可以使用该别名)typeHandlers(类型处理器)objectFactory(对象工厂)plugins(插件)environments(环境集合属性对象):数据库信息集合属性:default指定默认使用的数据库environment(环境子属性对象):数据库信息id:唯一transactionManager(事务管理)dataSource(数据源)mappers(映射器):指定映射文件的路径properties:分离jdbc配置文件新建jdbc.properties配置文件在sqlsession.xml文件中使用properties节点引入(resource属性)使用${属性名}获取属性值Sqlsession.xmlSqlsession.xmltypeAliases指定entity的类的别名(映射文件中resultType、parameterType可以使用该别名)批量别名-->package-->mybatis自动扫描该包中的所有类,自动定义别名-->为该类的类名(首字母不区分大小写)mappers:配置映射文件mapper中的class或则packge都是指定mapper的接口(及使用mapper代理的开发)此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中(重点)Mybatis关系映射掌握Mybatis关系映射掌握动态SQL掌握延迟加载本节目标Mybatis如何实现关系映射什么是懒加载什么是动态SQL预习检查简介Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心。映射文件中有很多属性,常用的就是parameterType(输入类型)、resultType(输出类型)、resultMapparameterType定义输入参数的数据类型,mybatis中默认的类型基本都能满足日常开发的需求,必要时还可以自定义类型处理器resultType定义输出的数据类型resultMap自定义映射规则Mapper.xml映射文件回顾#{}和${}作用#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换${}表示拼接sql串,通过${}可以将parameterType传入的内容拼接在sql中且不进行jdbc类型转换parameterType(输入映射):指定输入参数的类型简单pojo对象复合类型的pojo对象,获取属性值为复合属性名.属性名传递hashmap简单数据类型resultType(输出类型)简单数据类型简单pojo对象pojo列表输出hashmap:输出pojo对象可以改用hashmap输出类型,将输出的字段名称作为map的key,value为字段值Mapper.xml映射文件resultmapresultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系,将查询结果映射到pojo对象中自定义映射修改实体类:属性和数据库列名不一致修改映射文件测试Resultmap自定义映射但是在现实的项目中进行数据库建模时,我们要遵循数据库设计范式的要求,会对现实中的业务模型进行拆分,封装在不同的数据表中,表与表之间存在着一对多或是多对多的对应关系。进而,我们对数据库的增删改查操作的主体,也就从单表变成了多表。那么Mybatis中是如何实现这种多表关系的映射呢?在Mybatis的ResultMap中提供了以下两种方式来处理关系映射association

关联,简单的讲,就是“有一个”关系,如“用户”有一个“帐号”collection

集合,顾名思议,就是“有很多”关系,如“客户”有很多“订单”关系映射association:用于映射关联查询的单个对象信息(映射到复合类型的属性中)>针对:一对一属性:property--->关联的属性javaType--->映射到的复合属性的类型节点:id--->副表中的唯一标识result:普通属性需求:学生的学生证信息pojo类:增加属性映射文件关系映射关联表中的唯一标识collection:用于映射关联查询的多个对象信息(映射到集合类型的属性中)>针对:一对多属性:property--->关联的属性ofType->映射到的集合中数据类型节点:id--->副表中的唯一标识result:普通属性需求:查询学生的所有体检信息pojo类:增加属性映射文件关系映射关联表中的唯一标识执行resultMap的id再有的环境中有可能并不需要马上获取学生的体检信息,而是在需要的时候才获取,可以通过Mybatis中提供的延迟加载来完成修改映射文件设置延迟加载开关测试延迟加载MyBatis的强大特性之一便是它的动态SQL。如果你有使用JDBC或其他类似框架的经验,你就能体会到根据不同条件拼接SQL语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态SQL这一特性可以彻底摆脱这种痛苦。动态SQL元素和使用JSTL或其他类似基于XML的文本处理器相似。if动态SQL通常要做的事情是有条件地包含where子句的一部分。比如动态SQL<selectid="queryUserinfo"parameterType="user"resultType="user">

SELECT*fromt_userwhere

<iftest="cnname!=nullandcnname!=''">

cnname=#{cnname},

</if>

<iftest="email!=nullandemail!=''">

oremail=#{email},

</if></select>choose,when,otherwise有些时候,我们不想用到所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis提供了choose元素,它有点像Java中的switch语句。还是上面的例子,但是这次变为提供了“cnname”就按“cnname”查找,提供了“email”就按“email”查找动态SQL<selectid="queryUserinfo"parameterType="user"resultType="user">

SELECT*fromt_userwhere <choose>

<whentest="cnname!=nullandcnname!=''">

cnname=#{cnname},

</when>

<whentest="email!=nullandemail!=''">

oremail=#{email},

</when>

</choose></select>foreach动态SQL的另外一个常用的必要操作是需要对一个集合进行遍历foreach元素的功能是非常强大的,它允许你指定一个集合,声明可以用在元素体内的集合项和索引变量。它也允许你指定开闭匹配的字符串以及在迭代中间放置分隔符。需求:批量添加用户信息Mapper接口中添加方法,接收集合类型数据修改映射文件测试动态SQLsql片段:用于抽取公共的动态sql,适用与单表,不包含where动态SQL<!--公共的sql语句--> <sqlid="sqlNumber1"> SELECT idASuId, cnnameAScName </sql> <!--根据id查询用户的信息--> <selectid="queryById"parameterType="int"resultMap="mapingUserInfo"> <!--将外部的sql片段包含进来

refid:引入的sql片段的id属性

--> <includerefid="sqlNumber1"/> FROM t_userwhereid=#{value} </select>set:使用带update中充当更新语句中的set关键字动态SQL<updateid="updateUserInfo"parameterType="user"> updatet_user <set> <iftest="cnname!=nullandcnname!=''"> cnname=#{cnname}, </if> <iftest="email!=nullandemail!=''"> email=#{email}, </if> </set> <where> id=#{id} </where> </update>Spring目录CONTENTS123Spring概述IOC实现原理及应用AOP实现原理及应用掌握Spring框架构成掌握面向切面编程实现及Spring中的应用掌握反转控制的实现及Spring中的应用课程目标Spring概述掌握Spring的构成掌握Spring环境的搭建本节目标什么SpringSpring有哪些模块组成预习检查Spring是一个开源的轻量级JavaSE(Java标准版本)/JavaEE(Java企业版本)开发应用框架,其目的是用于简化企业级应用程序开发。应用程序是由一组相互协作的对象组成。而在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成。所以开发一个应用除了要开发业务逻辑之外,最多的是关注如何使这些对象协作来完成所需功能,而且要低耦合、高内聚。业务逻辑开发是不可避免的,那如果有个框架出来帮我们来创建对象及管理这些对象之间的依赖关系。可能有人说了,比如“抽象工厂、工厂方法设计模式”不也可以帮我们创建对象,“生成器模式”帮我们处理对象间的依赖关系,不也能完成这些功能吗?可是这些又需要我们创建另一些工厂类、生成器类,我们又要而外管理这些类,增加了我们的负担,如果能有种通过配置方式来创建对象,管理对象之间依赖关系,我们不需要通过工厂和生成器来创建及管理对象之间的依赖关系,这样我们是不是减少了许多工作,加速了开发,能节省出很多时间来干其他事。Spring框架刚出来时主要就是来完成这个功能。Spring框架除了帮我们管理对象及其依赖关系,还提供像通用日志记录、性能统计、安全控制、异常处理等面向切面的能力,还能帮我管理最头疼的数据库事务,本身提供了一套简单的JDBC访问实现,提供与第三方数据访问框架集成(如Hibernate、JPA),与各种JavaEE技术整合(如JavaMail、任务调度等等),提供一套自己的web层框架SpringMVC、而且还能非常简单的与第三方web框架集成。从这里我们可以认为Spring是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力,从而使我们可以更自由的选择到底使用什么技术进行开发。而且不管是JAVASE(C/S架构)应用程序还是JAVAEE(B/S架构)应用程序都可以使用这个平台进行开发。Spring是什么Spring能帮我们根据配置文件创建及组装对象之间的依赖关系。Spring

面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制Spring能非常简单的帮我们管理数据库事务。Spring还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板,来方便数据库访问。Spring还提供与第三方Web(如Struts、JSF)框架无缝集成,而且自己也提供了一套SpringMVC框架,来方便web层搭建。Spring能方便的与JavaEE(如JavaMail、任务调度)整合,与更多技术整合(比如缓存框架)。

Spring能帮我们做什么非常轻量级的容器以集中的、自动化的方式进行应用程序对象创建和装配,负责对象创建和装配,管理对象生命周期,能组合成复杂的应用程序AOPAOP是AspectOrientedProgramming的缩写,意思是面向切面编程,提供从另一个角度来考虑程序结构以完善面向对象编程(相对于OOP),即可以通过在编译期间、装载期间或运行期间实现在不修改源代码的情况下给程序动态添加功能的一种技术简单的数据库事务管理在使用数据库的应用程序当中,自己管理数据库事务是一项很让人头疼的事,而且很容易出现错误,Spring支持可插入的事务管理支持,而且无需JEE环境支持,通过Spring管理事务可以把我们从事务管理中解放出来来专注业务逻辑Spring的优点JDBC抽象及ORM框架支持Spring使JDBC更加容易使用;提供DAO(数据访问对象)支持,非常方便集成第三方ORM框架,比如Hibernate等;并且完全支持Spring事务和使用Spring提供的一致的异常体系灵活的Web层支持Spring本身提供一套非常强大的MVC框架,而且可以非常容易的与第三方MVC框架集成,比如Struts等简化各种技术集成提供对JavaMail、任务调度、JMX、JMS、JNDI、EJB、动态语言、远程访问、WebService等的集成。Spring的优点Spring架构图组件介绍核心容器:包括Core、Beans、Context、EL模块。Core模块:封装了框架依赖的最底层部分,包括资源访问、类型转换及一些常用工具类。Beans模块:提供了框架的基础部分,包括反转控制和依赖注入。其中BeanFactory是容器核心,本质是“工厂设计模式”的实现,而且无需编程实现“单例设计模式”,单例完全由容器控制,而且提倡面向接口编程,而非面向实现编程;所有应用程序对象及对象间关系由框架管理,从而真正把你从程序逻辑中把维护对象之间的依赖关系提取出来,所有这些依赖关系都由BeanFactory来维护。Context模块:以Core和Beans为基础,集成Beans模块功能并添加资源绑定、数据验证、国际化、JavaEE支持、容器生命周期、事件传播等;核心接口是ApplicationContext。EL模块:提供强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从Spring容器获取Bean,它也支持列表投影、选择和一般的列表聚合等Spring架构AOP、Aspects模块AOP模块:SpringAOP模块提供了符合

AOPAlliance规范的面向方面的编程(aspect-orientedprogramming)实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中;这样各专其职,降低业务逻辑和通用功能的耦合。Aspects模块:提供了对AspectJ的集成,AspectJ提供了比SpringASP更强大的功能。数据访问/集成模块事务模块:该模块用于Spring管理事务JDBC模块:提供了一个JBDC的样例模板ORM模块:提供与流行的“对象-关系”映射框架的无缝集成OXM模块:提供了一个对Object/XML映射实现,将java对象映射成XML数据,或者将XML数据映射成java对象JMS模块:用于JMS(JavaMessagingService),提供一套“消息生产者、消息消费者”模板用于更加简单的使用JMS,JMS用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信Spring架构Web/Remoting模块Web模块:提供了基础的web功能。例如多文件上传、集成IoC容器、远程过程访问(RMI、Hessian、Burlap)以及WebService支持,并提供一个RestTemplate类来提供方便的Restfulservices访问。Web-Servlet模块:提供了一个SpringMVCWeb框架实现。SpringMVC框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的JSP标签,完全无缝与Spring其他技术协作。Test模块

Spring支持Junit和TestNG测试框架,而且还额外提供了一些基于Spring的测试功能,比如在测试Web框架时,模拟Http请求的功能。Spring架构创建Maven项目添加依赖编写spring配置文件添加日志文件启动spring容器Spring环境搭建Spring核心依赖IOC实现原理及应用掌握Spring的IOC掌握Spring依赖注入掌握Spring中的注解扫描本节目标什么是IOC?和DI有什么区别?Spring中依赖注入有几种方式预习检查Ioc—InversionofControl,即“控制反转,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。UserDao的创建及维护都是在UserAction中完成的。所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。IoC是什么publicclassUserAction{privateUserDaouserDao=newUserDao();

publicvoidsave(Useruser){userDao.save(user);}}IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论