《框架程序设计(Java)完整版教学课件全书电子讲义(最新).ppt》由会员分享,可在线阅读,更多相关《框架程序设计(Java)完整版教学课件全书电子讲义(最新).ppt(337页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1第1章Mybatis入门框架程序设计(Java)2学习目标认识数据库编程框架认识数据库编程框架mybatismybatis1搭建第一个使用搭建第一个使用mybatismybatis框架的程序框架的程序2理解理解mybatis框架的运行流程框架的运行流程3为为mybatismybatis框架配置日志框架配置日志41.认识认识mybatisoMyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(PlainOl
2、dJavaObjects,普通的Java对象)映射成数据库中的记录。4 1.认识认识mybatis最早:iBATIS=“internet”+“abatis”的组合,本是apache的一个开源项目然后:跳槽到谷歌,从iBatis变成了MyBatis现在:从googlecode到Github目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby5 1.认识认识mybatis框架的好处1、高重用、高重用MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在写在XML里,从程序代码中彻底分离,降低耦合度,
3、便于统一管理和里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用优化,并可重用2、高效率、高效率小巧并且简单易学,减少了小巧并且简单易学,减少了50%以上的代码量。以上的代码量。3 3、高性能、高性能MyBatis 支持数据库连接池,消除了为每一个请求创建一个数据库连接的支持数据库连接池,消除了为每一个请求创建一个数据库连接的开销。开销。MyBatis 提供了内建的缓存机制,在提供了内建的缓存机制,在 SqlSession 级别提供了对级别提供了对 SQL 查询结果的缓存。查询结果的缓存。6 1.认识认识mybatis-特点特点o1、开源的优秀持久层框架、开源的优秀持久层框架o
4、2、SQL语句与代码分离语句与代码分离o3、面向配置的编程、面向配置的编程o4、良好支持复杂数据映射、良好支持复杂数据映射o5、动态、动态SQL7 2.回顾回顾jdbc编程编程-简单查询简单查询创建student表结构并初始数据:8 回顾回顾jdbc编程编程o实施步骤加入驱动程序mysql-connector-java-5.1.7-bin.jar在java的测试类的main方法中写入关键代码o/第0步,准备连接参数oString URL=jdbc:mysql:/localhost:3306/mydb;/数据库连接的地址oString LOGIN=root;/登录数据库的用户名oString P
5、ASSWORD=root;/登录数据库的密码oString DRIVERNAME=com.mysql.jdbc.Driver;/数据库驱动名o/第一步,加载驱动程序oClass.forName(DRIVERNAME);o/第二步,连接数据库oConnection conn=DriverManager.getConnection(URL,LOGIN,PASSWORD);o/第三步,创建用于执行sql语句的对象oStatement st=conn.createStatement();o/第4步:执行sql语句oString sql=select*from user;/第4.1步:编写sql语句oR
6、esultSet rs=st.executeQuery(sql);/第4.2步:运行sql语句owhile(rs.next()/第第4.3步,处理执行结果步,处理执行结果oString stuId=rs.getString(stuId);oString stuName=rs.getString(stuName);oSystem.out.println(id:+stuId+name:+stuName);oo/第五步:关闭数据库oconn.close();9 分析分析jdbc程序程序o该程序在某些情况下是有缺陷的,造成维护困难o数据库连接参数经常发生变化o编写复杂,效率不高osql语句经常发生变化
7、o程序性能不高怎么解决呢?-引入框架2第一个第一个MyBatis程序程序-任务描述任务描述o例子2:对上述程序引入框架进行改造10 2第一个第一个MyBatis程序程序-导包导包o下载https:/ inputStream=Resources.getResourceAsStream(mybatis-config.xml);oSqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);o/2.得到执行sql的对象oSqlSession sqlSession=sqlSessionFact
8、ory.openSession();o/3.执行sql语句oList list=sqlSession.selectList(selectStudent);o/4.输出结果ofor(Map map:list)oSystem.out.println(map);oo/5.关闭数据库osqlSession.close();18 3mybatis框架运行后的反思框架运行后的反思0.sqlSession?类似JDBC生成的Connection对象的SqlSession对象,这样才能与数据库开启“沟通”,通过SqlSession可以实现增删改查。1.得到数据库连接sqlSession1.1加载基本配置文件m
9、ybatis-config.xml同时关联加载StudentMapper.xml映射器1.2创建数据库连接对象sqlSessionFactory2.得到执行sql的对象sqlSession3.使用sqlSession合适的方法传入ID(selectStudent)执行已经加载了的sql映射配置文件StudentMapper.xml中指定的sql语句(selectStudent)4.执行结果映射(List)处理5.关闭数据库连接对象sqlSession204为为mybatis框架配置日志框架配置日志-理由理由为什么要配置日志o记录系统运行状况o便于控制程序的输出(DEBUG,INFO,WARN,
10、ERROR,FATAL)mybatis支持日志系统oLog4joSLF4JoApache Commons Logging oLog4j2 oJDK logging 214为为mybatis框架配置日志框架配置日志-Log4J引入日志的jar包o在mybatis/lib里或http:/logging.apache.org/log4j-1.2.17.jarmaven依赖log4jlog4j1.2.17224为为mybatis框架配置日志框架配置日志-Log4Jo在src目录中添加log4j.properties文件o在文件中加入以下代码(在控制台打印出mybatis执行的sql信息)log4j.r
11、ootLogger=DEBUG,Console#Consolelog4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.layout=org.apache.log4j.PatternLayoutlog4j.appender.Console.layout.ConversionPattern=%d%t%-5p%c-%m%n#灵活控制日志的输出#log4j.logger.org.apache=DEBUG234为为mybatis框架配置日志框架配置日志-用法用法oLoggerlogger=Logger.g
12、etLogger(Test.class);ologger.info(Objectmessage);/输出日志24255进阶作业进阶作业o搭建第一个Maven方式mybatis程序,查询信息表user所有记录。表名user(信息表)字段2个oid学号int自动增长主键oname姓名字符串8位非空要求用mybatis框架,mysql数据库,查询该表的所有记录并输出,同时在控制台打印出日志信息和log4j输出数据。6小结小结o这本套课程中我们学习了MyBatis。你应当掌握了以下知识能力:MyBatis是什么?有什么用最简单的MyBatis应用mybatis的运行流程是怎么样的配置日志有啥用?如何配
13、置26附:附:maven环境方式环境方式pom.xmloo4.0.0ocom.testomybatisdemoo0.0.1-SNAPSHOTojaromybatisdemoohttp:/maven.apache.orgooUTF-8oooojunitojunito3.8.1otestoooorg.mybatisomybatiso3.5.0ooomysqlomysql-connector-javao5.1.30oooolog4jolog4jo1.2.17ooooo第2章Mybatis基础操作28框架程序设计(Java)学习目标29mybatismybatis的简单查询的简单查询2配置配置myba
14、tis1mybatismybatis映射器映射器21.配置配置mybatis-配置方式配置方式oMyBatis的XML配置文件包含了影响MyBatis行为甚深的设置和属性信息.1.使用XML方式配置MyBatis(如:mybatis-config.xml)2.使用JavaAPI方式配置MyBatis配置配置mybatis-MyBatis配置文件配置文件结构结构oMyBatis配置文件中,在标签configuration下有多个子标签,其层次结构如下:oconfigurationo|-properties(属性)o|-settings(全局配置参数)o|-typeAliases(类型别名)o|-
15、typeHandlers(类型处理器)o|-environments(环境集合属性对象)o|-|-environment(环境配置)o|-|-|-transactionManager(事务管理)o|-|-|-dataSource(数据源)o|-mappers(映射器)o|-objectFactory(对象工厂)o|-plugins(插件)配置配置mybatis-属性属性propertieso属性配置元素可以将配置值具体化到一个属性文件中,并且使用属性文件的name名作为占位符。如:我们将数据库连接属性具体化到文件中jdbc.properties之后就可以在mybatis-config.xml文
16、件中为属性使用jdbc.properties文件中定义的占位符和使用配置了的属性:jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql:/mydb?characterEncoding=utf8jdbc.username=rootjdbc.password=root2.mybatis2.mybatis映射器映射器-配置方式配置方式oMyBatis真正强大之处就在它的映射语句上,如果比较SQL映射配置与JDBC代码,可以发现,使用SQL映射配置可以节省很大的代码量。MyBatis映射配置主要被用来创建SQL语句,但又给自己的实现预留有极大的空间。
17、在代码里直接嵌套SQL语句是很差的编码实践,并且维护起来也比较困难。MyBaits使用了映射器配置文件或注解来配置SQL语句,使SQL语句和代码分离,极大地提高了代码的后期可维护性。映射文件配置MyBatis的配置文件mybatis-config.xml在包含了节点,是MyBatis映射器。MyBatis映射器分为三映射器分为三类:类:1、纯xml映射器,利用SqlSession的各种方法实现增删改查。2、xml映射器+接口映射器的混合类型。3、注解+接口映射器的混合形式。2mybatis2mybatis映射器映射器-配置标签配置标签oSQL映射XML文件MyBatis提供了一些基本的配置标签
18、。cache在特定的命名空间配置缓存。cache-ref引用另外一个命名空间配置的缓存。resultMap最复杂也是最强大的元素,用来描述如何从数据库结果集里加载对象。SQL能够被其他语句重用的SQL块。insertinsert映射语句。updateupdate映射语句。deletedeleete映射语句。selectselect映射语句。3.mybatis3.mybatis的简单查询的简单查询-标签标签o标签配置属性解释(教材P45)属性名描述id 在这个命名空间下唯一的标识符,可被其它语句引用parameterType 传给此语句的参数的完整类名或别名(MyBatis已经映射了的type参
19、照教材P19)(string,hashmap,(string,hashmap,自定义自定义)resultType 语句返回值类型的完整类名或别名。注意,如果返回的是集合(collections),那么应该是集合所包含的具体子类型,而不是集合本身。resultType 与resultMap 不能同时使用(MyBatis已经映射了的type参照教材P19)(hashmaphashmap,自定义自定义)resultMap 引用的外部定义的resultMap。结果集映射是MyBatis 中最强大的特性,同时又非常好理解。许多复杂的映射都可以轻松解决。(resultMap03MyBatis复杂查询-关联
20、查询.ppt)resultType 与resultMap不能同时使用mybatismybatis的简单查询的简单查询-带一个参数查询带一个参数查询o例子2:查询用户信息表user中用户名为“zhangsan”的记录表名user(用户信息表)字段3个oIdAUTO_INCREMENT主键ousername用户名字符串10位opassword密码字符串6位非空要求用mybatis框架编程,mysql数据库,查询该表用户名为zhangsan的记录并输出,其中数据库的连接信息放在单独的属性文件properties中36mybatismybatis的简单查询的简单查询-带一个参数查询带一个参数查询o在s
21、ql语句配置文件UserMapper.xml中加入一个新的带参数的sql语句配置:SELECT*FROMuserwhereusername=#xxxo说明加入一个select标签,与前面例子并列属性parameterType=“String”表示sql语句有参数,类型为字符串username=#xxx表示用户名的值是来自一个变量xxx,这个变量值直接从java代码中传入,变量名任意命名37mybatismybatis的简单查询的简单查询-带一个参数查询带一个参数查询o在测试类中修改执行sql语句的代码/3.执行sql语句Listlist=sqlSession.selectList(findUs
22、erByUsername,“zhangsan);o说明:第一个参数对应上页sql配置中的id,第二个参数对应sql语句中的参数xxx,直接传值给xxxo然后运行调试,得到一条zhangsan的记录。38mybatismybatis的简单查询的简单查询-带多个参数查询带多个参数查询o例子2:查询用户信息表user中用户名为“zhangsan”、密码为“111”的记录表名user(用户信息表)字段3个oIdAUTO_INCREMENT主键ousername用户名字符串10位opassword密码字符串6位非空要求用mybatis框架编程,mysql数据库,查询该表用户名为zhangsan,密码为1
23、11的记录并输出,其中数据库的连接信息放在单独的属性文件properties中.39mybatismybatis的简单查询的简单查询-带一个参数查询带一个参数查询o多参数查询的两种处理方式:使用map传递参数使用自定义实体类传递参数40mybatismybatis的简单查询的简单查询-使用使用map传递参数传递参数o在sql语句配置文件UserMapper.xml中加入一个新的带参数的sql语句配置:SELECT*FROMuserwhereusername=#usernameandpassword=#passwordo说明加入一个select标签,与前面例子并列属性parameterType=
24、“hashmap”表示sql语句有参数,参数类型为hashmapusername=#username表示用户名的值是来自map中的username键对应的值password=#password与username类似41mybatismybatis的简单查询的简单查询-使用使用map传递参数传递参数o在测试类中修改执行sql语句的代码/3.执行sql语句Mapcnd=newHashMap();cnd.put(username,“zhangsan);cnd.put(password,“111);Listlist=sqlSession.selectList(findUserByMap,cnd);o说
25、明:第一个参数对应上页sql配置中的id,第二个参数对应sql语句中的参数mapo然后运行调试,得到一条zhangsan的记录。42mybatismybatis简单查询简单查询-自定义实体类传递参数自定义实体类传递参数o在sql语句配置文件UserMapper.xml中加入一个新的带参数的sql语句配置:SELECT*FROMuserwhereusername=#usernameandpassword=#passwordo说明加入一个select标签,与前面例子并列属性parameterType=“domain.User”表示sql语句有参数,类型为一个存放在domain包中的User类use
26、rname=#username表示用户名的值是来自User类中的username属性,从java代码中传入的是User类的对象,然后通过对象的get方法得到对应的username的值,password=#password与username类似43mybatismybatis简单查询简单查询-自定义实体类传递参数自定义实体类传递参数o在domain包下创建一个用户信息类User(每一个属性都要有get、set方法):publicclassUserStringusername;/用户名Stringpassword;/密码publicStringgetUsername()returnusername
27、;publicvoidsetUsername(Stringusername)this.username=username;publicStringgetPassword()returnpassword;publicvoidsetPassword(Stringpassword)this.password=password;44mybatismybatis简单查询简单查询-自定义实体类传递参数自定义实体类传递参数o在测试类中修改执行sql语句的代码/3.执行sql语句Useruser=new User();user.setUsername(“zhangsan);user.setPassword(1
28、11);Listlist=sqlSession.selectList(findUserByUsernameAndPassword,user);o说明:第一个参数对应上页sql配置中的id,第二个参数对应sql语句中的参数Usero然后运行调试,得到一条zhangsan的记录。45mybatismybatis简单查询简单查询-自定义查询结果自定义查询结果o例子3:查询用户信息表user中用户名为“张三”、密码为“111”的记录返回List类型,而不是hashmap类型。要求用mybatis框架编程,mysql数据库,查询该表所有数据集合把查询出来的用户名输出,其中数据库的连接信息放在单独的属性文
29、件properties中。并且用log4j把信息输出到文件(大于10K时换文件输出)里面去。46mybatismybatis简单查询简单查询-自定义查询结果自定义查询结果o在sql语句配置文件UserMapper.xml中加入一个新的带参数的sql语句配置:SELECT*FROMusero说明加入一个select标签,与前面例子并列resultType=“domain.User”表示返回不再是默认的hashmap,而是把数据封装到domain.User类的对象中47mybatismybatis简单查询简单查询-自定义查询结果自定义查询结果o在测试类中修改执行sql语句的代码/3.执行sql语句
30、Useruser=new User();user.setUsername(张三);user.setPassword(111);Listlist=sqlSession.selectList(findNameByUserinfo,user);/4.输出结果for(User user2:list)System.out.println(user2.getUsername();o说明:返回不再是map而是User,则可以使用对应的get方法得到用户名,o查询过程中结果集List对象中的User是系统自动封装(调用User类的set方法,若没有set方法则会报错)o运行调试,得到记录。48mybatism
31、ybatis简单查询简单查询-查询一条结果查询一条结果o在测试类中修改执行sql语句的代码/3.执行sql语句Useruser=new User();user.setUsername(张三);user.setPassword(111);/Listlist=sqlSession.selectList(findNameByUserinfo,user);Useruser2=sqlSession.selectOne(“findNameByUserinfo,user);/4.输出结果/for(User user2:list)System.out.println(user2.getUsername();/
32、o说明:sqlSession.selectOne是查询一条记录,当然程序员必须确定查询结果最多一条。o运行调试:结果应该完全一样49运行反思及存在的问题运行反思及存在的问题o数据库信息单独抽取?oselectid=selectStudent项目太大时重复?oresultType或parameterType名称过长问题?类型别名类型别名typeAliaseso类型别名是Java类型的简称,即Java对象的简称,它只是关联到sqlMapper配置,配置完该别名后sqlMapper中就不必写完整的Java对象名称了。o为完全限定名起一个别名:oooo批量导入:oooo使用方式oo.o进阶作业进阶作业
33、 o新建任意一张具有5个字段以上的表,传入多个查询条件,查询出多条符合条件的记录,并用log4jdebug方式逐条输出到文件(当文件大小大于10K时换文件输出)。要求数据库的连接信息放在单独的属性文件properties中。52小结小结o本次课程中我们学习了MyBatis的简单查询。你应当掌握了以下知识/能力:1、配置mybatis1、映射器2、带一个参数的查询3、带多个参数的查询4、自定义查询结果的数据类型(不用默认的hashmap)53第3章Mybatis基础操作54框架程序设计(Java)学习目标55数据库事务及数据库事务及mybatismybatis的事务管理的事务管理1mybatis
34、mybatis的增加、删除、修改操作的增加、删除、修改操作21.1 数据库的事务数据库的事务o在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行。o四大特性(ACID)原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)1.2 mybatis进行事务管理进行事务管理-配置配置o回顾前面例子中mybatis-config.xml文件关键内容o说明红色的部分就是mybatis的事务管理配置其中typ
35、e属性有两个取值,JDBC表示由JDBC来进行事务管理,MANAGED表示由第三方插件来管理比如以后要学习的spring框架1.3 mybatis进行事务管理进行事务管理-JDBC法法o使用JDBC的事务管理机制:利用java.sql.Connection对象完成对事务的提交、回滚、关闭。osqlSmit();osqlSession.rollback();osqlSession.close();2.1 mybatis的增、删、改的增、删、改-inserto标签(P47)属性名描述id 在这个命名空间下唯一的标识符,可被其它语句引用。parameterType 传给此语句的参数的完整类名或别名。
36、useGeneratedKeys(仅限insert 语句时使用)告诉MyBatis 使用JDBC 的 getGeneratedKeys 方法来获取数据库自动生成主键(如:MySQL、SQLSERVER 等关系型数据库会有自增的字段)。默认:falsekeyProperty(仅限insert 语句时使用)设置自动生成主键的字段,这个字段的值由getGeneratedKeys 方法返回,或者由insert 元素的selectKey 子元素返回。默认不设置3.1 mybatis的增、删、改的增、删、改-inserto例子1:在用户信息表user中插入一条记录表名user(用户信息表)字段2个ouse
37、rname用户名字符串10位主键opassword密码字符串6位非空要求用mybatis框架编程,mysql数据库,在该表中插入用户名为李四,密码为444的记录框架程序设计java603.1mybatis的增、删、改的增、删、改-inserto在sql语句配置文件UserMapper.xml中加入一个新的带参数的sql语句配置:insertintouser(username,password)values(#username,#password)o说明加入一个insert(插入)标签,与前面select标签并列parameterType=“domain.User”表示传入的参数不是一个简单类型
38、,而是把数据封装到domain.User类的对象中#username表示用户名的值来自User类中的username属性,从java代码中传入的是User类对象,然后通过username的get方法得到值,#password类似框架程序设计java613.1mybatis的增、删、改的增、删、改-inserto在测试类中修改执行sql语句的代码/3.执行sql语句Useruser=newUser();user.setUsername(李四);user.setPassword(444);inti=sqlSession.insert(insertUser,user);/4.结果输出注释掉o说明:s
39、qlSession.insert(“insertUser”,user);是插入一条id为insertUser的sql语句,传入的插入参数为user对象o调试执行,发现数据库中未成功增加一条数据,重复执行呢?框架程序设计java623.1mybatis的增、删、改的增、删、改-inserto在测试类中修改执行sql语句的代码sqlSmit();说明:sqlSession默认为手动提交(sqlSmit();)。o调试执行,发现数据库中成功增加一条数据,再重复执行呢?框架程序设计java633.2mybatis的增、删、改的增、删、改-updateo标签属性名描述id 在这个命名空间下唯一的标识符,
40、可被其它语句引用。parameterType 传给此语句的参数的完整类名或别名。3.2mybatis的增、删、改的增、删、改-updateo例子2:在用户信息表user中修改一条记录表名user(用户信息表)字段2个ousername用户名字符串10位主键opassword密码字符串6位非空要求用mybatis框架编程,mysql数据库,在该表中修改用户名为李四的记录,把密码444修改为666框架程序设计java653.2mybatis的增、删、改的增、删、改-updateo在sql语句配置文件UserMapper.xml中加入一个新的带参数的sql语句配置:UPDATEuserSETpass
41、word=#passwordWHEREusername=#usernameo说明加入一个update(修改)标签,与前面的insert标签并列parameterType=“domain.User”表示传入的参数不是一个简单类型,而是把数据封装到domain.User类的对象中#username表示用户名的值来自User类中的username属性,从java代码中传入的是User类对象,然后通过username的get方法得到值,#password类似框架程序设计java663.2mybatis的增、删、改的增、删、改-updateo在测试类中修改执行sql语句的代码/3.执行sql语句User
42、user=newUser();user.setUsername(李四);user.setPassword(“666);inti=sqlSession.update(updateUser,user);sqlSmit();o说明:sqlSession.update(“updateUser”,user);是修改一条id为updateUser的sql语句,传入的插入参数为user对象o调试执行,发现数据库中修改成功框架程序设计java673.3mybatis的增、删、改的增、删、改-deleteo标签属性名描述id 在这个命名空间下唯一的标识符,可被其它语句引用。parameterType 传给此语句
43、的参数的完整类名或别名。3.3mybatis的增、删、改的增、删、改-deleteo例子3:在用户信息表user中删除一条记录表名user(用户信息表)字段2个ousername用户名字符串10位主键opassword密码字符串6位非空要求用mybatis框架编程,mysql数据库,在该表中删除用户名为李四的记录框架程序设计java693.3mybatis的增、删、改的增、删、改-deleteo在sql语句配置文件UserMapper.xml中加入一个新的带参数的sql语句配置:deletefromuserwhereusername=#xxxo说明加入一个delete(修改)标签,与前面的up
44、date标签并列parameterType=“string”表示传入的参数是java中的字符串String类型,其中首字母s大小写是一样的#xxx表示传入的参数,这里参数名只是一个形式,可任意命名框架程序设计java703.3mybatis的增、删、改的增、删、改-deleteo在测试类中修改执行sql语句的代码/3.执行sql语句/Useruser=newUser();/user.setUsername(李四);/user.setPassword(“666);sqlSession.delete(“deleteUser”,“李四”);sqlSmit();o说明:sqlSession.delet
45、e(“deleteUser”,“李四”);是删除一条id为deleteUser的sql语句,传入删除的username为李四o调试执行,发现数据库中删除李四这条记录成功框架程序设计java713.4运行反思运行反思o在测试类中修改执行sql语句的代码(标准写法)对于一个事务里commit(),rollback(),close();都必须要用到吗?代码位置怎么放最合理?insert时能自动生成主键?框架程序设计java723.5作业作业o用mybatis对任一张表作CRUD操作框架程序设计java733.6小结小结o本课中我们学习了MyBatis基础操作。你应当掌握了以下知识:MyBatis增删
46、改操作标记、(全换成select标签也可以)MyBatis事务处理框架程序设计java74框架程序设计java75第4章Mybatis复杂查询76框架程序设计(Java)学习目标77mybatismybatis的关联查询的关联查询2命名空间和接口绑定命名空间和接口绑定3自定义映射关系自定义映射关系11自定义映射关系自定义映射关系 标签标签o标签配置属性解释(教材P45)属性名描述id 在这个命名空间下唯一的标识符,可被其它语句引用parameterType 传给此语句的参数的完整类名或别名(MyBatis已经映射了的type参照教材P19)(string,hashmap,自定义)resultT
47、ype 语句返回值类型的完整类名或别名。注意,如果返回的是集合(collections),那么应该是集合所包含的具体子类型,而不是集合本身。resultType 与resultMap 不能同时使用(MyBatis已经映射了的type参照教材P19)(hashmap,自定义)resultMap 引用的外部定义的resultMap。结果集映射是MyBatis 中最强大的特性,同时又非常好理解。许多复杂的映射都可以轻松解决。(自定义resultMap)resultType 与resultMap不能同时使用1自定义映射关系自定义映射关系-resultTypeo回顾自定义结果集相关知识点SELECT*F
48、ROMstudentwherestuname=#stuNameandstuid=#stuId79思考:商业项目的开发中Student类由谁在什么时候生成?1自定义映射关系自定义映射关系-resultTypeo假设Student类结构如下:publicclassStudentStringid;Stringname;publicStringgetId()returnid;publicvoidsetId(Stringid)this.id=id;publicStringgetName()returnname;publicvoidsetName(Stringname)this.name=name;80思
49、考:数据库库字段名称与Student类中的属性名称不同,mybatis还能自动映射吗?1自定义映射关系自定义映射关系-resultType方式o使用select语法:将列名取一个别名SELECTstuNameasname,stuIdasidFROMstudentwherestuname=#stuNameandstuid=#stuId思考:试一试设想SQL如果像Student一样也是事先已经写好?811自定义映射关系自定义映射关系-resultType方式resultType方式反思?修改java代码?行不通X修改SQL?行不通X想办法:resultresultTyperesultMap1自定义
50、映射关系自定义映射关系-resultMapo使用resultMap自定义映射关系ThemostcomplicatedandpowerfulelementthatdescribeshowtoloadyourobjectsfromthedatabaseresultsetsoresultMap是Mybatis最复杂最强大的元素,它可以完成复杂的数据映射:它可以解决列名和属性名不匹配问题;将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中。831自定义映射关系自定义映射关系-resultMap oresultMap定义84尝试理解:type、id、column、property、resu