为了账号安全,请及时绑定邮箱和手机立即绑定

通过自动回复机器人学Mybatis---加强版

难度中级
时长 2小时43分
学习人数
综合评分9.77
214人评价 查看评价
9.9 内容实用
9.7 简洁易懂
9.7 逻辑清晰
  • mybatis获取statement其实是在statementHandler中,这是一个处理接口,有个prepare方法,返回Statement,这个方法是在BaseStatementHandler中实现的,statement是在instantiateStatement这个方法中获取的,这个方法是一个抽象方法,看它的PrepareStatementHandler实现,在这里边看到了connection.prepareStatement(sql,PreparedStatement.),也就是和JDBC类似的代码了,这就是分页拦截器要拦截的位置了。如何实现拦截呢?mybatis提供了相应的注解:@Intercept({@Signnature(type=StatementHandler.class),method=“prepare”,args={Connection.class}})(分别表示接口、方法、参数)
    查看全部
  • 在为Mybatis配置文件的sql标签传递参数时,sql语句的参数定义在dao方法的参数中. 然后在Mybatis的sql语句标签中使用parameterType或者parameterMap来定义传递的参数是什么类型. 然后在sql标签中直接使用#{dao方法参数名}获取参数值. 如果是map类型.则使用#{key}. 如果是model类型,则直接使用#{属性名} 如果参数不止一个,则应该把参数封装到map类型中即可. parameterMap一般用于调用存储过程时使用. parameterMap指定参数关联对象.然后配置文件中配置该关联对象: <parameterMap id="t" type=""> <parameter property="map的key" mode="IN/OUT(存储过程参数类型)" jdbcType=""/> //表示map中的某个属性名的值,对应存储过程的IN/OUT参数. </parameterMap> <insert id="" parameterMap="t" statementType="CALLABLE"> call 存储过程(?,?,?...) </insert> 然后在serviceImp中配置该map然后作为dao方法的参数.
    查看全部
  • Mybatis中接口式编程原理: 接口式编程: 条件:Mybatis的配置文件的namespace要设置为接口全限类名,接口的方法名对应配置文件语句标签的id. 如果不使用spring整合Mybatis,则调用时需要通过SqlSession.getMapper(接口.class)方法获取接口的引用(已有指向),因为接口是没有实现类的,无法实例化.然后再调用接口的方法. Imessage imessage=sqlSession.getMapper(Imessage.class); imessage.selectByPK(String indexid); 如果使用spring整合,则SqlSession交由spring管理. 直接使用@Autowired注解实例化接口的引用(spring会设置). 调用时直接根据接口的引用调用方法. 实际中:通常把dao接口的实现类直接与Mybatis的配置文件相关联,在ServiceImpl中声明dao的引用,使用spring的自动装配注解标识,然后直接调用dao接口的方法,Mybatis就会根据对应的接口名(即namespace)去到对应的配置文件去寻找对应的方法(即标签id). 直接调用接口的方法就能够找到对应配置文件的对应标签,是根据动态代理的原理.
    查看全部
  • 在使用拦截器开发分页的时候,拦截器的参数(Invocation)中保存了拦截器所拦截的所有对象,根据方法签名,这里仅仅只是对statementHandler中的关键信息进行处理,原理就是使用分页的sql替换拦截到的原始sql,拦截对象类型是StatementHandler,由方法签名决定的,StatementHandler将对配置文件中的sql语句进行处理(sql语句在MappedStatement中),但是在StatementHandler中,所有的对象属性均为受保护的以及私有的,首先想到的是通过反射读写信息,幸好Mybatis已经有一个类MetaObject,有个方法 MetaObject.forObject(statementHandler,__,__)可以对注解的拦截方法签名所对应的对象进行包装,这样我们得到的是被包装的statementHandler,它可以通过getValue("delegate.mappedStatement")方法,得到想要任何属性;当我们得到原始sql并拼接page参数的时候,通过原始sql对象的BoundSql.getParameterObject()便可以拿到page参数,这样分页sql就可以拼接完成了,但是还需要给page对象设置总页数,总页数是个难点,需要在原始的sql语句上拼接 select count(*),这里的问题在于sql是否能执行以及如何执行,需要connection对象,而此对象就是方法签名的参数,可以通过invocation.getArgs()[0]获得,然后通过connection.prepareStatement(countSql)将拼接好的sql语句进行预编译,并执行,就可以获得结果,由于此结果是统计总数的,只有一条记录,将此记录转换为int类型,并赋值给page对象。
    查看全部
  • 使用BoundSql的getParameterObject()的方法,里面的入参就是正常调用Mapper的方法,获取查询结果对象的的参数,这里就是Map<String,Object>parameter,通过BoundSql的getParameterObject()的方法,可以获得入参对象,由于这个对象是一个map,封装了xml配置文件中执行sql语句时候的参数,所以可以这个对象获得分页查询limit关键字所需要的(起始页)和(每页显示记录数)parameter.getKey().
    查看全部
  • 如何拿到配置文件中sql语句的id,注意metaObject的getValue()方法,ognl取值的顺序,否则什么也娶不到。
    查看全部
  • mybatis作业
    查看全部
  • mybatis接口式编程原理
    查看全部
  • mybatis parameterType数组
    查看全部
  • mybatis代理工厂以及执行sqlSession执行方法全过程源码分析
    查看全部
  • 四个部分
    查看全部
    0 采集 收起 来源:接口式编程

    2016-07-23

  • 本章的最终源码是利用拦截器实现分页。对于分页的简单实现,需要修改QueryService.java类中代码。增加语句"page.count();"获取limit两个参数dbIndex,dbNumber。否则页面加载不了数据,代码调试时会发现limit的两个参数为0。
    查看全部
  • 拦截确定对象的类中的参数与映射文件中的对应。所有属性均与配置文件中的属性对应。 通过mybatis中的mateobject类的.forObject()的就可以将statement处理器进行包装,其返回的对象还是mateobject类类型,但是这个时候,对象中就已经包含了配置文件中执行sql语句相关的所有属性。
    查看全部
  • 调用sqlsession.getMapper(定义的接口.class),就可以获得接口。然后就可以调用接口的方法了。
    查看全部
    0 采集 收起 来源:接口式编程

    2016-07-09

  • 好过分
    查看全部
    0 采集 收起 来源:店小二的自白

    2016-07-09

举报

0/150
提交
取消
课程须知
本课程的前导课程为《通过自动回复机器人学 Mybatis ---基础版》, 课程中案例的关联性极强,所以学习本课程唯一的条件就是学习过《通过自动回复机器人学 Mybatis ---基础版》
老师告诉你能学到什么?
1、 Mybatis 的接口式编程 2、实现分页查询 3、通过拦截器实现分页共通来了解 Mybatis 的拦截器 4、通过如何用数组做参数来了解 Mybatis 对类型的处理 5、 Mybatis 如何实现 jdbc 的 addBatch ,即批量插入

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!