Java注解(三)
上一篇了解了自定义注解的使用,不过里面的例子没有多大使用价值,这一回来个有用点的Demo。
目标:将实体bean保存到数据库
先来定义一个实体注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Entity {
String getTableName();
}
这个注解可用在类上,它有一个变量参数getTableName。
其实意义很明显,就是一个实体类对应一张数据库的表,通过Entity注解将类和数据库表名关联起来
那么,通过什么将类的参数和数据库表中的列关联起来呢?再来定义一个注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
String getName();
}
有了Column注解,类里面的属性就和表中的列关联起来了。
下面来看看POJO中怎么用这两个注解:
@Entity(getTableName = "user")
public class User {
@Column(getName = "user_id")
private String id;
@Column(getName = "user_name")
private String name;
@Column(getName = "user_age")
private int age; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}
通过Entity和Column注解,就将一个实体bean和一张数据库表连接起来了。很多ORM映射就是采取这种方式实现的。
最后,来感受一下注解给我们带来的便利,来个方法见证下~~
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement; public class Session {
public static void main(String[] args) {
Session session = new Session();
System.out.println(session.getInsertSql(new User()));
} //在实际项目中,你可以save(obj)方法来保存一个bean
public void save(Object obj) {
// get a connection
//PreparedStatement pstmt = getStatement(con, obj);
//pstmt.execute();
} //得到PreparedStatement
public PreparedStatement getStatement(Connection con, Object obj)
throws Exception {
PreparedStatement pstmt = con.prepareStatement(getInsertSql(obj));
Class<?> c = obj.getClass();
Field[] fs = c.getDeclaredFields();
for (int i = 0; i < fs.length; i++) {
fs[i].setAccessible(true);
pstmt.setObject(i + 1, fs[i].get(obj));
}
return pstmt;
} //insert into tableName(ziduan1,ziduan2...) values(?,?...)
public String getInsertSql(Object obj) {
StringBuilder s = new StringBuilder();
s.append("insert into "); Class<?> c = obj.getClass();
String tableName = c.getSimpleName();//类名,不包含包名 User
Entity entity = (Entity) c.getAnnotation(Entity.class);
if (entity != null) {
tableName = entity.getTableName();
}
s.append(tableName).append("(");
Field[] fs = c.getDeclaredFields(); for (int i = 0; i < fs.length; i++) {
String fieldName = fs[i].getName();
Column column = fs[i].getAnnotation(Column.class);
if (column != null) {
fieldName = column.getName();
}
s = i == 0 ? s.append(fieldName) : s.append(",").append(fieldName);
}
s.append(") values").append(getString(fs.length));
return s.toString(); } //得到(?,?,?,...?,?)
private String getString(int length) {
StringBuilder s = new StringBuilder();
s.append("(");
for (int i = 0; i < length; i++) {
s = i == 0 ? s.append("?") : s.append(",?");
}
s.append(")");
return s.toString();
}
}
OK,That's all!
Java注解(三)的更多相关文章
- 19.Java 注解
19.Java注解 1.Java内置注解----注解代码 @Deprecated //不推荐使用的过时方法 @Deprecated ...
- 框架基础——全面解析Java注解
为什么学习注解? 学习注解有什么好处? 学完能做什么? 答:1. 能够读懂别人写的代码,特别是框架相关的代码: 2. 让编程更加简洁,代码更加清晰: 3. 让别人高看一眼. spring.mybati ...
- Java注解教程及自定义注解
Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...
- Java注解实践
Java注解实践 标签 : Java基础 注解对代码的语意没有直接影响, 他们只负责提供信息给相关的程序使用. 注解永远不会改变被注解代码的含义, 但可以通过工具对被注解的代码进行特殊处理. JDK ...
- java 注解Annotation
什么是注解? 注解,顾名思义,注解,就是对某一事物进行添加注释说明,会存放一些信息,这些信息可能对以后某个时段来说是很有用处的. java注解又叫java标注,java提供了一套机制,使得我们可以对 ...
- Java注解知识点摘抄
Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...
- Java - 注解 (Annotation)
Java - 注解 (Annotation) 一.基本的 Annotation > 使用 Annotation 时要在其前面增加 @符号,并把该 Annotation 当成一个修饰符 ...
- java注解(基础)
一.认识注解 1.注解的定义: java提供了一种原程序中的元素关联任何信息和元数据的途径和方法. 2.学习注解的目的: (1)能够读懂别人写的代码,特别是框架相关的代码(框架中使用注解是非常方便的) ...
- Java 注解 入门
这几天在学习Spring3.x,发觉现在许多框架都用上了java注解功能,然后自己就对java注解这方面初步学习了一下. 首先,注解跟注释不是一个意思,也根本不是同一个事物. 注释就是我们平常平常中对 ...
- 使用Java注解来简化你的代码
注解(Annotation)就是一种标签,可以插入到源代码中,我们的编译器可以对他们进行逻辑判断,或者我们可以自己写一个工具方法来读取我们源代码中的注解信息,从而实现某种操作.需要申明一点, ...
随机推荐
- 使用Commons Email发送邮件
Commons Email是apache commons库中的一个组件,对java mail做了一些个封装,提供能为简化的API供开发者使用.它依赖于javax.mail . 首先下载commons- ...
- Java中的split和join
Javascript中的用于字符串和数组之间转换的split和join函数使用起来非常方便,在Java中也有这两个函数,只不过join是在apache commons的lang库里实现的. impor ...
- (2019)OCP 12c 062考试题库出现大量新题-4
4.Which four are true about creating and running a remote database scheduler jobs? A) A credential i ...
- jQuery基础笔记(1)
day54 参考:https://www.cnblogs.com/liwenzhou/p/8178806.html 1. 为什么要学jQuery? MySQL Python ...
- sql语句_2
数据表如下 一个user_id对应多个user_name,现在要求是:如果某个用户对应的user_name中存在一个a,打印user_id,a出来:如果不存在,打印user_id,0.打印时候user ...
- Oracle 数据类型 与C#映射关系
大部分类型的对应关系:原文:http://2143892.blog.51cto.com/2133892/499353 序号 Oracle数据类型 .NET类型 GetOracleValue类型 DbT ...
- Centos下用yum命令按照jdk
一.查看是否已经安装了JDK #查看本机是否已经安装了jdk $ sudo yum list installed | grep java java--openjdk.x86_64 :.el7_6 @u ...
- Java之Spring Boot学习
1.如何配置pdf.xls页面解析器.2.如何整合SpringBoot+JPA+Session+Redis配置.3.SpringBoot整合Mybatis之事务用法.4.JUnit Test单元测试用 ...
- javascript数据结构与算法--二叉树(插入节点、生成二叉树)
javascript数据结构与算法-- 插入节点.生成二叉树 二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * ...
- Intellij-插件安装-安装CodeGenerator插件并且添加Builder模板
Intellij IDEA 2018.1.2版本 CodeGenerator插件地址:https://github.com/lotabout/CodeGenerator/releases 步骤一:安装 ...