




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模块一基础技能训练模块《电商web云平台开发》思维导图搭建电商平台Spring业务层搭建电商平台的web项目SpringMVC展示层搭建电商平台数据处理Mybais项目1目录CONTENTS234电商平台SSM三层框架整合项目三
搭建电商平台数据处理Mybais项目项目背景
MyBatis是一款优秀的开源持久层框架,是Java中使用较多的ORM框架,两者可以在同一项目中互补使用。MyBatis的开发步骤是根据全局配置文件初始化会话工厂,通过会话工厂开启会话,从会话对象得到映射器,使用映射器调用映射的数据方法。全局配置文件会话工厂开启会话会话对象输入参数映射输出结果映射本章节主要介绍MyBatis框架的相关知识,需要掌握在项目中使用MyBatis框架的能力。研究内容认知MyBatis掌握MyBatis基础配置文件掌握MyBatis单表CRUD操作掌握MyBatis多表关联操作学习目标1.理解MyBatis框架以及工作原理;2.了解MyBatis与Hibernate区别;3.认识MyBatis常用标签以及配置文档。知识目标1.掌握MyBatis单表CRUD操作;2.掌握Mapper动态代理开发技巧;3.掌握MyBatis单表curd操作;4.掌握MyBatis多表关联关系查询设置。技能目标1.通过搭建电商平台数据处理的MyBatis项目培养学生学习开发语言的兴趣;2.通过MyBatis相关操作的实现来锻炼学生规范的编码能力。素养目标任务一认知MyBatis预备知识一、MyBatis起源来源于“internet”和“abatis”的组合>基于Java的持久层框架>包括SQLMaps和DataAccessObjects(Dao)>很好地解决Hibernate遇到的问题>预备知识二、MyBatis简介工作原理将Statement配置,通过动态参数进行映射,生成最终执行的SQL语句,由MyBatis框架执行SQL,并将结果映射成Java对象。预备知识结构体系二、MyBatis简介实施准备开发人员想要使用MyBatis框架,第一步应当了解什么是MyBatis框架,同学们开始本节任务之前,可以提前浏览一下MyBatis的官网,其官网网址为(),了解MyBatis框架的下载和MyBatis核心jar包的作用,为本章学习内容做准备。任务实施与分析步骤1:下载MyBatis相关的包ABCD点击“MyBatis-3”点击MyBatis3.3.0.zip进入GitHub官网点击“DownloadLatest”任务实施与分析步骤2:MyBatisJar包说明MyBatis框架的解压目录中只有一个Jar包,它是MyBatis的核心Jar包。还有一个lib目录,其中存放着MyBatis所依赖的Jar包。任务实施与分析Jar包依赖Jar包作用说明MyBatis-3.4.5.jarMyBatis核心jar包asm-5.2.jar字节码解析包,被cglib依赖cglib-3.2.5.jar动态代理的实现commons-logging-1.21.jar日志包javassist-3.22.01-GR2.jar字节码解析包log4j-1.2.17.jar日志包log4j-api-2.3.jarlog4j-core-2.3.jarslf4j-api-1.7.25.jarslf4j-log4j12-1.7.25.jarJar包及依赖Jar包作用说明思政小课堂汉字国标码,创建于1980年,目的为了使每个汉字有一个全国统一的代码而颁布了汉字编码的国家标准。每个汉字有个二进制编码,叫汉字国标码。我国国家标准局于1981年5月颁布了《信息交换用汉字编码字符集——基本集》,代号为GB2312-80,共对6763个汉字和682个图形字符进行了编码,其编码原则为:汉字用两个字节表示,每个字节用七位码(高位为0)。国家标准将汉字和图形符号排列在一个94行94列的二维代码表中,每两个字节分别用两位十进制编码,前字节的编码称为区码,后字节的编码称为位码,此即区位码。MyBatis实现了SQL语句与代码的分离,给程序的维护带来了很大便利。MyBatis能够实现比Hibernate等全自动ORM框架更高的查询效率,能够完成复杂查询。Hibernate提供了全面的数据库封装机制的“全自动”ORM灵活实现了POJO和数据库表之间的映射,以及SQL的自动生成和执行拓展知识一、MyBatis与Hibernate区别拓展知识二、MyBatis的特点轻量、体积小没有强制第三方包的依赖高效MyBatis具备较高的效率简单易学提供了全面的中文学习文档灵活支持存储过程及高级映射能够和Spring进行很好的整合思考与总结什么是MyBatis框架?使用MyBatis框架要导入哪些jar包?
能力提升在前面的章节中,我们已经对电商网站项目单独引入了的Spring框架和SpringMVC框架,本节将对电商网站项目引入MyBatis框架,请同学们结合本节学习内容,继续完善电商网站项目的以下任务:
在项目根目录下创建lib文件夹;
从MyBatis官网下载MyBatis开发所需的jar包;
将jar包导入到电商网站项目的ib文件夹中,并添加至构建路径;
创建Test.Java文件,输出“HelloWorld!”,确保环境搭建成功。任务训练1.在开发工具中新建一个javaproject项目来作为自己的电商项目框架;2.在项目的lib文件夹中导入Mybatis所需的jar包,并添加至构建路径;3.创建测试类,确保项目可以正常运行。《电商web云平台开发》感谢观看!模块一基础技能训练模块《电商web云平台开发》思维导图目录CONTENTS搭建电商平台Spring业务层搭建电商平台的web项目SpringMVC展示层搭建电商平台数据处理Mybais项目1234电商平台SSM三层框架整合项目三
搭建电商平台数据处理Mybais项目项目背景
MyBatis是一款优秀的开源持久层框架,是Java中使用较多的ORM框架,两者可以在同一项目中互补使用。MyBatis的开发步骤是根据全局配置文件初始化会话工厂,通过会话工厂开启会话,从会话对象得到映射器,使用映射器调用映射的数据方法。全局配置文件会话工厂开启会话会话对象输入参数映射输出结果映射本章节主要介绍MyBatis框架的相关知识,需要掌握在项目中使用MyBatis框架的能力。研究内容认知MyBatis掌握MyBatis基础配置文件掌握MyBatis单表CRUD操作掌握MyBatis多表关联操作学习目标1.理解MyBatis框架以及工作原理;2.了解MyBatis与Hibernate区别;3.认识MyBatis常用标签以及配置文档。知识目标1.掌握MyBatis单表CRUD操作;2.掌握Mapper动态代理开发技巧;3.掌握MyBatis单表curd操作;4.掌握MyBatis多表关联关系查询设置。技能目标1.通过搭建电商平台数据处理的MyBatis项目培养学生学习开发语言的兴趣;2.通过MyBatis相关操作的实现来锻炼学生规范的编码能力。素养目标任务二掌握MyBatis的基础配置预备知识一、DAO接口是一种应用程序编程接口,放在业务逻辑与数据库资源中间,需要通过SqlSession对象来操作DB。DAODataAccessObject对象SqlSessionFactory对象SqlSessionFactoryBuilder的build()方法SqlSession对象预备知识实际开发过程中使用最多的123主要完成DAO层中SQL语句的映射Mapper映射文件是一个xml格式文件二、Mapper映射文件预备知识三、日志控制文件MyBatis使用Log4j进行日志处理,在MyBatis中将perties放入到项目的src目录下。设置为DEBUG显示出所执行的SQL语句、参数值、对DB的影响条数等信息设置为TRACE显示出查询出的每条记录的每个字段名及对应的值注意:根日志对象rootLogger,则会输出太多的信息,不建议使用跟日志对象。预备知识四、从属性文件中读取DB链接为了方便对数据库连接的管理,DB连接数据一般都是存放在一个专门的属性文件中的,方便MyBatis主配置文件从这个属性文件中读取这些数据。实施准备同学们要进行MyBatis的基础配置,需要先熟悉了解MyBatis主配置文件中的标签以及作用,为后期综合项目开发中灵活使用MyBatis做准备。MyBatis主配置文件是全局配置文件,主要配置MyBatis的数据源(DataSource)、事务管理(TransactionManager)、打印SQL语句、开启二级缓存、设置实体类别名等功能。步骤1:MyBatis主配置文件功能注册存放DB连接四要素的属性文件注册实体类的全限定性类名的别名注册映射文件任务实施与分析配置MyBatis运行环境,即数据源与事务管器<configuration>标签<properties>标签<package>标签<dataSource>标签<transactionManager>标签<environments>标签任务实施与分析步骤2:MyBatis主配置文件标签解析<typealias>标签<mappers>标签任务实施与分析<package>标签<typeAliases> <!--将指定包中所有类的简单类名当作其别名--> <packagename="com.framework.beans"/></typeAliases>通过package可以直接指定package的名字,MyBatis自动扫描JavaBean,通常采用这种方式指定别名,任务实施与分析<typealias>标签<typeAliases> <typeAliastype="com.framework.beans.Student"alias="Student"/></typeAliases>type指定全限定性类名alias指定别名,必须逐个指定,比较繁琐任务实施与分析<mappers>标签<mapperresource=“”><mapperurl=“”><mapperclass=“”><packagename=“”>特别说明<mapperurl=“”>方式通过其URL地址即可直接访问;<mapperclass=“”>方式使用需要满足三个条件;<packagename=“”>方式还需要同时满足DAO使用mapper动态代理实现的条件。四种方式任务实施与分析步骤3:映射文件解析namespacecacheSQL元素insertcache-refresultMap指定命名空间的缓存配置用来描述如何从数据库结果集中来加载对象指定映射插入语句用于绑定DAO接口的指定在其他命名空间缓存配置的引用被用来定义可重用的SQL代码段.任务实施与分析update指定映射更新语句select查询语句是MyBatis中最常用的元素之一,对每个插入、更新或删除操作,通常需要对应多个查询操作。delete指定映射删除语句select指定映射查询语句步骤3:映射文件解析拓展知识一、MyBatis入门程序搭建1.创建MyBatis_demo1程序打开MyEclipse创建Javaproject项目,并创建一个lib文件夹存放相应jar。拓展知识2.导入相应的jar文件打开刚创建的项目在根目录下创建lib文件夹,导入MyBatis的jar包并构建路径。除了导入MyBatis的核心Jar包及依赖Jar包外,还需要导入MySQL的驱动Jar包、JUnit测试的Jar包、核心Jar包与依赖Jar包。拓展知识3.在数据库中生成表结构打开mySQL数据库创建MyBatis_demo数据库并创建student表。MyBatis要求,在创建数据库表时,字段名要与属性名一致,如果不一致,就需要再通过resultMap来解决。拓展知识4.定义实体类打开MyBatis_demo1项目创建com.framework.baen包,在该包下创建student实体类。实现对应属性get/set/toString方法以及有参无参数方法。packagecom.framework.beans;publicclassStudent{ privateIntegerid; privateStringname; privateintage; privatedoublescore; publicStudent(){ super(); //TODOAuto-generatedconstructorstub } publicStudent(Stringname,intage,doublescore){ super(); =name; this.age=age; this.score=score; }拓展知识5.定义Dao接口publicinterfaceIStudentDao{ voidinsertStu(Studentstudent);}打开MyBatis_demo1项目创建com.framework.Dao包,在该包下定义Student实体对应的Dao接口IStudentDao并创建学生插入方法。拓展知识6.定义映射文件<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//MyB//DTDMapper3.0//EN""http://MyB/dtd/MyBatis-3-mapper.dtd"><mappernamespace="com.framework.Dao.IStudentDao">
<!--parameterType属性可以省略--> <insertid="insertStudent"parameterType="com.framework.beans.Student"> insertintostudent(name,age,score)values(#{name},#{age},#{score}) </insert></mapper>打开MyBatis_demo1项目的com.framework.Dao包,在该包下创建StudentMapper.xml文件并实现学生插入的SQL语句声明。拓展知识7.MyBatis主配置文件0304020501设置实体类别名开启二级缓存事务管理(TransactionManager)打印SQL语句MyBatis的数据源(DataSource)配置文件头,可以从MyBatis框架中的文档MyBatis-3.3.0.pdf中找到。拓展知识7.MyBatis主配置文件jdbc.driver=com.mySQL.jdbc.Driverjdbc.url=jdbc:mySQL://:3306/MyBatis_demojdbc.user=rootjdbc.password=root打开MyBatis_demo1项目,在src文件下创建perties数据库连接配置文件。在pdf中搜索“MyBatis-3-config.dtd”关键字,即可找到映射文件的约束。拓展知识8.创建工具类MyBatisUtilpublicclassMyBatisUtils{ privatestaticSqlSessionFactorySqlSessionFactory; publicstaticSqlSessiongetSqlSession(){ try{ InputStreamis=Resources.getResourceAsStream("MyBatis.xml"); if(SqlSessionFactory==null){
SqlSessionFactory=newSqlSessionFactoryBuilder().build(is); } returnSqlSessionFactory.openSession(); }catch(IOExceptione){ e.printStackTrace(); } returnnull; }}打开MyBatis_demo2项目的com.framework.utils包,在该包下创建MyBatisUtils数据库连接工具类。拓展知识9.定义DAO实现类publicclassStudentDaoImplimplementsIStudentDao{ privateSqlSession
SqlSession; publicvoidinsertStu(Studentstudent){ //TODOAuto-generatedmethodstub try{
SqlSession=MyBatisUtils.getSqlSession();
SqlSession.insert("insertStudent",student);
SqlSession.commit(); }finally{ if(SqlSession!=null){
SqlSession.close(); } } }}打开com.framework.Dao包下的实现类StudentDaoImpl,对该类的插入方法做出调整,使其在finally{}中关闭SqlSession。拓展知识10.定义测试类publicclassMyTest{ privateIStudentDaodao;(对于引用接口名称时,首字母小写并采用驼峰式命名规则) @Before publicvoidbefore(){ dao=newStudentDaoImpl(); } @Test publicvoidtestInsert(){ Studentstudent=newStudent("张三",23,93.5); dao.insertStu(student); }}打开MyBatis_demo1项目的com.framework.test包,在该包下创建MyTest.class文件并实现测试方法。拓展知识11.添加日志文件
##definealogger#space_value=trace,consolelog4j.logger.test=debug,console##definealoggerlog4j.logger.test=trace,console在MyBatis中需要将perties放入到项目的src目录下在MyBatis中,可以指定要输出日志的工作空间namespace的名字,指定后,程序就只会输出SQL的日志内容。拓展知识12.运行测试类测试方法输出结果
DEBUG[main]-==>Preparing:insertintostudent(name,age,score)values(?,?,?)
DEBUG[main]-==>Parameters:张三(String),23(Integer),93.5(Double)
DEBUG[main]-<==Updates:1运行测试类测试方法后控制台输出信息如下所示。打开数据库查看插入的数据思政小课堂1995年1月,邮电部分别在北京、上海开通了64K专线,开始尝试向社会提供国际互联网接入服务。5月,中国电信开始筹建中国公用计算机互联网(ChinaNet)全国骨干网,开始了互联网在中国的大规模建设。5月17日,邮电部正式宣布向国内社会开放计算机互联网接入服务。此外,邮电部不仅在《人民日报》上刊登推广互联网的广告,还在当时的北京图书馆(如今的国家图书馆)举办了为期6天的“中国公用数据通信演示周”活动。而当时负责组织、领导建立起全国范围内技术先进的数据通信网络工作的,正是时任邮电部数据通信局局长——刘韵洁。作为CHINANET的重要奠基人,刘韵洁被誉为"中国互联网络之父",并被美国《时代周刊》评为全球50位数字英雄之一。思考与总结MyBatis主配置文件有哪些作用?怎样配置实体类的别名?
能力提升在上一节中,我们已经对电商网站项目引入了MyBatis框架开发的相关jar包,本节将对电商网站项目的MyBatis配置文件进行配置,请同学们结合本节所学内容,继续完成电商网站项目的以下内容:
完成电商网站项目的MyBatis框架搭建;
完成电商网站项目的MyBatis配置文件的配置;
向后台用户表中插入一条用户数据。任务训练1.在数据库中创建商品表,并创建实体类;2.创建商品类的Dao接口与映射文件,创建商品查询方法;3.完成Mybatis框架的基础配置;4.创建工具类,工具类的作用是获取SqlSession对象;5.创建Dao接口的实现类,然后测试商品查询方法是否可以从数据库中查询数据。《电商web云平台开发》感谢观看!模块一基础技能训练模块《电商web云平台开发》思维导图目录CONTENTS搭建电商平台Spring业务层搭建电商平台的web项目SpringMVC展示层搭建电商平台数据处理Mybais项目1234电商平台SSM三层框架整合项目三
搭建电商平台数据处理Mybais项目项目背景
MyBatis是一款优秀的开源持久层框架,是Java中使用较多的ORM框架,两者可以在同一项目中互补使用。MyBatis的开发步骤是根据全局配置文件初始化会话工厂,通过会话工厂开启会话,从会话对象得到映射器,使用映射器调用映射的数据方法。全局配置文件会话工厂开启会话会话对象输入参数映射输出结果映射本章节主要介绍MyBatis框架的相关知识,需要掌握在项目中使用MyBatis框架的能力。研究内容认知MyBatis掌握MyBatis基础配置文件掌握MyBatis单表CRUD操作掌握MyBatis多表关联操作学习目标1.理解MyBatis框架以及工作原理;2.了解MyBatis与Hibernate区别;3.认识MyBatis常用标签以及配置文档。知识目标1.掌握MyBatis单表CRUD操作;2.掌握Mapper动态代理开发技巧;3.掌握MyBatis单表curd操作;4.掌握MyBatis多表关联关系查询设置。技能目标1.通过搭建电商平台数据处理的MyBatis项目培养学生学习开发语言的兴趣;2.通过MyBatis相关操作的实现来锻炼学生规范的编码能力。素养目标任务三MyBatis单表CRUD操作预备知识一、在Mapper.xml文件中映射增删改查<insertid=""parameterType="">insertinto表名称……</insert><updateid=""parameterType="">update表名称set……</update>1.<insert>标签映射插入语句2.update标签映射更新语句预备知识一、在Mapper.xml文件中映射增删改查3.delete映射删除语句<deleteid=""parameterType=""> deletefrom表名称……</delete>4.select映射查询语句<selectid=""resultType=""parameterType=""> select*from表名称……</select>实施准备MyBatis单表CRUD操作实施准备,其主要目的是实现用户CRUD操作,重点讲解创建用户、更新用户、查询所有学生、根据id删除用户,同学们需要提前创建好空白项目,并配置好MyBatis相关配置。任务实施与分析步骤1:创建项目MyBatis_demo2publicclassMyBatisUtils{ privatestaticSqlSessionFactorySqlSessionFactory; publicstaticSqlSessiongetSqlSession(){ try{ InputStreamis=Resources.getResourceAsStream("MyBatis.xml"); if(SqlSessionFactory==null){
SqlSessionFactory=newSqlSessionFactoryBuilder().build(is); } returnSqlSessionFactory.openSession(); }catch(IOExceptione){ e.printStackTrace(); } returnnull; }}创建项目并配置好MyBatis环境,搭建及配置请参考上一节的拓展知识,即代码如右侧所示:任务实施与分析步骤2:修改基本类publicinterfaceIStudentDao{ //插入用户 voidinsertStudent(Studentstudent); voidinsertStudentCacheId(Studentstudent); //根据id删除用户 voiddeleteStudentById(intid); //更新用户 voidupdateStudent(Studentstudent); //查询所有用户信息 List<Student>selectAllStudents(); //查询所有用户返回Map集合 Map<String,Object>selectAllStudentsMap(); //根据用户ID查询用户 StudentselectStudentById(intid); //根据用户名称查询用户 List<Student>selectStudentsByName(Stringname); //根据用户名称查询用户 List<Student>selectStudentsByMap(Map<String,Object>params);}打开MyBatis_demo2程序下com.framework.dao包下的IStudentDao接口,在该接口中创建插入用户接口、根据用户id删除用户接口、更新用户接口、查询学生等接口。步骤2.1:修改DAO接口任务实施与分析步骤2:修改基本类@Override
public
voidinsertStudent(Studentstudent){
try{
SqlSession=MyBatisUtils.getSqlSession();
SqlSession.insert("insertStudent",student);
SqlSession.commit(); }finally{
if(SqlSession!=null){
SqlSession.close(); } }}打开MyBatis_demo2程序下com.framework.dao包下的StudentDaoImpl实现类,实现Dao中定义的接口。步骤2.2:修改实现类任务实施与分析步骤2:修改基本类步骤2.3:修改测试类:
使用JUnit对CURD进行测试,将DAO的创建放在了@Before注解的方法中。publicclassMyTest{ privateIStudentDaoDao; @Before publicvoidbefore(){ Dao=newStudentDaoImpl();}任务实施与分析步骤3:实现用户插入功能<insertid="insertStudentCacheId"> insertintostudent(name,age,score)values(#{name},#{age},#{score}) <selectKeyresultType="int"keyProperty="id"order="AFTER"> select@@identity </selectKey></insert>步骤3.1:创建映射方法打开MyBatis_demo2程序下com.framework.Dao包下的mapper.xml映射文件,创建insertStudentCacheId方法。任务实施与分析步骤3:实现用户插入功能
Java代码中要使用id属性标识
使用的是类的属性名,而非表的字段名
resultType属性是指出返回的数据结果类型
keyProperty属性是指出主键在Java类中对应的属性名
order属性是指出id的生成是在前还是在后
resultMap属性是结果集映射
<result>标签是column与property间的映射关系步骤3.1:创建映射方法该映射方法需要注意以下几点:任务实施与分析步骤3:实现用户插入功能步骤3.2:修改Dao实现类打开MyBatis_demo2程序下com.framework.Dao包下的StudentDaoImpl实现类,在该类中完成insertStudentCacheId()方法编写。@OverridepublicvoidinsertStudentCacheId(Studentstudent){ //TODOAuto-generatedmethodstub try{
SqlSession=MyBatisUtils.getSqlSession();
SqlSession.insert("insertStudentCacheId",student);
SqlSession.commit(); }finally{ if(SqlSession!=null){
SqlSession.close(); } }}任务实施与分析步骤3:实现用户插入功能//插入用户并返回当前记录id@TestpublicvoidtestInsertStudentCacheId(){ Studentstudent=newStudent("haohao",29,90); System.out.println("插入前:student="+student); Dao.insertStudentCacheId(student); System.out.println("插入后:student="+student);}步骤3.3:创建测试方法任务实施与分析步骤4:实现用户更新功能<updateid="updateStudent"> updatestudentsetname=#{name},age=#{age},score=#{score}whereid=#{id}</update>步骤4.1:创建映射方法打开mapper.xml映射文件,创建updateStudent方法。需要注意:
这里的#{}中必须与Student对象的属性名称一一对应,不能随意填写。任务实施与分析步骤4:实现用户更新功能步骤4.2:修改Dao实现类打开StudentDaoImpl实现类,在该类中完成updateStudent()方法编写,该方法实现根据用户id修改用户信息。@Override
public
voidupdateStudent(Studentstudent){
//TODOAuto-generatedmethodstub
try{
SqlSession=MyBatisUtils.getSqlSession();
SqlSession.update("updateStudent",student);
SqlSession.commit(); }finally{
if(SqlSession!=null){
SqlSession.close(); } }}任务实施与分析步骤4:实现用户更新功能[DEBUG]==>Preparing:updatestudentsetname=?,age=?,score=?whereid=?[DEBUG]==>Preparing:yangxj(String),30(Integer),93.5(Double),6(Integer)[DEBUG]<==Updates:1//修改用户信息@TestpublicvoidtestUpdateStudent(){ Studentstudent=newStudent("yangxj",30,93.5); student.setId(6); Dao.updateStudent(student);}数据库student表信息步骤4.3:创建测试方法任务实施与分析步骤5:实现用户查询功能<selectid="selectAllStudents"resultType="Student"> selectid,name,age,scorefromstudent</select>打开mapper.xml映射文件,创建selectAllStudents方法。需要注意:MyBatis支持为类起别名的方式,指定别名有两种方式:▶在主配置文件中<properties>标签后添加<typeAliases>标签,指定类的别名。▶使用<package>方式对于实体类的全限定性类名的别名指定方式。步骤5.1:创建映射方法任务实施与分析步骤5:实现用户查询功能 }@Override publicMap<String,Object>selectAllStudentsMap(){ //TODOAuto-generatedmethodstub Map<String,Object>map=newHashMap<String,Object>(); try{ SqlSession=MyBatisUtils.getSqlSession(); map=SqlSession.selectMap("selectAllStudents","name"); }finally{ if(SqlSession!=null){ SqlSession.close(); } } returnmap; }在StudentDaoImpl实现类中完成selectAllStudents()方法编写。该方法中使用SqlSession的selectList()方法完成查询操作。步骤5.2:修改Dao实现类任务实施与分析步骤5:实现用户查询功能
//查询所有用户信息 @Test publicvoidtestSelectAllStudents(){ List<Student>students=Dao.selectAllStudents(); for(Studentstudent:students){ System.out.println(student); }}[DEBUG]==>Preparing:selectid,name,age,scorefromstudent[DEBUG]==>Preparing:[TRACE]<==Columns:id,name,age,score[TRACE]<==Row:6,yangxj,30,93.5[DEBUG]<==Total:1Student[id=6,name=yangxj,age=30,score=93.5]INSERTINTO‘STUDENT’VALUES(‘7’,”张三”,’23’,’93.5’);INSERTINTO‘STUDENT’VALUES(‘8’,”李四”,’24’,’94.5’);INSERTINTO‘STUDENT’VALUES(‘9’,”王五”,’25’,’95.5’);步骤5.3:创建测试方法任务实施与分析步骤6:实现删除查询功能<deleteid="deleteStudentById"> deletefromstudentwhereid=#{xxx}<!--这里的#{}仅仅是个占位符,里面放什么都可以--></delete>注意这里的动态参数id所赋值为#{xxx}。这个#{xxx}表示此处是一个占位符,代表delete()方法的第二个参数。步骤6.1:创建映射方法打开mapper.xml映射文件,创建deleteStudentById方法,任务实施与分析步骤6:实现删除查询功能打开StudentDaoImpl实现类,在该类中完成deleteStudentById()方法编写,该方法实现根据用户id删除用户功能。步骤6.2:修改Dao实现类
@Override publicvoiddeleteStudentById(intid){ //TODOAuto-generatedmethodstub try{
SqlSession=MyBatisUtils.getSqlSession();
SqlSession.delete("deleteStudentById",id);
SqlSession.commit(); }finally{ if(SqlSession!=null){
SqlSession.close(); } }}任务实施与分析步骤6:实现删除查询功能 @Test publicvoidtestDeleteStudentById(){ Dao.deleteStudentById(9);
}[DEBUG]==>Preparing:deletefromstudentwhereid=?[DEBUG]==>Parameters:9(Integer)[debug]<==Updates:1步骤6.3:创建测试方法:在MyTest类中完成testDeleteStudentById()测试方法编写。拓展知识一、实现根据用户名模糊查询功能1.创建映射方法打开MyBatis_demo2程序下com.framework.Dao包下的mapper.xml映射文件,创建selectStudentsByName方法。<selectid="selectStudentsByName"resultType="Student"> selectid,name,age,scorefromstudentwherenamelike'%'#{xxx}'%' <!--selectid,name,age,scorefromstudentwherenamelikeconcat('%',#{xxx},'%')--> <!--selectid,name,age,scorefromstudentwherenamelike'%${value}%'--></select>拓展知识一、实现根据用户名模糊查询功能2.修改Dao实现类
@Override publicList<Student>selectStudentsByName(Stringname){ //TODOAuto-generatedmethodstub List<Student>students=null; try{ SqlSession=MyBatisUtils.getSqlSession(); students=SqlSession.selectList("selectStudentsByName",name); }finally{ if(SqlSession!=null){ SqlSession.close(); } } returnstudents;
}在StudentDaoImpl实现类中完成selectStudentsByName()方法编写,该方法实现根据用户名模糊查询用户功能。拓展知识一、实现根据用户名模糊查询功能3.创建测试方法
//根据用户名称查询用户 @Test publicvoidtestSelectStudentsByName(){ List<Student>students=Dao.selectStudentsByName("张"); for(Studentstudent:students){ System.out.println(student); }}[DEBUG]==>Preparing:selectid,name,age,scorefromstudentwherenamelike‘%’?’%’[DEBUG]==>Parameters:张(String)[TRACE]<==Columns:id,name,age,score[TRACE]<==Row:7,张三,23,93.5[DEBUG]<==Total:1student[id=7,name=张三,age=23,score=93.5]在MyTest类中完成testSelectStudentsByName()测试方法编写。拓展知识二、多参数查询用户信息<selectid="selectStudentsByMap"resultType="Student"parameterType="java.util.Map"> selectid,name,age,scorefromstudentwhereid>#{studentId}andage>#{age}<!--map对应的key值--></select>1.创建映射方法打开mapper.xml映射文件,创建selectStudentsByMap方法,该方法将Map集合中的key-studnetId以及key-age作为SQL动态参数。二、多参数查询用户信息
@Override publicList<Student>selectStudentsByMap(Map<String,Object>params){ //TODOAuto-generatedmethodstub List<Student>students=null; try{ SqlSession=MyBatisUtils.getSqlSession(); students=SqlSession.selectList("selectStudentsByMap",params); }finally{ if(SqlSession!=null){ SqlSession.close(); } } returnstudents;
}2.修改Dao实现类在StudentDaoImpl实现类中完成selectStudentsByMap()方法编写,该方法将Map集合作为参数实现动态SQL查询。拓展知识二、多参数查询用户信息3.创建测试方法
打开MyBatis_demo2程序下
com.framework.test包下的
MyTest类,在该类中完成
testSelectStudentsByMap()
测试方法编写。
@Test publicvoidtestSelectStudentByMap(){ Studentstudent=newStudent(); student.setId(6); Map<String,Object>map=newHashMap<String,Object>(); map.put("student",student); map.put("studentId",6); map.put("age",20); List<Student>students=Dao.selectStudentsByMap(map); System.out.println("查询结果条数:"+students.size());}拓展知识二、多参数查询用户信息4.实体属性参数传值打开mapper.xml映射文件,创建selectStudentsByMap2方法,该方法采用实体属性作为SQL动态参数。<selectid="selectStudentsByMap2"resultType="Student"parameterType="java.util.Map">
selectid,name,age,scorefromstudentwhereid=#{student.id}<!--map对应的key值--></select>拓展知识二、多参数查询用户信息
@Override publicList<Student>selectStudentsByMap(Map<String,Object>params){ //TODOAuto-generatedmethodstub List<Student>students=null; try{
SqlSession=MyBatisUtils.getSqlSession();
students=SqlSession.selectList("selectStudentsByMap2",params); }finally{ if(SqlSession!=null){ SqlSession.close(); } } returnstudents;
}5.修改DAO实现类在StudentDaoImpl实现类中完成selectStudentsByMap()方法编写,将映射id修改为selectStudentsByMap2拓展知识拓展知识三、mapper动态代理0201认识映射文件的namespace属性值MyBatis框架要求将映射文件中<mapper>标签的namespace属性设为Dao接口的全类名。创建MyBatis_demo3程序拷贝MyBatis_demo2程序,命名为MyBatis_demo3,在MyBatis_demo2的基础上进行修改扩展。拓展知识三、mapper动态代理3.修改映射文件对应的namespace值4.修改日志输出控制文件<mappernamespace="com.framework.Dao.IStudentDao"></mapper>##definealogger.framework.Dao.IStudentDao=trace,console拓展知识三、mapper动态代理A5.DAO接口方法名命名规则说明B6.DAO对象的获取方式Session=factory.openSession();Dao=session.getMapper(IstudentDao.class);MyBatis框架要求接口中的方法名与映射文件中相应的SQL标签的id值相同。拓展知识三、mapper动态代理通过调用DAO接口的方法,可以从SQL映射文件中找到所要执行SQL语句,还可通过方法参数及返回值将SQL语句的动态参数传入,然后将查询结果返回。7.删除DAO实现类Dao实现对象是由JDK的Proxy动态代理自动生成的。拓展知识三、mapper动态代理@Before与@After注解方法添加SqlSession的提交方法删除selectStudentMap()方法测试2138.修改测试类拓展知识三、mapper动态代理[DEBUG]==>Preparing:selectid,name,age,scorefromstudentwhereid>?andage>?[DEBUG]==>Parameters:6(Integer),20(Integer)[TRACE]<==Columns:id,name,age,score[TRACE]<==Row:7,张三,23,93.5[TRACE]<==Row:8,李四,24,94.5[DEBUG]<==Total:2查询结果条数:2执行testSelectStudentsByMap方法后,查看控制台输出信息。9.动态代理结果展示拓展知识四、SQL动态查询456123<if>标签<where>标签<choose/>标签<foreach>标签<SQL>标签<include>1.了解SQL动态标签拓展知识四、SQL动态查询<selectid="selectStudentsDynamicSQL"resultType="Student"parameterType="java.util.Map"> select <includerefid="studentColumnList"></include> fromstudent <where> <iftest="name!=nullandname!=''"> namelike'%'#{name}'%' </if> <iftest="age>0"> andage>#{age} </if> </where></select>2.创建映射方法打开mapper.xml映射文件,创建selectStudentsDynamicSQL方法,该方式中根据动态SQL实现用户名关键字、年龄大于20的用户信息查询。拓展知识四、SQL动态查询3.创建Dao接口方法打开IStudentDao接口,在该接口中创建用户查询接口selectStudentsDynamicSQL,注意接口名需要和映射文件中的SQL片段方法id一致。List<Student>selectStudentsDynamicSQL(Map<String,Object>params);[DEBUG]==>Preparing:selectid,name,age,scorefromstudentWHEREnamelike‘%’?‘%’andage>?[DEBUG]==>Parameters:张(String),20(Integer)[TRACE]<==Columns:id,name,age,score[TRACE]<==Row:7,张三,23,93.5[DEBUG]<==Total:1查询结果条数:1拓展知识四、SQL动态查询4.创建测试方法
@Test publicvoidtestSelectStudentsDynamicSQL(){ Map<String,Object>map=newHashMap<String,Object>(); map.put("name","张"); map.put("age",20); List<Student>students=Dao.selectStudentsDynamicSQL(map); System.out.println("查询结果条数:"+students.size());}在MyTest类中完成testSelectStudentsDynamicSQL()测试方法编写。执行测试方法后控制台输出信息思考与总结Mapper映射文件的SQL片段中如何传递参数?如何实现Like模糊查询?
能力提升通过上一节的任务,我们完成了对电商网站项目的MyBatis框架环境搭建,本节将对电商网站的商品类别进行CRUD操作,请同学们结合本节所学内容,继续完成电商网站项目的以下任务:
创建商品类别表category;
新增一条商品类别数据,类别名称为“男装”;
修改该条商品类别的类别名称为“女装”;
查询所有的商品类别信息;
删除id为“1”的商品类别。任务训练1.使用上一节任务中创建的商品表与商品实体类;2.完善Dao接口与映射文件,创建新增商品、修改商品、删除商品方法;3.在Dao接口的实现类中实现商品的CRUD方法;4.创建测试类,测试商品的CRUD方法,与数据库中的数据进行比较。《电商web云平台开发》感谢观看!模块一基础技能训练模块《电商web云平台开发》思维导图目录CONTENTS搭建电商平台Spring业务层搭建电商平台的web项目SpringMVC展示层搭建电商平台数据处理Mybais项目1234电商平台SSM三层框架整合项目三
搭建电商平台数据处理Mybais项目项目背景
MyBatis是一款优秀的开源持久层框架,是Java中使用较多的ORM框架,两者可以在同一项目中互补使用。MyBatis的开发步骤是根据全局配置文件初始化会话工厂,通过会话工厂开启会话,从会话对象得到映射器,使用映射器调用映射的数据方法。全局配置文件会话工厂开启会话会话对象输入参数映射输出结果映射本章节主要介绍MyBatis框架的相关知识,需要掌握在项目中使用MyBatis框架的能力。研究内容认知MyBatis掌握MyBatis基础配置文件掌握MyBatis单表CRUD操作掌握MyBatis多表关联操作学习目标1.理解MyBatis框架以及工作原理;2.了解MyBatis与Hibernate区别;3.认识MyBatis常用标签以及配置文档。知识目标1.掌握MyBatis单表CRUD操作;2.掌握Mapper动态代理开发技巧;3.掌握MyBatis单表curd操作;4.掌握MyBatis多表关联关系查询设置。技能目标1.通过搭建电商平台数据处理的MyBatis项目培养学生学习开发语言的兴趣;2.通过MyBatis相关操作的实现来锻炼学生规范的编码能力。素养目标任务四MyBatis多表关联操作预备知识一、MyBatis关联查询分类使用<association>标签来实现使用<collection>标签来实现在“多”的一方实体类中添加“一”的对象查询多对多数据时需要进行三张表的关联查询一对一关联查询一对多关联查询多对一关联查询多对多关联查询预备知识二、缓存查询概念二级查询缓存使用二级缓存不是共享数据,而是为了延长该查询结果的保存时间,提高系统性能。一级查询缓存
MyBatis的一级查询缓存是本地缓存,其作用域是SqlSession。实施准备一对多关联查询是指,在查询一方对象的时候,同时将其所关联的多方对象也都查询出来,比如查询班级时,将该班级所有的同学信息也查询出来,请同学们根据这个一对多的案例,思考生活中其他需要关联查询的案例并理解,为多表关联查询的实施做准备。任务实施与分析步骤1:jdk的安装和环境变量的配置步骤1.1:创建MyBatis_demo4程序A数据库配置B日志配置CMyBatis主文件配置创建javaproject程序MyBatis_demo4并导入相关jar包任务实施与分析步骤1:jdk的安装和环境变量的配置步骤1.2:定义实体/**商品表*/publicclassGoods{ privateIntegergoodsID; //商品ID privateIntegercategoryID; //分类ID privateStringgoodsName; //商品名称 privateDoublegoodsPrice;//商品价格 privateIntegergoodsStock;//商品库存privateCategorycategory; //商品类型/**商品类别表*/publicclassCategory{ privateIntegercategoryID;//分类ID privateStringcategoryName;//分类名称 privateintlevel;//分类级别:1-以及;2-二级 privateIntegerparentID; //父分类ID privateCategoryparent; //父分类 privateList<Category>childList;//二级分类 privateList<Goods>goodsList;//商品列表在定义实体时,若定义的是双向关联,即双方的属性中均有对方对象作为域属性出现。只让某一方可以输出另一方即可。任务实施与分析步骤1:jdk的安装和环境变量的配置步骤1.3:定义数据库表在定义实体时,若定义的是双向关联,即双方的属性中均有对方对象作为域属性出现。只让某一方可以输出另一方即可。goods表category表任务实施与分析步骤1:jdk的安装和环境变量的配置步骤1.4:定义Dao接口publicinterfaceICategoryDao{
//根据分类id获取分类信息 CategoryselectCategoryById(@Param("categoryID")intcategoryID);注意此模块使用SQL动态设置参数,所以Dao接口方法中利用@param注解参数,也可以使用Map接收和传参。任务实施与分析步骤1:jdk的安装和环境变量的配置步骤1.5:定义测试类在com.framework.test包下创建MyTest测试类,并实现before()和tearDown()方法,定义testSelectCategoryById测试方法。@Test publicvoidtestSelectCategoryById(){ Categorycategory=Dao.selectCategoryById(2); System.out.println("类型名称:"+category.getCategoryName()); if(category!=null){ List<Goods>goodsList=category.getGoodsList(); for(Goodsgoods:goodsList){ System.out.println("该类型下商品名称:"+goods.getGoodsName()); } }}任务实施与分析步骤1:jdk的安装和环境变量的配置<!--分类结果集--> <resultMaptype="Category"id="categoryResultMap"> <idcolumn="categoryID"property="categoryID"/> <resultcolumn="categoryName"property="categoryName"/> <resultcolumn="level"property="level"/> <resultcolumn="parentID"property="parentID"/> <collectionproperty="childList"column="categoryID"ofType="Category"select="selectChildrenByParentId"> <idcolumn="categoryID"property="categoryID"/> </collection> <collectionproperty="goodsList"column="categoryID"ofType="Goods"select="seletGoodsByCategoryID"> <idcolumn="goodsID"property="goodsID"/> <resultcolumn="categoryID"property="categoryID"/>步骤1.6:定义映射方法打开MyBatis_demo4程序下com.framework.Dao包,创建CategoryMapper.xml映射文件并在该文件创建selectCategoryById方法,该方法实现分类信息查询.任务实施与分析步骤1:jdk的安装和环境变量的配置步骤1.7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乐山分班考试题目及答案
- 2025年造价员考试工程造价规划报告编制科目试卷
- 2025年足部按摩师(足部按摩师按摩师职业培训改革方向)考试试卷
- 军事技术考试题库及答案
- 二零二五年度ROHS认证产品销售质量保证协议书
- 2025版建筑工程施工现场安全管理协议
- 二零二五版旅客列车旅客特殊需求服务合同
- 2025版甜品店餐饮管理服务及产品研发合同
- 制造业升级新引擎:2025年3D打印技术在规模化生产中的应用案例汇编报告
- 2025年宠物智能用品行业研发成果转化与应用案例报告
- 通用作业工程施工风险辨识清单
- 产科新生儿死亡病例
- 100t履带吊安装及拆除施工方案
- 干部履历表(中共中央组织部2015年制)
- 美西奥多·莱维特《营销短视症》
- 中学学校各项安全资料汇编
- 马家田煤矿 矿业权价款计算结果的报告
- JB-T 8723-2022 焊接金属波纹管机械密封
- GB/T 20485.31-2011振动与冲击传感器的校准方法第31部分:横向振动灵敏度测试
- Can you hear me合唱钢琴伴奏谱
- 橡皮章雕刻工艺教案
评论
0/150
提交评论