java注解:完成sql语句的拼接
2017-10-29 23:51
585 查看
刚学完注解之后可能大家还有一些问题,这里我们通过一个简单的sql语句拼接的方式,来进行一下注解的总结和学习:
首先,我们建立一个表,并且声明表中的字段:
在这里我们用到了两个注解,一个用来表示表,一个用来表示各字段,接下来进行自定义这两个注解:
最后,我们正式开始sql语句拼接的工作:
最终的运行结果为:
select* fromuserwhere 1=1andid=10
select* fromuserwhere 1=1anduserName=username
select* fromuserwhere 1=1andemail=wushao@126.com
首先,我们建立一个表,并且声明表中的字段:
package com.item; @Table("user") public class Filter { @Column("id") private int id; @Column("userName") private String userName; @Column("nickName") private String nickName; @Column("age") private int age; @Column("city") private String city; @Column("email") private String email; @Column("mobile") private String mobile; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getNickName() { return nickName; } public void setNickName(String nickName) { this.nickName = nickName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } }
在这里我们用到了两个注解,一个用来表示表,一个用来表示各字段,接下来进行自定义这两个注解:
package com.item; 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 value(); }
package com.item; 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 Table { String value(); }
最后,我们正式开始sql语句拼接的工作:
package com.item; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Test { public static void main(String[] args) { Filter f1=new Filter(); f1.setId(10);//表示查询id为10的用户 Filter f2=new Filter(); f2.setUserName("username");//模糊查询用户名为username Filter f3=new Filter(); 4000 f3.setEmail("wushao@126.com");//查询邮箱 Test test=new Test(); test.query(f1); String sql1=query(f1); String sql2=query(f2); String sql3=query(f3); System.out.println(sql1); System.out.println(sql2); System.out.println(sql3); } private static String query(Filter f){ StringBuilder s=new StringBuilder(); Class c=f.getClass();//反射机制 boolean table=c.isAnnotationPresent(Table.class);//判断是否存在该注解 if(!table) { return null; } Table annotationTable=(Table)c.getAnnotation(Table.class);//获取该注解 String tablename=annotationTable.value(); s.append("select* from").append(tablename).append("where 1=1"); //遍历所有的字段 Field[] field=c.getDeclaredFields();//获取到所有字段 for (Field field2 : field) { String fieldName=field2.getName(); boolean a=c.isAnnotationPresent(Column.class);//判断是否存在该注解 if(a) { continue; } // Column column=(Column)c.getAnnotation(Column.class); // String columname=column.value(); String MethodName="get"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1);//将属性名字的首字母大写,加上后面的部分,在前面加上get则得到getter方法的方法名 Object fieldValue=null; try { Method m = c.getMethod(MethodName); fieldValue=m.invoke(f);//利用java反射机制调用函数 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } if(fieldValue==null||(fieldValue instanceof Integer && (Integer)fieldValue==0)) { continue; } s.append("and").append(fieldName).append("=").append(fieldValue); } return s.toString(); } }
最终的运行结果为:
select* fromuserwhere 1=1andid=10
select* fromuserwhere 1=1anduserName=username
select* fromuserwhere 1=1andemail=wushao@126.com
相关文章推荐
- java反射获取注解并拼接sql语句
- 使用Java注解实现拼接sql语句的功能
- Java下拼接执行动态SQL语句
- Java下拼接执行动态SQL语句(转)
- JAVA自定义注解实现SQL语句自动生成DEMO(2)
- [SqlHandle] java mysql语法 sql语句拼接工具简类
- Java注解2--解析注解与注解反射生成SQL语句
- Mybatis基于注解结合Java编写Sql语句进行CRUD
- 仅仅用一条SQL语句就完成七八十行java代码的工作,并且大大节省资源开销
- java拼接sql语句例子
- JAVA注解的实际应用--生成sql语句
- JAVA中基于json串进行sql语句拼接实现select方法
- 使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句
- Java注解(Annotation)详解(四)——注解反射生成SQL语句
- Java中如何拼接sql或者其他含有变量语句
- plus/sql 快速完成java所需要的buffer语句
- 拼接sql语句把java日期类型插入到o…
- java用字符串拼接SQL语句的特殊字符转义问题
- JAVA注解 实现一个简单的sql语句生成器
- Java注解(Annotation)详解(四)——注解反射生成SQL语句