mybatis学习笔记二-注解、代理、逆向工程

[TOC]

mybatis注解的使用

为什么学习注解?学习注解有什么好处?学完能做什么?

1、能够读懂别人写的代码,特别是框架相关的代码

2、让编程更加简洁,代码更加清晰

注解作用

1、传递数据
2、标记

注解概念

Java 提供一种原程序中的元素关联任何信息和任何元数据的途径和方法

注解分类

mybatis学习笔记二-注解、代理、逆向工程_第1张图片
注解3.png

1、增删改查的注解

mybatis学习笔记二-注解、代理、逆向工程_第2张图片
注解1.png

这些注解中的每一个代表了执行的真实SQL。它们每一个都使用字符串数组(或单独的字符串)。如果传递的是字符串数组,它们由每个分隔它们的单独空间串联起来。这就当用Java代码构建SQL 时避免了“丢失空间”的问题。然而,如果你喜欢,也欢迎你串联单独的字符串。属性:value,这是字符串 数组用来组成单独的SQL语句。

    @Select("SELECT * FROM user WHERE username=#{username} AND password=#{password}")
    User login(User user);

2、映射的注解

    // 接口
    @ResultMap("dao.GoodMapper.AllGoodResult")
    @Select("SELECT * FROM Good WHERE gid=#{value}")
    Good selectGoodByGid(int gid);
    
    
    
        
        
    
    
    
        
    
    // 接口
    @Results(value = {
        @Result(column = "tid", property= "typeid"),
        @Result(column = "tname", property= "typename")
    })
    @Select("select typeid as tid,typename as tname from type where typeid=#{value}")
    Type selectType1(int typeid);

其它、参数和SQL语句创建器

mybatis学习笔记二-注解、代理、逆向工程_第3张图片
注解2.png

自定义注解

开发步骤

1、创建一个@interface
2、String value();抽象方法可以接收数据
3、使用元注解,描述自定义注解

4、使用元注解,描述自定义注解

  • @Target指定注解可以添加在哪里
    -ElementType.TYPE:可在类和接口上面
    -ElementType.METHOD:可在方法上
    -ElementType.FIELD:可在属性上

5、@Retention指定注解在什么时候用
-RetentionPolicy.RUNTIME:注解保留到运行时
-RetentionPolicy.ClASS:注解保留到Class文件中
-RetentionPolicy.SOURCE:注解保留到java编译时期

6、@inherited可以被继承

代理模式

任意对象都可以统计它的运行之间

动态代理:

优点:可以不修改原来对象的基础上添加新功能

1、jdk代理
2、cglib

JDK动态代理

1、被代理类必须实现一个接口,任意接口

public class Bus implements Runnable{

    @Override
    public void run() {
        System.out.println("bus启动");
        
    }

}

2、创建一个类实现invocationHandler,该类用来对象代理对象进行方法的增强

public class TimeInvocation implements InvocationHandler{
    
    private Object target;//被代理对象
    public TimeInvocation(Object target){
        this.target = target;
    }

}

3、在invoke()方法中调用被代理对象的方法,并添加增强的代码

    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        long time = System.currentTimeMillis();
        //被调用代理的方法
        method.invoke(target,args);
        long time1 = System.currentTimeMillis();
        System.out.println(time1 - time);
        return null;
    }

4、通过Proxy.newProxyInstance(ClasLoader, Class, InvovationHandler)创建代理对象
调用代理对象的方法

public class ProxyTest {
    Bus bus = new Bus();
    TimeInvocation invocation = new TimeInvocation(bus);
    Class cla = bus.getClass();
    Runnable s1= (Runnable)Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(), time);
        s1.run();
}

mybatis缓存的使用

一级缓存:
默认是开启状态
只要session不关闭,都会从数据库中获取数据
同一个sqlsession,执行相同的sql语句先找缓存

二级缓存:默认是关闭状态
特点:相同sql找缓存
同一个namespace下的sqlsession执行sql语句先找缓存

mybatis学习笔记二-注解、代理、逆向工程_第4张图片
缓存.png

mybatis逆向工程

把数据库中的表映射成Java文件

你可能感兴趣的:(mybatis学习笔记二-注解、代理、逆向工程)