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

[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文件

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 3,480评论 0 4
  • 1 引言# 本文主要讲解JDBC怎么演变到Mybatis的渐变过程,重点讲解了为什么要将JDBC封装成Mybait...
    七寸知架构阅读 70,872评论 36 964
  • 官方文档 简介 入门 XML配置 XML映射文件 动态SQL Java API SQL语句构建器 日志 一、 JD...
    拾壹北阅读 2,924评论 0 52
  • /01/ 秋天。阳光,风,与落叶。 国庆节的家庭聚会,大家聚在一起,欢声笑语,其乐融融,阳光灿烂,鲜花斗艳。 一盘...
    黄不甜大人阅读 163评论 0 0
  • 陌上花开,可缓缓归矣 今天,是2016年8月23日星期二,阴雨天。在全国大部分地区都在降雨的时候,不出意外的,我所...
    丁壮壮阅读 201评论 0 0
  • 文:赵苗 孟子说过一句话:“人之所以不学而能者,其良也;所不率而知者,其良知也。”意思是人有不用学习就能做事的本领...
    赵苗阅读 137评论 0 3