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

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

难度中级
时长 2小时43分
学习人数
综合评分9.77
214人评价 查看评价
9.9 内容实用
9.7 简洁易懂
9.7 逻辑清晰
  • SqlSession.selectList容易出错
    查看全部
    0 采集 收起 来源:接口式编程

    2018-11-09

  • 总结下自己的理解,大体上就是mybatis在运行前获取配置文件中命名空间对应的接口,并生成代理工程map集合。当用户把对应接口传入时候,从工厂集合中找到对应的代理工厂,从代理工厂中生成代理类的实例返回给用户调用。

    而代理类里面实现接口方法是靠一个很巧妙的方法,他先获取调用方法名和类名,把类名+方法名就是对应配置文件里面的对应sql语句。然后代理方法就判断这个sql是什么类型的(查找、增加、删除),并用sqlSession对应方法调用该sql语句,最后把返回值返回给用户。

    查看全部
  • 过程过程啊

    查看全部
  • mybatis拦截器需要具备的功能:

    1、拦截需要拦截的操作

    2、完成一种具体的功能

    3、工作完成后将完成结果移交

    https://img1.sycdn.imooc.com//5b18e9490001ed2c03400201.jpg

    https://img1.sycdn.imooc.com//5b18e9d70001042103160187.jpg

    查看全部
  • 接口式编程作业:

    https://img1.sycdn.imooc.com//5b16791200010c8807480424.jpg

    查看全部
  • 解决接口式编程的几个问题:

    1、没有实现类的接口为什么能执行定义的方法?

    通过动态代理的方式。

    https://img1.sycdn.imooc.com//5b16485b0001eb3c07730436.jpg

    2、mybatis如何知道调用的哪条sql语句?(MapperProxy.invoke()==sqlqSession.selectList())

    https://img1.sycdn.imooc.com//5b164a650001639906300411.jpg

    https://img1.sycdn.imooc.com//5b164ab40001845407730413.jpg

    3、用接口接返回的对象不报错(IMessage iMessage = Proxy.neProxyInstance())?

    泛型在起作用,mybatis在返回对象时已经做了强制类型转换,无需自己手动转换

    查看全部
  • mybatis接口式编程:

    如果没有使用接口式编程,需要在dao层手动调用SqlSession的方法直接访问xml文件。

    接口式编程则不然,建立一个对应xml的接口,通过SqlSession.getMapper()方法进行实例化,可以直接使用该接口的方法。

    接口式编程主要结合spring一起使用,数据源管理将由spring托管,db层将消失,SqlSessin将托管给spring,组织对象的代码移交给service层,通过SqlSession实现接口式编程的代码由spring实现,dao层消失,接口将成为正式的dao层,dao层只有接口文件和配置文件。

    查看全部
    0 采集 收起 来源:接口式编程

    2018-06-05

  • 查看一个接口的所有实现类:选中接口名,Ctrl+T 或者选中该接口名,按F4,即 Open Type Hierarchy 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//调用代理实例的处理程序) --} 解决了三个问题: 1、为什么只定义了一个接口,没有实现类的情况下,接口方法可以被调用,因为动态代理。 2、为什么sqlSession.getMapper(.class)可以根据传入的参数,返回一个对应的类型,因为泛型。 3、Mybatis加载文件时,利用namespace加载了一个class,然后把这个class与代码中传入接口的class进行匹配,方法执行所需要的信息就是来自于已经匹配成功的配置文件中,当结果与配置文件对应上后,调用接口的方法执行sql语句。

    查看全部
  • 接口式编程mybatis Sql配置文件的namespace名称对应接口的权限类名. Sql配置文件中对应的sql语句的标签的id对应接口的方法名. 接口中方法的参数对应sql语句标签的parameterType类型. 调用接口:通过sqlSession.getMapper(接口.class)获取到接口的引用(并没有实例化接口,方法也没有被实现,但是却可以调用接口中的方法,是因为有动态代理),再调用接口中的方法即可. public List<Command> getCommand(){    SqlSession sqlSession=Util.getSqlSession();      ICommand com=sqlSession.getMapper(ICommand.class);      List<Command> list=com.getCommand();          return list;  }

    查看全部
    0 采集 收起 来源:接口式编程

    2018-06-02

  • 这三个方法的执行顺序

    setProperties(Properties properties)拿到属性值

    plugin(Object target)对要拦截对象进行过滤

    intercept(Invocation invocation)执行拦截

    查看全部
  •  而以这种形式配置,就可以通过这个方法拿到属性值

    private String test;

            @Override

    public void setProperties(Properties properties) {

    this.test = properties.getProperty("test");

    // TODO Auto-generated method stub

    }


    查看全部
  • 当在配置文件中这样配置plugins标签时

    <plugins>

        <plugin interceptor="com.kingback.interceptor.PageInterceptor" />

      </plugins>

    拦截器中的setProperties()方法没用



    查看全部
  • 需要了解什么

    查看全部
  • 拦截器注意事项

    查看全部
  • 拦截器要做什么

    查看全部

举报

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

微信扫码,参与3人拼团

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

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