[TOC]
mybatis注解的使用
为什么学习注解?学习注解有什么好处?学完能做什么?
1、能够读懂别人写的代码,特别是框架相关的代码
2、让编程更加简洁,代码更加清晰
注解作用
1、传递数据
2、标记
注解概念
Java 提供一种原程序中的元素关联任何信息和任何元数据的途径和方法
注解分类
注解3.png1、增删改查的注解
注解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语句先找缓存
mybatis逆向工程
把数据库中的表映射成Java文件
网友评论