Mybatis补充知识

一、形参和实参

  • 形参与实参 参数传递的是值,和名称无关
  • 当mybatis传的是单值,一个对象,不是集合,mybatis就利用下标取值

二、代理模式

代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.
这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法
在这里插入图片描述

1.为啥会有代理对象?

自己想要一个玩意,没有,想要搞别人的

2.代理对象是干啥的?

用户调用的是接口,程序实现的接口的实现类,但是如果 接口中没有/私密实现类,导致我自己没法用,那咋整,就是靠代理对象,自己搞一个实现类

2.1那自己咋搞一个实现类????

继承或者实现

3.常见动态代理方式

3.1JDK动态代理

特点:

  1. 要求被代理者必须有接口,代理对象是目标对象的实现类或者兄弟类
  2. JDK动态代理自身提供的
3.2 CGLIB动态代理

特点:

  1. 不管被代理者是否有接口,都可以为其创建代理对象,代理对象是目标对象的子类
  2. cglib需要手动导入jar包
  3. spring为了创建代理对象方便,自身自动添加jar包–自动添加依赖

4.代理对象创建

接口无法直接创建对象,一旦可以直接调用方法—实例化对象,那就是自动动态生成了代理对象(至于用啥方法方式创建,具体看不同的场景)

DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
1.DeptMapper是一个接口. 接口不能直接实例化对象!!!
2.获取的DeptMapper是JDK在内部动态为接口生成的代理对象.
3.调用代理对象功能上与接口一致.

private SqlSessionFactory sqlsessionfactory;
    @BeforeEach
    public void sessionTest() throws Exception{
        String resource = "mybatis/mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlsessionfactory = new SqlSessionFactoryBuilder(). build(inputStream);
    }
    @Test
    public void deptShowAll(){
        SqlSession sqlSession = sqlsessionfactory.openSession(true);
        DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
        List<Dept> deptlist = deptMapper.DshowAll();
        System.out.println(deptlist);
        sqlSession.close();
    }
4.1 如何查询他是个啥东西

.getClass()利用这个方法,获取它的…

getClass()返回Class类型的对象

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值