SQL 冗余 使用StringBuffer 中的append 追加拼成字符串

https://blog.csdn.net/qq_41993438/article/details/82707859

在没有使用Hibernate框架的时候 ,每次在编写连接数据库查询的时候,都一直Ctrl +C,Ctrl +V 使用很多重复的sql语句,比如数据库的增删改查,造成代码的 数量冗余了很多,现在我整理一些 简化后适用的 ,我遇到的一些简单的方法,第一次写博客,如果大家发现有错误,请指正,不胜感激(排版很丑,勿嫌弃):

*适用于所有的 表格 的 SQL 语句的增删改查 简化
B话不多说,我使用的jdk版本为 1.8 的,不存在什么兼容性的问题
相信大家也很烦,在对每个数据库表格进行操作的时候,对每一个人都是,重复的编写select ,insert ,update ,delete 语句。我的思路就是将这些方法重复的部分抽取出来,编写成一个适用于对各个表格的操作,因为StringBuffer 的方法类型是 线程安全 ,所以就使用它来给大家演示了,使用StringBuilder 也是可以的 。

1.创建的数据库数据表名务必 和 javabean 的 类名相同 ,里面的属性名称和属性值一定要对应得上
例如:在数据库中创建了 Login 表,里面包含 count (varchar类型 ),那么在javabean中也要创建一个 user 类 里面包含 count(String类型)。

代码块
public class Login {

private Integer id;
private String count;
private String password;

public Integer getId() {
    return id;
}
public void setId(Integer id) {
    this.id = id;
}
public String getCount() {
    return count;
}
public void setCount(String count) {
    this.count = count;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
public Login(Integer id,String count, String password) {
    super();
    this.id = id;
    this.count = count;
    this.password = password;
}

public Login(String count, String password) {
    super();
    this.count = count;
    this.password = password;
}
public Login() {}
}

这个就是我创建的对应数据库中的实体类(也就是javabean)

具体的操作:
1.使用Object 对象接收 传递过来的类名 ,通过jdk自带的 reflect 类 ,进行操作,我将这个方法设置成了私有类型,通过同类中的public 方法去调用

代码块 insert
private String generateInsert(Object entity) {
StringBuffer sql = new StringBuffer();
sql.append(“insert into “);
//entity.getClass().getName();是获得类的完整路径 比如com.dao.commonDao
//entity.getClass().getSimpleName();获得类的简单路径 比如 commonDao
sql.append(entity.getClass().getSimpleName());
//sql.delete(sql.length()-2, sql.length()); //适当运用,对拼接好的类名进行修改
sql.append(”(”);
Field[] fields = entity.getClass().getDeclaredFields(); //获得类的所有属性名
for(Field field : fields) {
sql.append(field.getName()+",");//追加 类的名称
}
//删除拼接后的最后一个字符 ‘,’
sql.deleteCharAt(sql.length()-1);
sql.append(") values (");
for(Field field : fields) {
try {
field.setAccessible(true);//强制获得 属性值
if((field.getType().getSimpleName().equals(“String”) || field.getType().getSimpleName().equals(“Date”)) && field.get(entity)!=null)
{
sql.append("’"+field.get(entity)+"’,");
}else
{
sql.append(field.get(entity)+",");
}
}catch(IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
//删除拼接后的最后一个字符 ‘,’
sql.deleteCharAt(sql.length()-1);
sql.append(");");
return sql.toString();
}
public String insert(Object entity) {
return generateInsert(entity);
}

我创建一个类 ,类型为 CommonDao ,将方法放入 这个类中

public static void main(String[] args) {
Login login =new Login(1,“张三”,“123456”);
CommonDao CD = new CommonDao();
System.out.println(CD.insert(login));
}

运行结果为:
insert into Login(id,count,password) values (1,’张三’,’123456’);

代码块 delete
//删除 表中的数据
private String generateDelete(Object entity) {
StringBuffer sql = new StringBuffer();
sql.append("delete from “);
sql.append(entity.getClass().getSimpleName()+” where ");
//获得所有属性
Field[] fields = entity.getClass().getDeclaredFields();

    for(Field field :fields) {
        try {
            field.setAccessible(true);//强制获得 属性值
            if((field.getType().getSimpleName().equals("String") || field.getType().getSimpleName().equals("Date")) && field.get(entity)!=null) 
            {
                sql.append(field.getName()+" = '" + field.get(entity) +"' and ");
            }else if( field.get(entity) !=null )
            {
                sql.append(field.getName()+" = " + field.get(entity) +" and ");
            }
        }catch(IllegalArgumentException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    sql.delete(sql.length()-4, sql.length());
    sql.append(";");
    return sql.toString();
}
public String delete(Object entity) {
    return generateDelete(entity);
}

public static void main(String[] args) {
//删除账号为张三的 数据
Login login =new Login(null,“张三”,null);
CommonDao CD = new CommonDao();
System.out.println(CD.delete(login));
}

运行结果为:
delete from Login where count = ‘张三’ ;

代码块 select
//查询表中的数据
private String generateSelect(Object entity) {
StringBuffer sql = new StringBuffer();
sql.append(" select * from “);
sql.append(entity.getClass().getSimpleName()+” where “);
//获得所有属性
Field[] fields = entity.getClass().getDeclaredFields();
for(Field field :fields) {
try {
field.setAccessible(true);//强制获得 属性值
if((field.getType().getSimpleName().equals(“String”) || field.getType().getSimpleName().equals(“Date”)) && field.get(entity) != null)
{
sql.append(field.getName()+” = ‘" + field.get(entity) +"’ and “);
}else if( field.get(entity) !=null )
{
sql.append(field.getName()+” = " + field.get(entity) +" and “);
}
}catch(IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
sql.delete(sql.length()-4, sql.length());
sql.append(”;");
return sql.toString();
}
public String select(Object entity) {
return generateSelect(entity);
}
public static void main(String[] args) {
//查找数据库中的张三字段
Login login =new Login(null,“张三”,null);
CommonDao CD = new CommonDao();
System.out.println(CD.select(login));
}

运行结果为:
select * from Login where count = ‘张三’ ;

代码块 update
private String generateUpdate(Object NewEntity,Object OldEntity) {
StringBuffer sql = new StringBuffer();
sql.append(" update “);
sql.append(NewEntity.getClass().getSimpleName()+” set “);
//获得所有属性
Field[] Newfields = NewEntity.getClass().getDeclaredFields();
//获得所有属性
Field[] Oldfields = OldEntity.getClass().getDeclaredFields();
for(Field field :Newfields) {
try {
field.setAccessible(true);//强制获得 属性值
if((field.getType().getSimpleName().equals(“String”) || field.getType().getSimpleName().equals(“Date”)) && field.get(NewEntity)!=null)
{
sql.append(field.getName()+” = ‘" + field.get(NewEntity) +"’ , “);
}else if( field.get(NewEntity) !=null )
{
sql.append(field.getName()+” = " + field.get(NewEntity) +" , “);
}
}catch(IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
sql.delete(sql.length()-2, sql.length());
sql.append(” where ");

    for(Field field :Oldfields) {
        try {
            field.setAccessible(true);//强制获得 属性值
            if((field.getType().getSimpleName().equals("String") || field.getType().getSimpleName().equals("Date")) && field.get(OldEntity)!=null) 
            {
                sql.append(field.getName()+" = '" + field.get(OldEntity) +"' and ");
            }else if( field.get(OldEntity) !=null )
            {
                sql.append(field.getName()+" = " + field.get(OldEntity) +" and ");
            }
        }catch(IllegalArgumentException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    sql.delete(sql.length()-4, sql.length());
    sql.append(" ; ");
    return sql.toString();
}
public String update(Object NewEntity,Object OldEntity) {
    if(NewEntity.getClass().getSimpleName().equals(OldEntity.getClass().getSimpleName())) 
    {
        return generateUpdate(NewEntity,OldEntity);
    }else 
    {   
        return new String("数据类型不匹配");
    }
}
public static void main(String[] args) {
    //修改 count 为张三的字段数据
    Login Newlogin =new Login(null,"张三","123456");
    Login Oldlogin1 =new Login(null,"张三",null);
    CommonDao CD = new CommonDao();
    System.out.println(CD.update(Newlogin,Oldlogin1));
}

运行结果:
update Login set count = ‘张三’ , password = ‘123456’ where count = ‘张三’ ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值