单元8 MyBatis框架持久化编程开发_第1页
单元8 MyBatis框架持久化编程开发_第2页
单元8 MyBatis框架持久化编程开发_第3页
单元8 MyBatis框架持久化编程开发_第4页
单元8 MyBatis框架持久化编程开发_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

软件框架开发技术(SSM)单元8MyBatis框架持久化编程开发学习导读动态SQLMyBatis灵活性的核心体现,通过动态标签结合参数实时生成SQL语句单元核心掌握动态标签适用场景、动态SQL组装方法、SqlSession核心操作关键能力合理布局实体映射文件SQL节点,实现灵活的数据表操作010203学习目标①认识MyBatis动态标签②解SqlSession编程接口③理解动态语句底层实现原理④掌握SqlSession增删改查编码知识目标①具备框架应用与开发设计能力②养成规范编码/文档撰写习惯③具备抗压能力与配置管理能力素质目标①能用SqlSessionAPI进行读写操作②能用<if>/<choose>生成条件SQL③能用<foreach>生成in从句④能用<set>动态拼装更新语句能力目标思维导图8.1SqlSession组件编程一、SqlSession核心概述1.MyBatis最核心组件,底层封装JDBC数据连接实现2.不具备线程安全,每个进程需独立获取SQL会话实例3.包含SQL操作的全部API编程函数,支撑所有数据操作场景方法函数功能描述核心说明selectOne(Stringstr,Objectobj)单条数据检索,返回多条会抛出异常1.str:映射文件命名空间+操作节点id2.obj:与parameterType属性一致的参数3.直接返回POJO实体对象selectList(Stringstr,Objectobj)任意条数数据检索(含单条)1.str:映射文件命名空间+操作节点id2.obj:与parameterType属性一致的参数3.返回List集合,不可直接返回POJOclose()关闭数据库连接1.手动事务场景:需手动关闭2.自动事务场景:无需手动关闭二、查询检索操作:核心方法8.1.1查询检索操作实操案例(映射文件)|OrderMapper.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-////DTDMapper3.0//EN""/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.ssm.orm.mapper.OrderMapper"> <!--单条数据检索:根据订单ID查询--> <selectid="findOrderByOrderId"parameterType="Integer"resultType="com.ssm.orm.pojo.Order"> selectorder_idasorderId,user_idasuserId,order_moneyasorderMoney,order_timeasorderTimefromt_orderwhereorder_id=#{orderId} </select> <!--多条数据检索:根据商品名称模糊查询--> <selectid="findOrderByCommodity"parameterType="String"resultType="com.ssm.orm.pojo.Order"> selectorder_idasorderId,user_idasuserId,order_moneyasorderMoney,order_timeasorderTimefromt_orderwhereorder_commoditylikeconcat('%',#{value},'%') </select></mapper>重点注意项:namespace:映射文件唯一命名空间,需与DAO层调用路径一致resultType:指定返回的POJO实体类型#{参数}:参数占位符,防止SQL注入8.1.1查询检索操作实操案例(DAO类)|OrderDAO.java(查询部分)packagecom.ssm.orm;importjava.io.IOException;importjava.io.InputStream;importjava.util.List;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importcom.ssm.orm.pojo.Order;publicclassOrderDAO{ InputStreamips; SqlSessionFactorysqlSessionFactory; //初始化SqlSessionFactory publicOrderDAO(){ try{ ips=Resources.getResourceAsStream("mybatis-config.xml"); sqlSessionFactory=newSqlSessionFactoryBuilder().build(ips); }catch(IOExceptione){ e.printStackTrace(); } } //selectOne:查询单条订单数据 publicvoidfindOrderByOrderId(IntegerorderId){ SqlSessionsqlSession=sqlSessionFactory.openSession(); Orderorder=sqlSession.selectOne("com.ssm.orm.mapper.OrderMapper.findOrderByOrderId",orderId); System.out.println(order.getOrderId()+"\t"+order.getUserId()+"\t"+order.getOrderMoney()+"\t"+order.getOrderTime()); sqlSession.close();//手动事务需关闭连接 } //selectList:查询多条订单数据 publicvoidfindOrderByCommodity(Stringcommodity){ SqlSessionsqlSession=sqlSessionFactory.openSession(); List<Order>list=sqlSession.selectList("com.ssm.orm.mapper.OrderMapper.findOrderByCommodity",commodity); for(inti=0;i<list.size();i++){ Orderorder=list.get(i); System.out.println(order.getOrderId()+"\t"+order.getUserId()+"\t"+order.getOrderMoney()+"\t"+order.getOrderTime()); } sqlSession.close();//手动事务需关闭连接 }}8.1.2增删改操作方法说明:方法函数功能描述核心说明insert(Stringstr,Objectobj)插入单条数据1.str:命名空间+操作节点id2.obj:与parameterType一致的参数3.可返回自增IDdelete(Stringstr,Objectobj)删除数据1.str:命名空间+操作节点id2.obj:与parameterType一致的参数3.返回影响行数update(Stringstr,Objectobj)更新数据1.str:命名空间+操作节点id2.obj:与parameterType一致的参数3.返回影响行数commit()提交事务手动事务需提交,自动事务无需rollback()回滚事务手动事务需提交,自动事务无需8.1.1查询检索操作实操案例(映射文件):OrderMapper.xml(增删改部分)<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-////DTDMapper3.0//EN""/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.ssm.orm.mapper.OrderMapper"> <!--插入订单:返回自增ID--> <insertid="insertOrder"parameterType="com.ssm.orm.pojo.Order"useGeneratedKeys="true"keyProperty="orderId"> insertintot_order(order_id,user_id,order_commodity,order_money,order_time,order_status)values(#{orderId},#{userId},#{orderCommodity},#{orderMoney},#{orderTime},#{orderStatus}) </insert> <!--更新订单--> <updateid="updateOrder"parameterType="com.ssm.orm.pojo.Order"> updatet_ordersetorder_money=#{orderMoney},order_status=#{orderStatus}whereuser_id=#{userId} </update> <!--删除订单--> <deleteid="deleteOrder"parameterType="com.ssm.orm.pojo.Order"> deletefromt_orderwhereuser_id=#{userId} </delete></mapper>重点注意项:useGeneratedKeys="true":开启自增ID返回keyProperty:指定POJO中存储自增ID的属性8.1.2增删改操作实操案例(DAO类)|OrderDAO.java(增删改部分)packagecom.ssm.orm;importjava.io.IOException;importjava.io.InputStream;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importcom.ssm.orm.pojo.Order;publicclassOrderDAO{ InputStreamips; SqlSessionFactorysqlSessionFactory;

publicOrderDAO(){ try{ ips=Resources.getResourceAsStream("mybatis-config.xml"); sqlSessionFactory=newSqlSessionFactoryBuilder().build(ips); }catch(IOExceptione){ e.printStackTrace(); } } //插入订单 publicvoidinsertOrder(Orderorder){ SqlSessionsqlSession=sqlSessionFactory.openSession(); introws=sqlSession.insert("com.ssm.orm.mapper.OrderMapper.insertOrder",order); sqlSmit();//手动事务需提交 sqlSession.close(); System.out.println("插入了"+rows+"行数据!"); } //更新订单 publicvoidupdateOrder(Orderorder){ SqlSessionsqlSession=sqlSessionFactory.openSession(); introws=sqlSession.update("com.ssm.orm.mapper.OrderMapper.updateOrder",order); sqlSmit();//手动事务需提交 sqlSession.close(); System.out.println("更新了"+rows+"行数据!"); } //删除订单 publicvoiddeleteOrder(Orderorder){ SqlSessionsqlSession=sqlSessionFactory.openSession(); introws=sqlSession.delete("com.ssm.orm.mapper.OrderMapper.deleteOrder",order); sqlSmit();//手动事务需提交 sqlSession.close(); System.out.println("删除了"+rows+"行数据!"); }}课堂实训(增、删、改)MyBatis增、删、改案例实训用MyBatis实现对商品库存表:增-删-改操作增加一种新商品库存商品ID:C010,商品名:篮球,入库时间:2020-09-20,库存数:100,供应商:双皮星修改商品库存数:“天利”供应商的所有商品库存数修改为800“万源”供应商的所有商品库存数修改为700删除商品库存删除商品名为:“口罩”的商品库存删除2020年5月入库的所有商品库存课堂实训(增、删、改)MySQL数据库建表脚本文件|db.sqlCREATEDATABASEIFNOTEXISTSmybatis_db;USEmybatis_db;DROPTABLEIFEXISTS`commodity_storage`;CREATETABLE`commodity_storage`(`commodity_id`varchar(45)NOTNULL,`commodity_name`varchar(45)NOTNULL,`enter_date`dateNOTNULL,`commodity_amount`int(10)unsignedNOTNULL,`commodity_supplier`varchar(45)NOTNULL,PRIMARYKEY(`commodity_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;INSERTINTO`commodity_storage`(`commodity_id`,`commodity_name`,`enter_date`,`commodity_amount`,`commodity_supplier`)VALUES('C001','帽子','2020-06-08',150,'新丰慧'),('C002','运动裤','2020-05-06',230,'新丰慧'),('C003','衬衣','2020-04-15',80,'天利'),('C004','口罩','2020-07-20',1500,'万源'),('C006','遮阳镜','2020-05-23',800,'利风'),('C007','运动鞋','2020-08-10',460,'利风'),('C008','风衣','2020-07-13',180,'天利'),('C009','救生圈','2020-09-10',390,'奥体');8.2MyBatis动态语句组装(核心介绍)动态语句组装核心优势常用动态标签根据业务场景,通过动态标签实时生成SQL语句MyBatis核心优势:细粒度、精准控制数据表操作<if>、<choose>、<set>、<foreach>、<where>、<trim>8.2.1<if>标签核心语法(条件判断)test属性:◦布尔条件表达式,true则执行标签内SQL,false则跳过支持多<if>标签叠加,实现多条件筛选需注意:◦防止where子句无条件导致语法错误(常用100=100兜底代码示例(条件判断):<selectid="findOrderByInstance_If"parameterType="com.ssm.orm.pojo.Order"resultType="com.ssm.orm.pojo.Order">selectorder_idasorderId,user_idasuserId,order_moneyasorderMoney,order_timeasorderTimefromt_orderwhere100=100<iftest="orderId!=null">andorder_id=#{orderId}</if><iftest="userId!=null">anduser_id=#{userId}</if><iftest="orderMoney!=nullandorderMoney!=''">andorder_money=#{orderMoney}</if></select>课堂实训(<if>标签)MyBatis动态标签案例实训一个图书信息表的结构如下图书标识(id)int书名(book)varchar图书类型(book_type)varchar所在区域(position)varchar出版社(publisher)varchar出版日期(publish_date)varchar图书管理员(book_admin)varchar按以下条件查找相关图书记录管理员:张广平存放区域:C01出版日期:2010-01-01前字符转义mapper.xml文件不能直接写上:<、>、<=、>=应该使用转义写法课堂实训(<if>标签)MySQL数据库建表脚本文件|order_detail.sqlCREATEDATABASEIFNOTEXISTSmybatis_db;USEmybatis_db;DROPTABLEIFEXISTS`library`;CREATETABLE`library`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`book`varchar(45)NOTNULL,`book_type`varchar(45)NOTNULL,`position`varchar(45)NOTNULL,`publisher`varchar(45)NOTNULL,`publish_date`dateNOTNULL,`book_admin`varchar(45)NOTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=7DEFAULTCHARSET=utf8;INSERTINTO`library`(`id`,`book`,`book_type`,`position`,`publisher`,`publish_date`,`book_admin`)VALUES(1,'《啊Q传记》','文学','C01','光明出版社','2005-06-07','张广平'),(2,'《计算机应用教程》','教材','D05','新民出版社','2010-08-12','何红芳'),(3,'《烽烟三十年》','战争','B04','文化出版社','2015-12-06','张广平'),(4,'《应用电子技术》','教材','A02','教育出版计','2013-10-15','何红芳'),(5,'《战斗到底》','战争','C01','新民出版社','2008-09-01','张广平'),(6,'《高原之旅》','文学','A02','文化出版社','2016-10-15','张广平');课堂实训(<if>标签)MyBatis框架配置文件|mybatis-config.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-////DTDConfig3.0//EN""/dtd/mybatis-3-config.dtd"><configuration> <environmentsdefault="mybatis_dev"> <environmentid="mybatis_dev"> <transactionManagertype="JDBC"/> <dataSourcetype="POOLED"> <propertyname="driver"value="com.mysql.jdbc.Driver"/> <propertyname="url"value="jdbc:mysql://localhost:3306/mybatis_db"/> <propertyname="username"value="root"/> <propertyname="password"value="root"/> </dataSource> </environment> </environments> <mappers> <mapperresource="com/sql/mapper/LibraryMapper.xml"/> </mappers></configuration>课堂实训(<if>标签)项目工程日志文件|perties(可选)log4j.rootLogger=INFO,console_show#声明MyBatis工程中com.sql目录下的日志级别为DEBUG.sql=DEBUGlog4j.appender.console_show=org.apache.log4j.ConsoleAppenderlog4j.appender.console_show.layout=org.apache.log4j.PatternLayoutlog4j.appender.console_show.layout.ConversionPattern=%5p[%t]-%m%n课堂实训(<if>标签)图书实体类文件|Library.javapackagecom.sql.po;importjava.util.Date;publicclassLibrary{ privateIntegerid; privateStringbook; privateStringbook_type; privateStringposition; privateStringpublisher; privateDatepublish_date; privateStringbook_admin; publicIntegergetId(){ returnid; } publicvoidsetId(Integerid){ this.id=id; } publicStringgetBook(){ returnbook; } publicvoidsetBook(Stringbook){ this.book=book; } publicStringgetBook_type(){ returnbook_type; } publicvoidsetBook_type(Stringbook_type){ this.book_type=book_type; } publicStringgetPosition(){ returnposition; } publicvoidsetPosition(Stringposition){ this.position=position; } publicStringgetPublisher(){ returnpublisher; } publicvoidsetPublisher(Stringpublisher){ this.publisher=publisher; } publicDategetPublish_date(){ returnpublish_date; } publicvoidsetPublish_date(Datepublish_date){ this.publish_date=publish_date; } publicStringgetBook_admin(){ returnbook_admin; } publicvoidsetBook_admin(Stringbook_admin){ this.book_admin=book_admin; }}课堂实训(<if>标签)图书实体映射文件|LibraryMapper.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-////DTDMapper3.0//EN""/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.sql.mapper.LibraryMapper"> <selectid="findLibraryByExample"parameterType="com.sql.po.Library"resultType="com.sql.po.Library"> select*fromLibrary <where> <iftest="id!=null"> andid=#{id} </if> <iftest="book!=nullandbook!=''"> andbook=#{book} </if> <iftest="book_type!=nullandbook_type!=''"> andbook_type=#{book_type} </if> <iftest="position!=nullandposition!=''"> andposition=#{position} </if> <iftest="publisher!=nullandpublisher!=''"> andpublisher=#{publisher} </if> <iftest="publish_date!=null"> andpublish_date<#{publish_date} </if> <iftest="book_admin!=nullandbook_admin!=''"> andbook_admin=#{book_admin} </if> </where> </select></mapper>课堂实训(<if>标签)项目工程测试类文件|Test.javapackagecom.sql.test;importjava.io.IOException;importjava.io.InputStream;importjava.text.DateFormat;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.List;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importcom.sql.po.Library;publicclassTest{ publicstaticvoidmain(String[]args)throwsParseException{ Testtest=newTest(); //只对library对象设置:管理员、所在区域、出版日期,三个属性,其余属性为null Librarylibrary=newLibrary(); //设置图书管理员属性 library.setBook_admin("张广平"); //设置图书所在区域属性 library.setPosition("C01");

//获得2010年01月01日的Date对象 DateFormatformat=newSimpleDateFormat("yyyy-MM-dd"); Datepublish_date=format.parse("2010-01-01"); //设置出版日期属性 library.setPublish_date(publish_date); test.findLibraryByExample(library); } publicvoidfindLibraryByExample(Librarylibrary){ try{ InputStreamips=Resources .getResourceAsStream("mybatis-config.xml"); SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder() .build(ips); SqlSessionsqlSession=sqlSessionFactory.openSession(); List<Library>list=sqlSession .selectList( "com.sql.mapper.LibraryMapper.findLibraryByExample", library); for(inti=0;i<list.size();i++){ Libraryli=list.get(i); System.out.println(li.getId()+"\t"+li.getBook()+"\t" +li.getBook_type()+"\t"+li.getPosition()+"\t" +li.getPublisher()+"\t"+li.getPublish_date() +"\t"+li.getBook_admin()); } sqlSession.close(); }catch(IOExceptione){ e.printStackTrace(); } }}8.2.2<choose>标签核心语法(多级条件)组合:◦<choose>+<when>+<otherwise>◦类似Javaswitch<when>:◦多条件依次判断,满足则执行◦仅第一个满足的生效<otherwise>:◦所有<when>不满足时执行代码示例(多级条件):<selectid="findOrderByInstance_When"parameterType="com.ssm.orm.pojo.Order"resultType="com.ssm.orm.pojo.Order">selectorder_idasorderId,user_idasuserId,order_moneyasorderMoney,order_timeasorderTimefromt_orderwhere<choose><whentest="orderId!=null">order_id=#{orderId}</when><whentest="userId!=null">user_id=#{userId}</when><otherwise>order_commodity=#{orderCommodity}</otherwise></choose> </select>课堂实训(<choose>标签)MyBatis动态标签案例实训(续<if>标签实训)在图书信息表中按以下条件查找相关图书记录当属性“出版社”不为空时,只用出版社作为条件属性筛选数据否则当属性“图书类型”不为空时,只用图书类型作为条件属性筛选数据以上两个条件都为空时,则以“图书管理员”作为条件属性筛选数据字符转义mapper.xml文件不能直接写上:<、>、<=、>=应该使用转义写法课堂实训(<choose>标签)图书实体映射文件|LibraryMapper.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-////DTDMapper3.0//EN""/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.sql.mapper.LibraryMapper"> <selectid="findLibraryByExample"parameterType="com.sql.po.Library"resultType="com.sql.po.Library"> select*fromLibrarywhere <choose> <whentest="publisher!=nullandpublisher!=''"> publisher=#{publisher} </when> <whentest="book_type!=nullandbook_type!=''"> book_type=#{book_type} </when> <otherwise> book_admin=#{book_admin} </otherwise> </choose> </select></mapper>课堂实训(<choose>标签)项目工程测试类文件|Test.javapackagecom.sql.test;importjava.io.IOException;importjava.io.InputStream;importjava.text.ParseException;importjava.util.List;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importcom.sql.po.Library;publicclassTest{ publicstaticvoidmain(String[]args)throwsParseException{ Testtest=newTest();

Librarylibrary1=newLibrary(); //设置出版社属性 library1.setPublisher("新民出版社"); test.findLibraryByExample(library1);

Librarylibrary2=newLibrary(); //设置图书类型属性 library2.setBook_type("战争"); test.findLibraryByExample(library2);

Librarylibrary3=newLibrary(); //设置图书管理员属性 library3.setBook_admin("张广平"); test.findLibraryByExample(library3);

} publicvoidfindLibraryByExample(Librarylibrary){ try{ InputStreamips=Resources .getResourceAsStream("mybatis-config.xml"); SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder() .build(ips); SqlSessionsqlSession=sqlSessionFactory.openSession(); List<Library>list=sqlSession .selectList( "com.sql.mapper.LibraryMapper.findLibraryByExample", library); for(inti=0;i<list.size();i++){ Libraryli=list.get(i); System.out.println(li.getId()+"\t"+li.getBook()+"\t" +li.getBook_type()+"\t"+li.getPosition()+"\t" +li.getPublisher()+"\t"+li.getPublish_date() +"\t"+li.getBook_admin()); } sqlSession.close(); }catch(IOExceptione){ e.printStackTrace(); } }}8.2.3<set>标签核心语法(动态更新)用于update语句,动态输出set关键字自动删除最后一个更新字段后的逗号,避免语法错误需与<if>配合,实现字段按需更新代码示例(动态更新):<updateid="updateOrderByInstance_Set"parameterType="com.ssm.orm.pojo.Order">updatet_order<set><iftest="orderId!=null">order_id=#{orderId},</if><iftest="orderMoney!=nullandorderMoney!=''">order_money=#{orderMoney},</if><iftest="orderStatus!=nullandorderStatus!=''">order_status=#{orderStatus},</if></set>whereuser_id=#{userId}</update>课堂实训(<set>标签)MyBatis动态标签案例实训(续<if>标签实训)在图书信息表中按以下条件更新相关图书记录更新文化出版社的所有图书记录信息更新属性“所在区域”为:E05更新属性“图书管理员”为:刘慧红字符转义mapper.xml文件不能直接写上:<、>、<=、>=应该使用转义写法课堂实训(<set>标签)图书实体映射文件|LibraryMapper.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-////DTDMapper3.0//EN""/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.sql.mapper.LibraryMapper"> <updateid="updateLibraryByExample"parameterType="com.sql.po.Library"> updateLibrary <set> <iftest="id!=null"> id=#{id}, </if> <iftest="book!=nullandbook!=''"> book=#{book}, </if> <iftest="book_type!=nullandbook_type!=''"> book_type=#{book_type}, </if> <iftest="position!=nullandposition!=''"> position=#{position}, </if> <iftest="publish_date!=null"> publish_date=#{publish_date}, </if> <iftest="book_admin!=nullandbook_admin!=''"> book_admin=#{book_admin}, </if> </set> wherepublisher=#{publisher} </update></mapper>课堂实训(<set>标签)项目工程测试类文件|Test.javapackagecom.sql.test;importjava.io.IOException;importjava.io.InputStream;importjava.text.ParseException;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importcom.sql.po.Library;publicclassTest{ publicstaticvoidmain(String[]args)throwsParseException{ Testtest=newTest(); //只设置三个属性:出版社、所在区域、图书管理员 Librarylibrary=newLibrary(); //设置出版社属性 library.setPublisher("文化出版社"); //设置所在区域 library.setPosition("E05"); //设置图书管理员 library.setBook_admin("刘慧红"); test.updateLibraryByExample(library); } publicvoidupdateLibraryByExample(Librarylibrary){ try{ InputStreamips=Resources .getResourceAsStream("mybatis-config.xml"); SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder() .build(ips); SqlSessionsqlSession=sqlSessionFactory.openSession(); introws=sqlSession.update( "com.sql.mapper.LibraryMapper.updateLibraryByExample", library);

sqlSmit(); System.out.println("更新了"+rows+"记录!"); sqlSession.close();

}catch(IOExceptione){ e.printStackTrace(); } }}8.2.4<foreach>标签核心语法(循环迭代)item:◦当前迭代元素变量名index:◦迭代元素下标(从0开始)collection:◦集合类型(list/array/map)open:◦从句开始符号(如"(")close:◦从句结束符号(如")")separator:◦元素分隔符(如",")代码示例(循环迭代):<selectid="findOrderByInstance_Foreach"parameterType="List"resultType="com.ssm.orm.pojo.Order">selectorder_idasorderId,user_idasuserId,order_moneyasorderMoney,order_timeasorderTimefromt_orderwhereuser_idin<foreachitem="each_var"index="each_i"collection="list"open="("separator=","close=")">#{each_var}</foreach> </select>课堂实训(<foreach>标签)MyBatis动态标签案例实训(续<if>标签实训)在图书信息表中按以下条件查找相关图书记录图书记录的id为:2,3,4用<foreach>元素实现字符转义mapper.xml文件不能直接写上:<、>、<=、>=应该使用转义写法课堂实训(<foreach>标签)图书实体映射文件|LibraryMapper.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-////DTDMapper3.0//EN""/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.sql.mapper.LibraryMapper"> <selectid="findLibraryByIds"parameterType="List"resultType="com.sql.po.Library"> select*fromLibrarywhereidin <foreachitem="lib_id"index="index_i"collection="list"open="("separator=","close=")"> #{lib_id} </foreach> </select></mapper>课堂实训(<foreach>标签)项目工程测试类文件|Test.javapackagecom.sql.test;importjava.io.IOException;importjava.io.InputStream;importjava.text.ParseException;importjava.util.ArrayList;importjava.util.List;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importcom.sql.po.Library;publicclassTestForEach{ publicstaticvoidmain(String[]args)throwsParseException{ TestForEachtest=newTestForEach(); List<Integer>list=newArrayList<Integer>(); list.add(2); list.add(3); list.add(4); test.findLibraryByIds(list); } publicvoidfindLibraryByIds(List<Integer>ids){ try{ InputStreamips=Resources .getResourceAsStream("mybatis-config.xml"); SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder() .build(ips); SqlSessionsqlSession=sqlSessionFactory.openSession(); Listlist=sqlSession.selectList( "com.sql.mapper.LibraryMapper.findLibraryByIds",ids); for(inti=0;i<list.size();i++){ Libraryli=(Library)list.get(i); System.out.println(li.getId()+"\t"+li.getBook()+"\t" +li.getBook_type()+"\t"+li.getPosition()+"\t" +li.getPublisher()+"\t"+li.getPublish_date() +"\t"+li.getBook_admin()); } sqlSession.close(); }catch(IOExceptione){ e.printStackTrace(); } }}8.2.5<where>标签核心语法(动态条件)动态输出where关键字:有条件则输出,无条件则不输出自动去除条件前多余的and/or,避免语法错误替代"where100=100",更优雅的条件兜底代码示例(动态条件):<selectid="findOrderByInstance_Where"parameterType="com.ssm.orm.pojo.Order"resultType="com.ssm.orm.pojo.Order">selectorder_idasorderId,user_idasuserId,order_moneyasorderMoney,order_timeasorderTimefromt_order<where><iftest="orderId!=null">andorder_id=#{orderId}</if><iftest="userId!=null">anduser_id=#{userId}</if></where></select>8.2.6<trim>标签核心语法(灵活组装)prefix:◦追加前缀(如where/set)suffix:◦追加后缀(如where)prefixOverrides:◦去除前缀(如and/or)suffixOverrides:◦去除后缀(如","))代码示例(灵活组装):<selectid="findOrderByInstance_Trim"parameterType="com.ssm.orm.pojo.Order"resultType="com.ssm.orm.pojo.Order">selectorder_idasorderId,user_idasuserId,order_moneyasorderMoney,order_timeasorderTimefromt_order<trimprefix="where"prefixOverrides="and"><iftest="orderId!=null">andorder_id=#{orderId}</if><iftest="userId!=null">anduser_id=#{userId}</if></trim> </select>8.2.6<trim>标签核心语法(灵活组装)prefix:◦追加前缀(如where/set)suffix:◦追加后缀(如where)prefixOverrides:◦去除前缀(如and/or)suffixOverrides:◦去除后缀(如","))代码示例(灵活组装)1|查询:<selectid="findOrderByInstance_Trim"parameterType="com.ssm.orm.pojo.Order"resultType="com.ssm.orm.pojo.Order">selectorder_idasorderId,user_idasuserId,order_moneyasorderMoney,order_timeasorderTimefromt_order<trimprefix="where"prefixOverrides="and"><iftest="orderId!=null">andorder_id=#{orderId}</if><iftest="userId!=null">anduser_id=#{userId}</if></trim> </select>代码示例(灵活组装)2|更新:<updateid="updateOrderByInstance_Trim"parameterType="com.ssm.orm.pojo.Order">updatet_order<trimprefix="set"suffix="where"suffixOverrides=","><iftest="orderMoney!=null">order_money=#{orderMoney},</if><iftest="orderStatus!=null">order_status=#{orderStatus},</if></trim>user_id=#{userId}</update>项目任务:购物中心库存管理模块开发01任务背景数码产品市场规模扩大,企业需通过技术创新提升竞争力02模块需求供应商管理、销售管理、销售记录检索03技术核心MyBatis框架搭建、动态标签使用、持久化API调用、集成测试素养课堂:数据信息安全核心认知课堂剖析核心认知:数据安全是综合性学科,关系国家安全、社会稳定与个人权益行业警示:63.6%的企业用户处于“高度风险”级别,每年因网络泄密损失上百亿1.公共安全治理:坚持安全第一、预防为主,推动事前预防转型2.个人信息保

温馨提示

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

评论

0/150

提交评论