使用整合企业级开发框架9第九章springmvc与mybatis集成_第1页
使用整合企业级开发框架9第九章springmvc与mybatis集成_第2页
使用整合企业级开发框架9第九章springmvc与mybatis集成_第3页
使用整合企业级开发框架9第九章springmvc与mybatis集成_第4页
使用整合企业级开发框架9第九章springmvc与mybatis集成_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

第九章 Spring

MVC与MyBatis框架集成回顾Spring

3.0拥有自己独立的数据校验框架,同时支持JSR303标准的校验框架validation-api是JSR

303官方驱动包hibernate-validator是Hibernate对JSR

303的封装包<mvc:annotation-driven/>配置是自动注册SpringMVC所需的驱动,并通过LocalValidatorFactory注入校验框架在控制器中不仅可以使用ModelAndView对象传参和跳转,还能使用Servlet

API入参视图层一般使用form标签结合JSTL标签、EL表达式一同使用本章内容1MyBatis

Generator自动工具2Spring

MVC、MyBatis框架整合1使用MyBatis

Generator自动生成源代码2SMM框架整合3Mapper

DAO3完成客户信息维护功能1.

使用MG工具包,完成数据模型和数据库访问层代码生成践习实练Spring

MVC和MyBatis整合框架的特点MyBatis

Generator简介使用MyBatis

Generator工具自动生成源代码技术讲解讲解时间:

30分钟实践时间:

30分钟9.1使用Generator自动工具:内容预览9.1.1整合框架的特点使用SpringMVC和MyBatis框架整合是常用的一种项目架构。由于加入了MyBatis框架,而优势更大简单、灵活、易于扩展避免了复杂的缓存机制,在程序运行效率方面也得到了相应的提高。Spring

3.0注解支持,从而提高程序的开发效率。9.1.2

MyBatis

Generator简介MyBatis

Generator它是MyBatis官方提供的工具包,类似于之前所学的

Hibernate,通过数据库中的表生成映射文件,它包括

Entity、DAO类和Mapper

XML配置文件<generatorCon<figpurorapteiortny>name="trimStrings"

value="true"

/><class<P/javhaEMnotrdyelloGceantieorna=to"

r">/><cont<esxqtlMid=ap""GtaerngeertaRtourntaimrgee=t"P"a>ckage=""

targetProject=""><com<mperonptGeretynenraamtoer=>"enableSubPackages"value="true"

/></sqlM<parpoGpenrteyrnaatomr>e="suppressAllComments"

value="true"

/><jamveanCtlGieenntGereantoerr>atortype="XMLMAPPER"<jdbctCarognentPecatcioknagderi=v"e"rtCalragsest=P“r”ocjeocnt=ne""c>tionURL=“”

userId=“”<pparsospwerotrydn=a“”m/>e="enableSubPackages"

value="true"

/></jjaavvaaTCylpieenRtGeseonlevrear>tor><table<ptarobpleeNrtaymnea=m"e"

=d"ofmoracienBOigbDjeecctNimaamlse"=v"a">lu<e/t=a"bfalels>e"

/></con<te/jxatv>aTypeResolver></generato<rjCaovanMfigoudraetlGioenn>erator

targetPackage=""

targetProject=""><property

name="enableSubPackages"

value="true"

/>9.1.2

MyBatis

Generator简介Generator结构对关键配置元素和属性进行如下解释属性名 说明classPathEntry

连接数据库的驱动包,驱动包通常与配置文件位于同一路径commentGenerator

指定生成注解的模板,suppressAllComments=true表示去掉自动生成的代码注释jdbcConnection

指定数据库的连接信息javaTypeResolver

java类型转换器javaModelGenerator

指定数据模型(实体类)的生成信息属性名说明sqlMapGenerator指定sqlMapper

XML文件的生成路径javaClientGenerator指定DAO类生成的路径table配置反向生成的表信息(1)tablename属性:匹配数据库中的表名。(2)domainObjectName属性:自动生成的文件头名称,通常该配置的首字母大写。targetPackage属性:指定实体类生成的包,如

com.mstf.smm.entity。targetProject属性:指定实体类实际生成的物理位置,可以配置相对或绝对路径。9.1.2

MyBatis

Generator简介Generator自动生成要使用Java命令执行生成,才能得到Entity、DAO类和MapperXML配置文件java-jar

mybatis-generator-core.jar-configfile

Generator配置文件-overwrite9.1.3使用Generator工具自动生成源代码使用MyBatis

Generator工具自动生成源代码本案例使用MyBatis提供的Generator工具包反向生成代码。导入所需要的Jar包文件;编写Generator配置文件属性最后,使用Java命令执行生成1.在src目录中,创建名为“aotu”的包。导入(复制)所需要的jar包文件包名说明mybatis-3.1.1.jar所需的驱动mybatis-generator-core-1.3.2.jarGenerator工具包的驱动mysql-connector-java-5.1-bin.jarMySql数据库连接驱动为了降低程序的复杂性,我们将生成时所需的文件统一存放于auto包内。使用Java命令时,文件直接生成到src中。9.1.3使用Generator工具自动生成源代码<property

name="suppressAllComments"

value="true"

/><mentGenerator><jdbcConnection

driverClass=“com.mysql.jdbc.Driver”connectionURL=“jdbc:mysql://localhost:3306/mstf”

userId=“root”password=“”/><javaTypeResolver><property

name="forceBigDecimals"

value="false"/></javaTypeResolver><javaModelGeneratortargetPackage=“com.mstf.smm.entity”targetProject=“../">2.在aotu包中,创建config.xml文件,编写Generator配置文件属性MySql驱动<generatorConfiguration><classPathEntry

location="mysql-connector-java-5.1.13-bin.jar"

/><contextid="MySqlTables"targetRuntime="MyBatis3"><commentGenerator>连接信息数据模型类,生成位置(包)相对路径的上一层目录9.1.3使用Generator工具自动生成源代码2.在aotu包中,创建config.xml文件,编写Generator配置文件属性<property

name="trimStrings"

value="true"/></javaModelGenerator><sqlMapGeneratortargetPackage="com.mstf.smm.dao"targetProject=“../"><javaClientGenerator

type="XMLMAPPER"targetPackage="com.mstf.smm.dao"targetProject=“../"><property

name="enableSubPackages"

value="true"

/></javaClientGenerator><table

tableName="customer"

domainObjectName="Customer"></table></context></generatorConfiguration><property

name="enableSubPackages"value="falseD"A/>O类生产的路径和包MapperXML类生产<property

name="enableSubPackages"value="true"/>

的路径和包</sqlMapGenerator>要生产的表名要生产的类名9.1.3使用Generator工具自动生成源代码3.完成后,查看工程的结构9.1.3使用Generator工具自动生成源代码4.

使用java命令,执行配置脚本。打开MS-DOS窗口,将当前路径指向到auto目录下,执行java命令。当最后控制台输出“MyBatis

Generator

finished

successfully.”时,表示正确生成配置9.1.3使用Generator工具自动生成源代码5.在工程名上,单击“右键”选择“refrash”刷新工程。此时,工程中会出现两个包,此即为使用Generator工具包生成的结果9.1.3使用Generator工具自动生成源代码5.生成的文件清单如下:包名说明Customer数据模型(实体)类CustomerExample针对DML语句中where子句的辅助类,非常实用CustomerMapper数据库访问层,它封装了单表的DML操作CustomerMapper.xmlSQL语句的映射文件当我们在MS-DOS窗口重复执行命令时,所有自动生成的java文件都是重新生成、且覆盖以前的文件。但是,Mapper.xml文件不会重新生成,而是将文档内容追加,产生重复的配置代码。此时,再次启动服务器时,控制台会报错。所以,建议同学们重新执行Java命令前,首先要删除现有的Mapper.xml文件。9.1.3使用Generator工具自动生成源代码9.1.4学生实践练习实践时间:

30分钟使用MyBatisGenerator工具包,完成数据模型和数据库访问层代码生成。对数据库中,goods表的反向生成9.1.4学生实践练习在mysql数据库中,创建名为“goods”的商品表。创建Web工程,命名为“goodsProject”。在src目录中,创建auto包。在auto包中,导入(复制)所需要的jar包文件。在aotu包中,创建config.xml文件,编写Generator配置文件属性。在MS-DOS中,执行Java命令完成反向生成。1.

搭建SMM框架,完成商品信息查询功能践习实练Spring

3.0在各层中使用的注解SMM架构整合搭建和使用技术讲解讲解时间:

45分钟实践时间:

30分钟9.2

SMM框架整合:内容预览9.2.1

Spring

3.0在各层中使用的注解Spring3.0采用全注解的方式开发,被注解后,不需要使用<bean>进行注入,如此减少了配置环节,提高了开发效率。使用步骤如下:在spring配置文件中,使用<ponent-scan>自动扫描注解,如@Repository、@Autowired等。依次在各层中,使用@Repository、@Service和@Controller注解。在依赖类中,使用@Autowired对接口声明@Autowired@Autowired注解用于自动装配对象,类似于在

applicationContext.xml文件中注入对象@Autowiredprivate

Objectobj;9.2.1

Spring

3.0在各层中使用的注解SMM架构整合搭建和使用1.

在web工程中,添加Spring支持,选择Core

Libraries、AOP

Libraries、Persistence

Core和Web

Libraries支持。其中,Persistence

Core代表对持久化框架的支持,并非特指Hibernate框架,所以需要添加Persistence

Core。9.2.2

SMM架构整合搭建和使用2.在lib文件夹下,导入(复制)所需要的jar包文件。其中,mybatis-spring-1.1.1.jar用于整合所需要的关键包9.2.2

SMM架构整合搭建和使用包名说明commons-dbcp.jarApache提供的DBCP数据源commons-pool-1.5.4.jarDBCP数据源中连接池的实现mybatis-3.1.1.jarMyBatis

3.1驱动mybatis-spring-1.1.1.jar由MyBatis提供的Spring被整合包mysql-connector-java-5.1-bin.jarMySql数据库连接驱动jstl.jarJSTL支持standard.jarJSTL支持3.在src目录中,创建MyBatis配置文件。因为架构整合的原因,我们只需要配置Mappers映射即可9.2.2

SMM架构整合搭建和使用sqlMapConfig.xml文件<configuration><mappers><mapper

resource="com/mstf/smm/dao/CustomerMapper.xml"

/></mappers></configuration>每个mapper配置一个映射文件路径4.在viewSpace-servlet.xml文件中,添加Spring配置信息9.2.2

SMM架构整合搭建和使用<beans

xmlns=""xmlns:xsi="

"xmlns:mvc="

"xmlns:p="

"xmlns:context="

"xmlns:tx="

" xmlns:aop="

"xsi:schemaLocation="">添加Spring对mvc、context、tx和aop的支持4.

在viewSpace-servlet.xml文件中,添加Spring配置信息9.2.2

SMM架构整合搭建和使用<mvc:annotation-driven

/><ponent-scan

base-package="com.mstf.smm"

/><bean

id="dataSource"

class="

mons.dbcp.BasicDataSource"><property

name="driverClassName"

value="com.mysql.jdbc.Driver“/><property

name="url"value="jdbc:mysql://localhost:3306/mstf?useUnicode=true&characterEncoding=utf-8“/><property

name="username"

value="root"></property><property

name="password"value=""></property></bean><bean

id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><property

name="configLocation"

value="classpath:sqlMapConfig.xml"

/><property

name="dataSource"

ref="dataSource"></property></bean>自动注册SpringMVC所需的所有驱动配置dbcp数据源,通过数据源管理数据库连接管理MyBatis

Session工厂以上四个步骤,可以使用Spring对SpringMVC和MyBatis框架整合过程全部完成。9.2.2

SMM架构整合搭建和使用9.2.2

SMM架构整合搭建和使用实现员工信息添加功能本案例实现对员工信息添加操作,具体步骤如下:在CustomerMapper接口中,添加@Repository注解在viewSpace-servlet.xml文件中,添加对CustomerMapper的配置信息在service包中,创建CustomerService业务处理类。添加@service注解,并通过@Autowired实现对数据库访问层的调用在action包中,创建CustomerController控制器类。处理页面添加请求在WebRoot目录中,创建index.jsp页面,编写注册表单9.2.2

SMM架构整合搭建和使用1.在CustomerMapper接口中,添加@Repository注解CustomerMapper.java@Repositorypublic

interface

CustomerMapper

{int

countByExample(CustomerExample

example);//省略……}9.2.2

SMM架构整合搭建和使用<bean

id="customerMapper“class="org.mybatis.spring.mapper.MapperFactoryBean"><property

name="mapperInterface"value="com.mstf.smm.dao.CustomerMapper"

/><property

name="sqlSessionFactory"

ref="sqlSessionFactory"

/></bean>2.在viewSpace-servlet.xml文件中,添加对

CustomerMapper的配置信息引入DAO接口,产生DAO实现类,并动态获得sqlSessionFactory对象viewSpace-servlet.xml在注入中,对Mapper(DAO)实施注入,并引用sqlSessionFactoryBean。在项目中,要对每一个Mapper接口分别配置。它们的注入顺序是:

dataSource→sqlSessionFactory→xxMapper。3.在service包中,创建CustomerService业务处理类。添加@service注解,并通过@Autowired实现对数据库访问层的调用9.2.2

SMM架构整合搭建和使用CustomerService.java@Servicepublic

class

CustomerService

{@Autowiredprivate

CustomerMapper

customerMapper;public

int

addCustomers(Customer

cus)

{return

customerMapper.insert(cus);}}使用@Autowired自动注解4.在action包中,创建CustomerController控制器类。处理页面的添加请求9.2.2

SMM架构整合搭建和使用CustomerController.java@Controller@RequestMapping(value="/")public

class

CustomerColltroller

{@Autowiredprivate

CustomerService

customerService;@RequestMapping(value="/reg")public

String

reg(@ModelAttribute("customer")

Customer

cus){customerService.addCustomers(cus);return"/index.jsp";}}使用@Autowired自动注解9.2.2

SMM架构整合搭建和使用5.

在WebRoot目录中,创建index.jsp页面,编写注册表单index.jsp<form

action="reg.form"method="post"><table><tr><td>姓名:</td><td><input

name="cusName"

type="text"

/></td></tr>……<tr><td

colspan="2"

align="center"><input

type="submit"

value="添加客户"/></td></tr></table></form>6.

在浏览器地址栏中,输入地址。填写注册表单7.

打开mysql客户端工具,客户信息已经添加到customer表9.2.2

SMM架构整合搭建和使用CustomerMapper只是一个接口,而我们要在Service类中对其进行实例化调用,那么MyBatis是如何做到的呢?在Spring配置中,使用MapperFactoryBean对象创建动态代理类实现CustomerMapper接口,并注入到程序中9.2.2

SMM架构整合搭建和使用9.2.3学生实践练习实践时间:

30分钟搭建SMM框架,完成商品信息查询功能。当用户输入商品ID时,在新页面显示查询商品的信息9.2.3学生实践练习参考本教材第8章的8.2小节,完成SMM项目架构搭建。在GoodsMapper接口中,添加@Repository注解。在viewSpace-servlet.xml文件中,添加对CustomerMapper的配置信息在service包中,创建GoodsService业务处理类。添加@service注解,通过@Autowired实现对下层的访问。在action包中,创建GoodsController控制器类。处理页面的查询请求在WebRoot目录中,创建index.jsp页面。填写商品ID在WebRoot目录中,创建details.jsp页面,编写简单表单,注册客户信息在浏览器地址栏中,输入地址,查看运行结果。1.

改进“商品信息管理”案例,完成商品表信息修改功能践习实练Mapper

DAO方法详解完成客户信息列表完成客户信息组合查询技术讲解讲解时间:

20分钟实践时间:

25分钟9.3

Mapper

DAO:内容预览9.3.1

Mapper

DAO方法详解Mapper

DAO方法使用Generator自动工具生成时,系统产生了一个Mapper类,它封装了DML的常用方法。方法名说明countByExample通过任意查询条件,返回表中的数据行数deleteByExample通过任意条件删除表数据,返回受影响的行数deleteByPrimaryKey通过主键删除表数据,返回受影响的行数insert全字段添加数据,返回受影响的行数insertSelective任意字段添加数据,返回受影响的行数selectByExample通过任意条件查询数据,返回List结果集selectByPrimaryKey通过主键查询数据,返回实体对象updateByExampleSelective通过任意条件更新表数据,返回受影响的行数updateByExample更新全字段的数据,返回受影响的行数updateByPrimaryKeySelective通过主键更新表任意字段数据,返回受影响的行数updateByPrimaryKey通过主键更新表全字段数据,返回受影响的行数9.3.1

Mapper

DAO方法详解Example参数在方法中使用了大量的Example作为参数,该如何使用?通过cus_name字段查询结果集MyBatis代码CustomerExample

example=new

CustomerExample();example.createCriteria().andCusNameEqualTo("穆勒");List<Customer>list=customerMapper.selectByExample(example);SQL语句输出select

cus_id,

cus_name,

cus_birthday,

cus_grade

from

customerWHERE

(

cus_name

=

?

)9.3.1

Mapper

DAO方法详解通过cus_name字段模糊匹配,更新cus_grade,返回结果集MyBatis代码Customer

customer

=

new

Customer();customer.setCusGrade("NONE");CustomerExample

example=new

CustomerExample();example.createCriteria().andCusNameLike("穆%");int

count

=

customerMapper.updateByExampleSelective(customer,example);SQL语句输出update

customer

SETcus_grade

=

?

WHERE

(

cus_name

like

?

)9.3.1

Mapper

DAO方法详解通过cus_name和cus_grade字段查询,并通过cus_id倒序结果集MyBatis代码CustomerExample

example

=

new

CustomerExample();example.createCriteria().andCusNameEqualTo("jack");example.or(example.createCriteria().andCusGradeEqualTo("VIP"));example.setOrderByClause("cus_id

desc");List<Customer>

list

=

customerMapper.selectByExample(example);SQL语句输出select

cus_id,

cus_name,

cus_birthday,

cus_grade

from

customerWHERE

(

cus_name

=

?

)

or(

cus_grade

=

?

)

order

by

cus_id

desc9.3.2完成客户信息列表显示客户信息列表功能本案例要求实现客户信息列表功能。开启Spring

MVC框架对JSTL标签库的支持;依次编写数据库访问层、业务逻辑层和控制层的代码;最后,在页面中使用JSTL,结合EL表达式渲染9.3.2完成客户信息列表1.在viewSpace-servlet.xml文件中,添加视图层对JSTL标签库的支持viewSpace-servlet.xml<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property

name="viewClass"value="org.springframework.web.servlet.view.JstlView"></property></bean>9.3.2完成客户信息列表2.

在CustomerService类中,编写获取用户列表的方法3.

在CustomerController类中,编写控制器方法,通过request保存输出结果集4.在index.jsp页面中,添加跳转链接,请求控制器中的all()方法CustomerSCeornvtircoell.exrm.jal

vap@uRbleicqLuiesst<tMCaupsptoinmge(vr>alfuined=C"/uasll"to)

mers()

{CpubsltiocmSetrriEnxgaamll(pHlettpeSxaemrvpleletR=eqnueewsCt

ruesqtuoemset)rE{

xample();returnrecquusetosmt.seertMAattpripbeurt.es(e"lceucstBLiysEt"x,

acmusptloem(eexraSmerpvleic)e;

.findCustomers());return

"display.jsp";}}index.jsp<a

href="all.form">查看客户信息列表</a>9.3.2完成客户信息列表5.在WebRoot目录中,创建display.jsp文件,接收并渲染结果集display.jsp<%@

taglib

uri="

"

prefix="c"

%><%@

taglib

uri="

"

prefix="fmt"

%>……<table

border="1"

width="500"

align="center">……<c:forEach

var="cus"

items="${cusList}"

varStatus="vs"><tr><td>${vs.count}</td><td>${cus.cusName}</td><td><fmt:formatDate

value="${cus.cusBirthday}"pattern="yyyy年MM月dd日"/></td><td>${cus.cusGrade}</td></tr></c:forEach></table>日期类型格式化9.3.3完成客户信息组合查询实现客户信息组合查询功能本案例在客户列表基础上,增加信息的组合查询功能。对“用户名”和“客户级别”字段进行组合查询,如果直接点击“查找”按钮,则查询出所有客户信息;当输入一个条件时,则按单条件查询如果输入两个条件,将使用AND多条件查询9.3.3完成客户信息组合查询public

List<Customer>

findByProperty(Customercus){CustomerExample

example

=

new

CustomerExample();Criteria

c=

example.createCriteria();if(!"请选择".equals(cus.getCusGrade())) //

等级条件匹配c.andCusGradeEqualTo(cus.getCusGrade()); //

and条件拼接if(!"".equals(cus.getCusName())) //

姓名条件模糊匹配c.andCusNameLike("%"

+

cus.getCusName()

+

"%");return

customerMapper.selectByExample(example);}1.在CustomerService类中,编写findByProperty方法,接收查询参数,返回查询列表客户信息条件查询CustomerService.java9.3.3完成客户信息组合查询2.在CustomerController类中,编写search方法,接收查询参数,返回查询结果集CustomerController.java@RequestMapping(value="/search")public

String

search(@ModelAttribute("customer")

Customer

cus,HttpServletRequest

request)

{request.setAttribute("cusList",

customerService.findByProperty(cus));return

"display.jsp";}将查询结果保存到request对象中9.3.

温馨提示

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

评论

0/150

提交评论