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

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

难度中级
时长 2小时43分
学习人数
综合评分9.77
214人评价 查看评价
9.9 内容实用
9.7 简洁易懂
9.7 逻辑清晰
  • 课后作业:
    查看全部
  • IMessage imessage=sqlSession.getMapper(IMessage.class);//获取到的就是代理实例 messageList =imessage.queryMessageList(parameter);//代理实例执行接口方法时,就会触发调用处理程序,也就是第三个参数对象的invoke()方法,MapperProxy是实现了InvocationHandler接口的 MapperProxyFactory.newInstance(MapperProxy<T> mapperProxy){ --return (T) Proxy.newProxyInstance(mapperInterface.getClassLoader()//通过接口获取类加载器,new Class[]{mapperInterface}//代理类实现的接口数组,mapperProxy//调用代理实例的处理程序) --} 解决了三个问题: ①为什么只定义了一个接口,没有具体实现的情况下,接口方法可以被调用,因为动态代理。 ②为什么sqlSession.getMapper(.class)可以根据传入的参数,返回一个对应的类型,因为泛型。 ③Mybatis加载文件时,利用namespace加载了一个class,然后把这个class与代码中传入接口的class进行匹配,方法执行所需要的信息就是来自于已经匹配成功的配置文件中,当结果与配置文件对应上后,调用接口的方法执行sql语句。
    查看全部
  • 总结: imessage.queryMessageList(parameter)=sqlSession.selectList(namespace.id,parameter)
    查看全部
  • 调用invoke()方法时,是如何知道要执行的sql语句是什么样子的嘞?
    查看全部
  • 没有实现类的接口,为什么能执行定义的方法?(自行查看mybatis源码) 主要是通过动态代理来实现的 具体细节如下图
    查看全部
  • 解析配置文件中sql语句的全过程--XMLStatementBuilder下的parseStatementNode()方法解析。
    查看全部
  • mapper.xml配置文件解析的全过程
    查看全部
  • 解析指定的mapperr的esource资源具体的实现代码截图
    查看全部
  • 如何通过主配置文件读取<mappers>下的<mapper>中的resource资源路径:截图为具体源码
    查看全部
  • 将配置文件中的<congfiguration>节点传递给XMLConfigBuilder的parseConfiguration(XNode)方法来解析,截图是parseConfiguration解析mybatis配置文件的全过程,阅读源码的方式递归阅读。
    查看全部
  • 在jdbc中批量插入可以遍历循环一次次插入边执行,这样效率很不好,所以使用addBatch(),然后执行executeBatch(),那么在mybatis中如何实现批量插入的呢?mybatis是要自己在配置文件配置sql语句,所以根据mysql数据库的insert语句拼接出相应的sql,insert into 表名 values(数据1,数据2…),(数据1,数据2…),…即可,所以传入的参数是list,最后forEach标签循环出来数据拼接sql语句 ————————<foreach collection=”lsit” item=”item” separator="," > —————————(#{item.content},#{item.commandId}) ---------------</foreach>
    查看全部
    0 采集 收起 来源:实现批量新增

    2018-03-22

  • 先注册,在写实现
    查看全部
    0 采集 收起 来源:拦截器总结

    2016-06-23

  • @PageInterceptor.java相关代码——(中): if(id.matches(”.+ByPage$”)){ BoundSql boundSql=statementHandler.getBoundSql(); //原始的SQL语句,但是当中的#{}改为? String sql=boundSql.getSql(); //查询总条数的SQL语句 String countSql=”select count(*) from (”+sql+”)a”; Connection conn=(Connection) invocation.getArgs()[0]; PreparedStatement countStatement= conn.prepareStatement(countSql); /** * 解决当中的#{}改为?后的参数传递问题 */ ParameterHandler parameterHandler=(ParameterHandler) metaObject.getValue(”delegate.parameterHandler”); parameterHandler.setParameters(countStatement); ResultSet rs=countStatement.executeQuery(); //获取的是Dao层中的“parameter”参数 Map<?, ?> parameter=(Map<?, ?>) boundSql.getParameterObject(); Page page=(Page) parameter.get(”page”); if(rs.next()){//因为只有一条数据,所以不需要while循环 page.setTotalNumber(rs.getInt(1)); } //改造后带分页查询的SQL语句 String pageSql=sql+” limit “+page.getDbIndex()+”,”+page.getDbNumber(); metaObject.setValue(”delegate.boundSql.sql”, pageSql); } return invocation.proceed(); }
    查看全部
    0 采集 收起 来源:拦截器总结

    2018-03-22

  • @PageInterceptor.java相关代码——(下): @Override public Object plugin(Object target) { System.out.println(test); return Plugin.wrap(target, this); } @Override public void setProperties(Properties properties) { this.test=properties.getProperty(”test”); } } Ps1:执行顺序:setProperties—>plugin—>[intercept] Ps2:若因为某些原因获取不到想要调用的方法等,可以利用反射思想获取。 Ps3: 两个特殊的符号’^’和’$’。他们的作用是分别指出一个字符串的开始和结束。例子如下: “^The”:表示所有以”The”开始的字符串(”There”,”The cat”等); “of despair$”:表示所以以”of despair”结尾的字符串; “^abc$”:表示开始和结尾都是”abc”的字符串——呵呵,只有”abc”自己了; “notice”:表示任何包含”notice”的字符串。 附:”ab+”:表示一个字符串有一个a后面跟着至少一个b或者更多。
    查看全部
    0 采集 收起 来源:拦截器总结

    2018-03-22

  • @PageInterceptor.java相关代码——(上): @Intercepts({ @Signature(args = { Connection.class }, method = “prepare”, type = StatementHandler.class) }) public class PageInterceptor<V, K> implements Interceptor { private String test; @Override public Object intercept(Invocation invocation) throws Throwable { /** * 注解里写的参数封装成invocation,通过invocation获取,最后记得invocation.proceed()返回以上操作的代理对象并继续执行。 */ //getTarget():return Plugin.wrap(target, this); StatementHandler statementHandler=(StatementHandler) invocation.getTarget(); //通过反射获取对象 MetaObject metaObject=MetaObject.forObject(statementHandler, SystemMetaObject.DEFAULT_OBJECT_FACTORY, SystemMetaObject.DEFAULT_OBJECT_WRAPPER_FACTORY, new DefaultReflectorFactory()); //通过RoutingStatementHandler中的delegate匹配对应的BaseStatementHandler MappedStatement mappedStatement=(MappedStatement) metaObject.getValue(”delegate.mappedStatement”); //配置文件中SQL语句的ID String id=mappedStatement.getId();
    查看全部
    0 采集 收起 来源:拦截器总结

    2018-03-22

举报

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

微信扫码,参与3人拼团

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

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