美文网首页
mybatis学习笔记二-注解、代理、逆向工程

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

作者: 大赟哥 | 来源:发表于2017-06-12 19:10 被阅读0次

    [TOC]

    mybatis注解的使用

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

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

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

    注解作用

    1、传递数据
    2、标记

    注解概念

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

    注解分类

    注解3.png

    1、增删改查的注解

    注解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);
    
        <!-- xml -->
        <!-- 商品表resultMap -->
        <resultMap type="Good" id="AllGoodResult">
            <id column="gid" property="gid" />
            <association property="type" javaType="Type" resultMap="AllTypeResult"></association>
        </resultMap>
        <!-- 商品类型表resultMap -->
        <resultMap type="Type" id="AllTypeResult">
            <id column="typeid" property="typeid" />
        </resultMap>
    
        // 接口
        @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语句创建器

    注解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语句先找缓存

    缓存.png

    mybatis逆向工程

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

    相关文章

      网友评论

          本文标题:mybatis学习笔记二-注解、代理、逆向工程

          本文链接:https://www.haomeiwen.com/subject/offrqxtx.html