下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程计1、mybatis2、MybatisjdbcMybatisMybatis3、Daodao动态方1、输入和输出输入参数返回值4、MybatisMyBatis介MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了code,并且改名为MyBatis。2013年11月迁移到。只需要关注SQL本身,而不需要花费精力去处理例如驱动、创建connection、创建进行生成最终执行的sql语句,最后由mybatis框架执行sql并将结果成java对象并mysql先导入创建数据库的sql导入到数据库中eclipsemars1、创建一个java2jarmysqljdbc23jdbcstatement对象4sql语句5sql语句中的参数(6statementsql7sqljdbcpublicpublicstaticvoidmain(String[]args){Connectionconnection=PreparedStatementpreparedStatement=null;ResultSetresultSet=null;tryconnection=terEncoding=utf-8","root","root");//定义sql?Stringsql="select*fromuserwhereusername=preparedStatement=preparedStatement.setString(1, resultSet=preparedStatement.executeQuery();}}catch(Exceptione){ try}catch(SQLExceptione)//TODOAuto-generatedcatchblock}}try{}catch(SQLExceptione)//TODOAuto-generatedcatchblock}}try{}catch(SQLExceptione)//TODOAuto-generatedcatchblock}}}}上边使用jdbc的原始方法(封装)实现了查询数据库表记录的操作jdbc2、Sql语句在代码中硬编码,造成代码不易,实际应用sql变化的可能较大,sql变动需要改变java代码。3preparedStatementsqlwhere条件不一定,可能多也可能少,修改sql还要修改代码,系统不易。4、对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易,pojo对象解析比较方便。Mybatis架Mapper11mybatismapper.xml文件即sql文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。5MappedStatementmybatismybatissql信息等。mapper.xmlsqlMappedStatement对象,sqlid即Mappedstatementid。pojoExecutor通过MappedStatement在执行sql前将输入的java对象至sql中,输入参数就jdbcpreparedStatement设置参数。7MappedStatement对sqlHashMappojoExecutor通过MappedStatement在执行sql后将输出结果至java对象中输出结果过Mybatis入门程mybatismybaits的代码 idjavaeclipse创建java工程,jdk1.7.0_72jar加入mybatis包、依赖包、数据驱动包perties##Globalloggingconfigurationlog4j.rootLogger=DEBUG,stdout#Consoleoutput...log4j.appender.stdout=log4j.appender.stdout.layout=.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p[%t]-mybatislog4j<?xml<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEPUBLIC"-PUBLIC"-"//DTDConfig和springenvironments<environments<environment使用jdbc事务管理<transactionManagertype="JDBC"数据库连接池<dataSource<propertyname="driver"value="com.mysql.jdbc.Driver"/><propertyname="url"tf-8"/><propertyname="username"value="root"<propertyname="password"value="root"第五步:poPublicPublicclassUserprivateintprivateStringusername;/privateStringprivateDatebirthday;/privateStringaddress;/第六步:sql文在classpath下的 下创建sql文件<?xml<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEPUBLIC"-"<mapper//DTDMapper第七步:加载文mybatis框架需要加载文件,将Users.xml添加在SqlMapConfig.xml,如下<mapperid 根据id<selectid="findUserById"parameterType="int" select*fromuserwhereid=publicpublicclass{privateSqlSessionFactorypublicvoidcreateSqlSessionFactory()throwsIOExceptionStringresource=//sqlSessionFactory=new}id查询用户信息publicvoidtestFindUserById()SqlSessionsqlSession=null;try{创建数据库会话实例sqlSession=查询单个记录,根据用户idUseruser=}catch(Exceptione){}finallyif(sqlSession!=null){}}}}<select<selectid="findUserByUsername"parameterType="java.lang.String" select*fromuserwhereusernamelikeparameterType:定义输入到sql中的 resultType:定义结果类型publicvoidtestFindUserByUsername()SqlSessionsqlSession=null;try{创建数据库会话实例sqlSession=查询单个记录,根据用户idList<User>list=sqlSession.selectList("test.findUserByUsername张");}catch(Exceptione){}finallyif(sqlSession!=null){}}}#{}和#{}#{}preparedStatementjavajdbc类型转换,#{}sql#{}pojo属性值。parameterType传输单个简单类型值,#{}value或其它名称。${}sql串,通过${}parameterTypesql中且不进行jdbc类${}pojoparameterType传输单个简单类型值,resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据为selectOne(ornull)tobereturnedbyselectOne(),butfound:3<insertid="insertUser"insertintopublicvoidtestInsert()SqlSessionsqlSession=null;try{创建数据库会话实例sqlSession=Useruser=newUser(); }catch(Exceptione){}finallyif(sqlSession!=null){}}}mysql<insertid="insertUser" selectKey<insertid="insertUser" selectKey<selectKeykeyProperty="id"order="AFTER"selectinsertintouser(username,birthday,sex,address)insertselectKeyafterMysqluuidselectuuid()uuid <selectKeyresultType="java.lang.String"order="BEFORE"selectinsertintouser(id,username,birthday,sex,address)<deleteid="deleteUserById"parameterType="int">deletefromuserwhereid=#{id}根据idpublicvoidtestDelete()SqlSessionsqlSession=null;try{创建数据库会话实例sqlSession=}catch(Exceptione){}finallyif(sqlSession!=null){}}}<updateid="updateUser"updateuserwhere//更新用户信 publicvoidtestUpdate()SqlSessionsqlSession=null;try{创建数据库会话实例sqlSession=Useruser=newUser(); }catch(Exceptione){}finallyif(sqlSession!=null){}}}Mybatisjdbc2、Sql语句写在代码中造成代码不易,实际应用sql变化的可能较大,sql变动需要改java代码。解决:将Sql语句配置在Xmapper.xml文件中与java代码分离3sqlsqlwhere条件不一定,可能多也可能少,占位符解决:Mybatis自动将java对象至sql语句,通过statement中的parameterType定4sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库pojo对象解析比较方便。解决:Mybatis自动将sql执行结果至java对象,通过statement中的resultTypemybatishibernateMybatishibernateORMMyBatis需要程序员自己编写SqlmybatisXML或注解方式灵活配置要运行的sqljava对象和sql语句生成最终执行的sql,最后将sql执行的结果再生成java对象。灵活度高,非常适合对关系数据模型要求不高的开发,例如互联网、企业运营类软件等,因为这类需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性如果需要实现支持多种数据库的则需要自定义多套sql的学习门槛高,要精通门槛更高,而且怎么设计O/R,在性能和对象模型之间如何权Hibernate需要具有很强的经验和能力才行。Dao开发方MybatisDaoDaoMapperidSqlSessionSqlSessionFactoryBuilderSqlSessionSqlSessionFactory生产,所以可以SqlSessionFactory是一个接口,接口中定义了openSession的不同重载方法,SqlSessionFactory的最佳使用范围是整个应用运行期间,一旦创建后可以重复使用,通常以SqlSessionFactory。SqlSessionsqlSessionSqlSession实例。SqlSession的实例不能共享使用,它也是SqlSessionsession=sqlSessionFactory.openSession();try{//SqlSessionsession=sqlSessionFactory.openSession();try{//do}finally}DaoDaoDaoDao<?xml<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEPUBLIC"- //DTDMapper <mapper根据id<selectid="findUserById"parameterType="int" select*fromuserwhereid=<insertid="insertUser" <selectKeykeyProperty="id"order="AFTER"selectinsertintouser(username,birthday,sex,address)DaoPublicPublicinterfaceUserDaopublicUsergetUserById(intid)throwspublicvoidinsertUser(Useruser)throws}PublicclassUserDaoImplimplementsUserDaopublicUserDaoImpl(SqlSessionFactory}privateprivateSqlSessionFactorysqlSessionFactory;publicUsergetUserById(intid)throwsException{SqlSessionsession=sqlSessionFactory.openSession();Useruser=null;try数user=session.selectOne("test.findUserById",1);}}return}PublicvoidinsertUser(Useruser)throwsException{SqlSessionsqlSession=sqlSessionFactory.openSession();try{sqlSession.insert("insertUser",}}}}DaoprivateSqlSessionFactorypublicvoidinit()throwsprivateSqlSessionFactorypublicvoidinit()throwsExceptionSqlSessionFactoryBuildersessionFactoryBuilder=newSqlSessionFactoryBuilder();InputStreaminputStream=Resources.getResourceAsStream("SqlMapConfig.xml");sqlSessionFactory=sessionFactoryBuilder.build(inputStream);}publicvoidtestGetUserById()UserDaouserDao=newUserDaoImpl(sqlSessionFactory);Useruser=userDao.getUserById(22);}}DaoMapper动态方框架根据接口定义创建接口的动态对象,对象的方法体同上边Dao接口实现类方2Mapper接口方法名和Mapper.xmlstatementid3Mappermapper.xmlsqlparameterType的4Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相定义mapper文件UserMapper.xml(内容同Users.xml),需要修改namespace的值为UserMapper接口路径。将UserMapper.xml放在classpath下mapper <?xml<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEPUBLIC"-PUBLIC"-"<mapper//DTDMapper根据id<selectid="findUserById"parameterType="int" select*fromuserwhereid=<selectid="findUserByUsername"parameterType="java.lang.String" select*fromuserwhereusernamelike<insertid="insertUser" <selectKeykeyProperty="id"order="AFTER"selectinsertintouser(username,birthday,sex,address)*用户管理PublicinterfaceUserMapperpublicUserfindUserById(intid)throwspublicvoidinsertUser(Useruser)throws}1Mapper接口方法名和Mapper.xmlstatementid2Mapper接口方法的输入参数类型和mapper.xml中定义的statementparameterType3Mapper接口方法的输出参数类型和mapper.xml中定义的statement的resultType的类型<mapperPublicPublicclassUserMapperTestextendsTestCaseprivateSqlSessionFactoryprotectedvoidsetUp()throwsExceptionStringresource=sqlSessionFactory=new}PublicvoidtestFindUserById()throwsExceptionSqlSessionsession= 对UserMapperuserMapper= Useruser=userMapper.findUserById(1);}}publicvoidtestFindUserByUsername()throwsException{SqlSessionsqlSession=sqlSessionFactory.openSession();UserMapperuserMappersqlSession.getMapper(UserMapper.class);List<User>list=userMapper.findUserByUsername("张");}/r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度演出合同电影主演与制片方之间的表演委托合同
- 2024标准短期汽车租赁合同模板版B版
- 2024排水沟施工与河道整治综合服务合同3篇
- 2024甲方提供技术支持乙方进行市场拓展的合同
- 2025年智能家居中央空调设备销售与系统集成合同3篇
- 2024年租赁物业管理合同3篇
- 2024武汉住宅租赁合同(含租赁双方争议解决机制)3篇
- 2024年直饮水系统安装工程项目协议版B版
- 2024水产养殖绿色生态养殖技术合作协议3篇
- 安全知识培训课件制作
- 超级充电综合站及配套设施建设项目可行性研究报告
- 2023年核心素养下的初中历史教学有效性策略
- 眼科学 眼外伤(课件)
- 索具螺旋扣规格花篮螺丝
- GB/T 9364.4-2016小型熔断器第4部分:通用模件熔断体(UMF)穿孔式和表面贴装式
- GB/T 21709.1-2008针灸技术操作规范第1部分:艾灸
- GB/T 16288-2008塑料制品的标志
- 住院医师规范化培训临床实践能力结业考核专科技能操作评分表(耳鼻咽喉科)气管切开术
- DBJ-T 13-195-2022 烧结煤矸石实心砖和多孔砖(砌块) 应用技术标准
- 意大利FM筋膜手法治疗量表
- 静态爆破专项施工方案
评论
0/150
提交评论