




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程计课程计1、Mybatis2、MybatisMybatisMybatis3、Dao2、动态sql2.MybatisMyBatis本是apacheiBatis,2010年这个项目由softwarefoundationgooglecodeMyBatis。201311月迁移到Github。使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connectionstatementjdbc繁杂的过程代Mybatis通过xml或注解的方式将要执行的各种statement(statement、3.使用jdbc编程3.使用jdbc编程3.2jarjar3.3jdbc编程步2、创建并获取数据库链接4、设置sql语句6statementsql并获取结果3.4.jdbcpublicstaticvoidmain(String[]{Connectionconnection=null;PreparedStatementpreparedStatement=null;ResultSetresultSet=null;try//加载数据库驱//通过驱动管理类获取数据库connection=racterEncoding=utf-8","root","root");//定义sql语句?表示占位Stringsql="select*fromuserwhereusername=//获取预处理preparedStatement=,preparedStatement.setString(1,"王五//向数据库发出sql执行查询,查询出结resultSet=//遍历查询结果while{System.out.println(resultSet.getString("id")+""+}}catch(Exception{}finallyif(resultSet!=null){;}catch(SQLExceptione)//TODOAuto-generatedcatchblock}}if(preparedStatement!=null){}catch(SQLExceptione)//TODOAuto-generatedcatchblock}}if(connection!=null){}catch(SQLExceptione)//TODOAuto-generatedcatchblock}3.53.5jdbc问题总结如下大,sql变动需要改变java代码。3preparedStatementsql,sql易维护,如果能将数据库记录封装成pojo对象解析比较方便。4.MybatisMyBatis配置文数据1mybatismybatismybatisSqlMapConfig.xmlsql4.MybatisMyBatis配置文数据1mybatismybatismybatisSqlMapConfig.xmlsql4、mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个5MappedStatementmybatismybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个MappedStatement对象,sqlidMappedstatementid。输入映String输出映pojo,ExecutorMappedpojo,ExecutorMappedStatementsqljava对象映射sqljdbcpreparedStatement设置参数。pojo,ExecutorMappedStatementsql5.Mybatis入门程5.1.mybatis下mybatislib5.2根据用户id查询一个用户5.35.35.3.2jarmybatismybatis数据库驱动包(已添加数据库驱动包(已添加5.3.3.5.3.3.加入配置...<!DOCTYPEPUBLIC"-////DTDConfig3.0//EN"<!--spring整合后environments配置将废除<environment<transactionManagertype="JDBC"<dataSource<propertyname="driver"<property8"/>#Globalloggingconfigurationlog4j.rootLogger=DEBUG,stdout#Consoleoutput...log4j.appender.stdout.layout.ConversionPattern=%5p[%t]-%m%n..PublicclassUserprivateIntegerprivateStringusername;//privateStringsex;//性别privateDatebirthday;//生日privateStringaddress;//5.3.5第六步:5.3.5第六步:sql映射5.3.6.mybatis框架需要加载Mapper.xml映射文件5.4实现根id查询用SELECT*FROM`user`WHEREid=<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEPUBLIC"-////DTDMapper3.0//EN"<!--namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲<mapper5.4.1映射文件5.4.1映射文件5.4.2测试程序publicclassMybatisTestprivateSqlSessionFactorysqlSessionFactory=publicvoidinit()throwsException//1.创建SqlSessionFactoryBuilder对SqlSessionFactoryBuildersqlSessionFactoryBuilder=<!DOCTYPEPUBLIC"-////DTDMapper3.0//EN"<!--namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲<mapper<!--id:statementid或者叫做sqlid<!--parameterType:声明输入参数的类型<!--resultType:声明输出结果的类型,应该填写pojo的全路径<!--#{}:输入参数的占位符,相当于jdbc的?<selectid="queryUserById"parameterType="int"SELECT*FROM`user`WHEREid=#{id}5.4.3. 5.4.3. SELECT*FROM`user`WHEREusernameLIKE王//2.加载SqlMapConfig.xml配置文InputStreaminputStream=//3.创建SqlSessionFactorythis.sqlSessionFactory=}publicvoidtestQueryUserById()throwsException4.创建SqlSession对SqlSessionsqlSession=//5.执行SqlSession对象执行查询,获取结果6.打印结7.释放资}}方法方法..publicvoidtestQueryUserByUsername1()throwsException4.创建SqlSession对SqlSessionsqlSession=//5.执行SqlSession对象执行查询,获取结果//查询多条数据使用selectListList<Object>list=6.打印结for(Objectuser:{}7.释放资}<!--如果返回多个结果,mybatis会自动把返回的结果放在list容器中<!--resultType的配置和返回一个结果的配置一样<selectid="queryUserByUsername1"parameterType="string"SELECT*FROM`user`WHEREusernameLIKE方法映射文件方法映射文件.测试程序.publicvoidtestQueryUserByUsername2()throwsException4.创建SqlSession对SqlSessionsqlSession=//5.执行SqlSession对象执行查询,获取结果//查询多条数据使用selectListList<Object>listsqlSession.selectList("queryUserByUsername2",6.打印结for(Objectuser:{}7.释放资}<!--如果传入的参数是简单数据类型,${}里面必须写value<selectid="queryUserByUsername2"parameterType="string"SELECT*FROM`user`WHEREusernameLIKE5.6..5.6.1和#{}表示一个占位符号,通过#{}preparedStatement向占位符中设置值,javajdbc类型转换。#{}sql#{}可以接收简pojoparameterType传输单个简单类型值,#{}括号中5.6.2parameterType拼接在sql中。resultType:指定输出结果类型,mybatissqlresultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中5.6.3.selectOneselectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常:oneresult(ornull)tobereturnedbyselectOne(),butfound:5.7实现添加用5.7实现添加用5.7.1映射文件5.7.2publicvoidtestSaveUser()4.创建SqlSession对SqlSessionsqlSession=//5.执行SqlSession对象执行//创建需要保存的UserUseruser=newUser();//需要进行事务提7.释放资}<insertid="saveUser"INSERTINTO`user`(username,birthday,sex,address)VALUES5.7.3.5.7.4mysql自增主键返5.7.3.5.7.4mysql自增主键返SELECTLAST_INSERT_ID():是值<insertid="saveUser"<!--keyColumn:主键对应的表中的哪一列<!--keyProperty:主键对应的pojo中的哪一个属性insert语句之后执行查询idsql--><!--resultType:设置返回的id的类型<selectKeykeyColumn="id"keyProperty="id"order="AFTER"SELECTINSERTINTO`user`(username,birthday,sex,address)VALUES5.7.5.Mysql使用uuid实现5.7.5.Mysql使用uuid实现主5.8UPDATE`user`SETusername赵云WHEREid5.8.1<updateid="updateUserById"UPDATE`user`username=#{username}WHEREid=<insertid="saveUser"<!--keyColumn:主键对应的表中的哪一列<!--keyProperty:主键对应的pojo中的哪一个属性insert语句之后执行查询idsql--><!--resultType:设置返回的id的类型<selectKeykeyColumn="id"keyProperty="id"order="BEFORE"SELECTINSERTINTO`user`(username,birthday,sex,address)VALUES.3..3.5.9publicvoidtestUpdateUserById()4.创建SqlSession对SqlSessionsqlSession=//5.执行SqlSession对象执行//创建需要更新的UserUseruser=newUser();sqlSession.update("updateUserById",//需要进行事务提7.释放资}DELETEFROM`user`WHEREidDELETEFROM`user`WHEREid=5.9.1映射文件5.9.2测试程序5.9.3.publicvoidtestDeleteUserById()4.创建SqlSession对SqlSessionsqlSession=//5.执行SqlSession对象执行sqlSession.delete("deleteUserById",//需要进行事务提7.释放资}<deleteid="deleteUserById"parameterType="int">deletefromuserwhere5.10Mybatis5.10Mybatisjdbc编程的动需要改变java代码。3sqlsqlwhere条件不一定,可能多也可能解决:Mybatis自动将java对象映射至sql语句,通过statement中的将数据库记录封装成pojo对象解析比较方便。解决:Mybatissqljavastatement5.11mybatishibernateMybatishibernateORMMyBatis需要sqljavasqlsqlsql执行的Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sqlHibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)hibernate开发可以节省很多代码,HibernateO/R6.Dao开发方6.Dao开发方Dao6.1.根据用户id查询一个用户信息6.2SqlSession的使用范6.2.1.SqlSessionFactoryBuilder了,因为SqlSession是通过SqlSessionFactorySqlSessionFactoryBuilder6.2.2.SqlSessionFactory6.2.3.SqlSession是一个面向用户的接口,sqlSession中定义了数据库操作方法。用,它也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字6.3.1<!DOCTYPEPUBLIC"-////DTDMapper3.0//EN"<!--namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲<mapper<selectid="queryUserById"parameterType="int"select*fromuserwhereid=#{id}<!--根据username模糊查询用户<selectid="queryUserByUsername"parameterType="string"select*fromuserwhereusernamelike<insertid="saveUser"<selectKeykeyProperty="id"keyColumn="id"order="AFTER"SELECTinsertintouser(username,birthday,sex,address)SqlSessionsession=try//do}finally}6.3.2.Dao接6.3.2.Dao接6.3.3.Dao实现publicclassUserDaoImplimplementsUserDaoprivateSqlSessionFactorypublicUserDaoImpl(SqlSessionFactorysqlSessionFactory)this.sqlSessionFactory=}publicinterfaceUserDao根据id查询用*@paramUserqueryUserById(int根据用户名模糊查询*@paramList<User>queryUserByUsername(String保存用*@paramvoidsaveUser(User}6.3.4.Dao6.3.4.Dao测publicclassUserDaoTest publicUserqueryUserById(intid)创建SqlSessionsqlSession=//执行查询逻Useruser=sqlSession.selectOne("queryUserById",return}publicList<User>queryUserByUsername(Stringusername)创建SqlSessionsqlSession=//执行查询逻List<User>list=//释放资源returnlist;}publicvoidsaveUser(Useruser)创建SqlSessionsqlSession=//执行保存逻sqlSession.insert("saveUser",}}privateSqlSessionFactorypublicvoidinit()privateSqlSessionFactorypublicvoidinit()throwsException//创建SqlSessionFactoryBuilder//SqlMapConfig.xml配置InputStreaminputStream=创建this.sqlSessionFactory=}=publicvoidtestQueryUserById()创建UserDaouserDao=newUseruser=userDao.queryUserById(1);}publicvoidtestQueryUserByUsername()创建UserDaouserDao=newList<User>list=userDao.queryUserByUsername("张for(Useruser:{}}publicvoidtestSaveUser()创建UserDaouserDao=new//创建保存对Useruser=newuser.setUsername("刘备6.3.5.Dao方法体存在重复代码:通过SqlSessionFactory创建SqlSession6.3.5.Dao方法体存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法6.4.Mapper动态代理方6.4.1Mybatis3Mapper接口方法的输入参数类型和4Mapper接口方法的输出参数类型和mapper.xml中定义的每个sqlmapper.xml中定义的每个sql}}6.4.2.Mapper.xml(映射6.4.2.Mapper.xml(映射文件<!DOCTYPEPUBLIC"-////DTDMapper3.0//EN"<!--namespace:命名空间,用于隔离sql<!--还有一个很重要的作用,使用动态代理开发DAO,1.namespace必须Mapper接口类路径一致<mapper<!--3.parameterType必须和接口方法参数类型一致<!--4.resultType必须和接口方法返回值类型一致<selectid="queryUserById"parameterType="int"select*fromuserwhereid=#{id}<selectid="queryUserByUsername"parameterType="string"select*fromuserwhereusernamelike..publicinterfaceUserMapperid*@paramUserqueryUserById(int根据用户名查询用*@paramList<User>queryUserByUsername(String保存用*@paramvoidsaveUser(User}<insertid="saveUser"<selectKeykeyProperty="id"keyColumn="id"order="AFTER"selectinsertintouser(username,birthday,sex,address)values6.4.4.加载UserMapper.xml6.4.4.加载UserMapper.xml6.4.5.publicclassUserMapperTestprivateSqlSessionFactorypublicvoidinit()throwsException//创建SqlSessionFactoryBuilderSqlSessionFactoryBuildersqlSessionFactoryBuildernew//SqlMapConfig.xml配置InputStreaminputStream=创建this.sqlSessionFactory=}publicvoidtestQueryUserById()//获取sqlSession,和spring整合后由springSqlSessionsqlSession=sqlSessionMapper接口的代理对UserMapperuserMapper=//执行查询方Useruser=userMapper.queryUserById(1);spring整合后由spring}<mapperresource="sqlmap/User.xml"<mapperresource="mapper/UserMapper.xml"publicvoidtestQueryUserByUsername()//获取publicvoidtestQueryUserByUsername()//获取sqlSession,和spring整合后由springSqlSessionsqlSession=sqlSessionMapper接口的代理对UserMapperuserMapper=//执行查询方List<User>list=userMapper.queryUserByUsername("张for(Useruser:{}spring整合后由spring}publicvoidtestSaveUser()//获取sqlSession,和spring整合后由springSqlSessionsqlSession=sqlSessionMapper接口的代理对UserMapperuserMapper=//创建保存对Useruser=newUser();//执行查询方法}}6.4.6.selectOne动态代理对象调用sqlSession.selectOne()和6.4.6.selectOne动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据mapperselectOnelistselectListmybatis官方推荐使用mapper代理方法开发mappermapdaopojo7.SqlMapConfig.xml配置7.17.2properties(属性7.2properties(属性<!DOCTYPEPUBLIC"-////DTDConfig3.0//EN"<!--是用resource属性加载外部配置文件<properties<!--properties内部用property定义属性<!--如果外部配置文件有该属性,则内部定义属性被外部属性覆盖<propertyname="jdbc.username"value="root123"<propertyname="jdbc.password"value="root123"<!--spring整合后environments配置将废除MyBatispropertiesMyBatisproperties7.3.typeAliases(类型别名7.3.1mybatis支持别名<environment<transactionManagertype="JDBC"<dataSource<propertyname="driver"value="${jdbc.driver}"<propertyname="url"value="${jdbc.url}"<propertyname="username"value="${jdbc.userna
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 离婚协议书美国
- 医药研发合同2024年
- 个人私家车租赁合同
- 二手合法房屋买卖合同
- 电子身份认证系统开发授权协议
- 手房买卖学区房补充协议
- 电影拍摄聘用合同
- 企业年度庆典活动方案
- 单元主题二“沧海桑田”-地表形态的形成与演变-高中地理单元教学设计
- 买卖合同-油脂油料省间调拨合同8篇
- 苏教版八年级数学上册期末试卷及答案【完美版】
- 法院拍卖议价协议书
- 第11课 社会历史的主体-【中职专用】2024年中职思想政治《哲学与人生》金牌课件(高教版2023·基础模块)
- 六年级成长册课件
- 大学创意写作(葛红兵第二版)课件全套 第1-8章 科学活动与科技结构-广告文案与软文
- 2021年人教版八年级物理上册期末考试卷(完美版)
- TB 10009-2016 铁路电力牵引供电设计规范
- 2024年东南亚鸡蛋分级包装设备市场深度研究及预测报告
- 2023高考数学艺考生一轮复习基础讲义(学生版)
- 2MW-5MWh微网储能项目整体技术方案设计
- 围手术期中医护理
评论
0/150
提交评论