根据java bean自动生成insetsql 可以根据注解修改表名和字段

sql生成工具类不加@SqlField、@SqlTable 默认以类名和字段生成,用法 :

@SqlTable("t_table")
@SqlField(defaultVal = "Field",defaultType = SqlType.Int)
import com.act.violationsdatasyn.config.sqlDao.SqlField;
import com.act.violationsdatasyn.config.sqlDao.SqlTable;
import com.act.violationsdatasyn.config.sqlDao.SqlType;
import com.act.violationsdatasyn.vo.Overview;
import org.apache.commons.lang.StringUtils;
import org.springframework.util.CollectionUtils;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @Auther: gy
 * @Date: 2020/7/29 10:48
 * @Description:
 */
public class SqlGenerateUtils {

    public static void main(String[] args) {
        Overview o=new Overview();
        o.setSource("12");
        List<Overview> ls=new ArrayList<>();
        ls.add(o);
        ls.add(o);
        String s = generateInset(ls,Overview.class);
        System.out.println(s);
    }

    /**
     * 根据对象生成sql
     * 对象表名字段自定义 需加@SqlTable、@SqlField
     * @Author gy
     * @Date  2020/8/11
     */
    public static<T> String generateInset(T t) {
        StringBuilder sqlSb = new StringBuilder("INSERT INTO ");
        Class<?> aClass = t.getClass();
        String value = "";
        SqlTable sqlTableAnnotation = aClass.getAnnotation(SqlTable.class);
        if(sqlTableAnnotation!=null && StringUtils.isNotBlank(sqlTableAnnotation.value())){
            value = sqlTableAnnotation.value();
        }else{
            value = aClass.getName();
        }
        sqlSb.append(value);
        Field[] declaredFields = aClass.getDeclaredFields();

        String fieldSql = generateInsetField(declaredFields);
        sqlSb.append(fieldSql);

        String val = generateInsetValue(t, declaredFields);
        sqlSb.append(val);

        return sqlSb.toString();
    }

    /**
     * 根据对象生成sql
     * 对象表名字段自定义 需加@SqlTable、@SqlField
     * @Author gy
     * @Date  2020/8/11
     */
    public static<T> String generateInset(List<T> ls, Class<T> aClass) {
        if(CollectionUtils.isEmpty(ls)) return null;
        StringBuilder sqlSb = new StringBuilder("INSERT INTO ");
        String value = "";
        SqlTable sqlTableAnnotation = aClass.getAnnotation(SqlTable.class);
        if(sqlTableAnnotation!=null && StringUtils.isNotBlank(sqlTableAnnotation.value())){
            value = sqlTableAnnotation.value();
        }else{
            value = aClass.getName();
        }
        sqlSb.append(value);
        //生成字段部分------------------------------------------------
        Field[] declaredFields = aClass.getDeclaredFields();

        String fieldSql = generateInsetField(declaredFields);
        sqlSb.append(fieldSql);

        //生成value部分----------------------------------------------
        String val = generateInsetValue(ls,declaredFields);
        sqlSb.append(val);

        System.out.println(sqlSb.toString());
        return sqlSb.toString();
    }

    private static <T> String generateInsetField(Field[] declaredFields) {
        StringBuilder sqlSb = new StringBuilder();
        sqlSb.append(" (");
        for(Field f:declaredFields){
            try {
                f.setAccessible(true);
                SqlField SqlFieldAnnotation = f.getAnnotation(SqlField.class);
                if(SqlFieldAnnotation!=null && StringUtils.isNotBlank(SqlFieldAnnotation.value())){
                    sqlSb.append(SqlFieldAnnotation.value() + ",");
                }else{
                    String name = f.getName();
                    sqlSb.append(name + ",");
                }
            }catch (Exception e){
                e.printStackTrace();
                return null;
            }
        }
        sqlSb.deleteCharAt(sqlSb.length()-1);
        sqlSb.append(") VALUES ");
        return sqlSb.toString();
    }

    private static <T> String generateInsetValue(T t, Field[] declaredFields) {
        StringBuilder sqlSb=new StringBuilder();
        sqlSb.append("(");
        for(Field f:declaredFields){
            try {
                SqlField SqlFieldAnnotation = f.getAnnotation(SqlField.class);
                Object o = f.get(t);
                String sqlObj = "";
                if(o == null && SqlFieldAnnotation!=null){
                    if(SqlFieldAnnotation.defaultType()== SqlType.String){
                        sqlObj = "'"+SqlFieldAnnotation.defaultVal()+"'";
                    }else if(SqlFieldAnnotation.defaultType()== SqlType.Int){
                        sqlObj = SqlFieldAnnotation.defaultVal();
                    }
                }else{
                    sqlObj = getSqlObj(f, o);
                }
                sqlSb.append(sqlObj + ",");
            }catch (Exception e){
                e.printStackTrace();
                return null;
            }
        }
        sqlSb.deleteCharAt(sqlSb.length()-1);
        sqlSb.append(")");
        return sqlSb.toString();
    }

    private static <T> String generateInsetValue(List<T> ls, Field[] declaredFields) {
        StringBuilder sqlSb=new StringBuilder();
        for(T t:ls){
            String s = generateInsetValue(t, declaredFields);
            sqlSb.append(s+",");
        }
        sqlSb.deleteCharAt(sqlSb.length()-1);
        return sqlSb.toString();
    }


    private static <T> String getSqlObj(Field f, T o) {
        Class<?> type = f.getType();
        String st = null;

        if(type.getName().equals(String.class.getName())){
            if(o != null){
                st = "'" + o.toString() + "'";
            }
        }else if(type.getName().equals(Long.class.getName()) || type.getName().equals(Integer.class.getName())){
            if(o != null){
                st = "'" + o.toString() + "'";
            }
        }else if(type.getName().equals(Date.class.getName())){
            if(o != null){
                st = "'" + TimeUtil.formatTime((Date) o, TimeUtil.DATE_FORMAT_HOUR_MINUTE_SECOND) + "'";
            }
        }
        return st;
    }

}

注解

import java.lang.annotation.*;

/**
 * @Auther: gy
 * @Date: 2020/8/11 09:22
 * @Description:
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SqlField {

    String value() default "";

    String defaultVal() default "";

    SqlType defaultType() default SqlType.String;
}
import java.lang.annotation.*;

/**
 * @Auther: gy
 * @Date: 2020/8/11 09:15
 * @Description:
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SqlTable {

    String value() default "";

}
/**
 * @Auther: gy
 * @Date: 2020/8/11 15:21
 * @Description:
 */
public enum SqlType {
    String,Int;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用`@Autowired`注解自动装配时,需要确保以下三个条件满足: 1. Spring容器必须能够扫描到该bean,即该bean必须已经被实例化并注册到Spring容器中。 2. 该bean必须具有默认的构造函数。 3. 该bean必须被标注为`@Component`或其它相关注解。 如果使用XML配置生成bean,可以使用`<context:component-scan>`元素扫描包路径,将标注为`@Component`或其他相关注解的类自动纳入Spring容器中,如下所示: ```xml <context:component-scan base-package="com.example"/> ``` 如果使用注解生成bean,需要在配置类上添加`@ComponentScan`注解,指定需要扫描的包路径,如下所示: ```java @Configuration @ComponentScan(basePackages = "com.example") public class AppConfig { // ... } ``` 在使用`@Autowired`注解自动装配时,可以在成员变量、构造函数或方法参数上使用该注解,如下所示: ```java @Service public class MyService { @Autowired private MyDao myDao; public MyService(MyDao myDao) { this.myDao = myDao; } @Autowired public void setMyDao(MyDao myDao) { this.myDao = myDao; } } ``` 需要注意的是,`@Autowired`注解默认情况下是按照类型进行自动装配的,如果存在多个同类型的bean,需要使用`@Qualifier`注解指定具体的bean名称,如下所示: ```java @Service public class MyService { @Autowired @Qualifier("myDaoImpl") private MyDao myDao; } ``` 以上就是使用`@Autowired`注解自动装配XML和注解生成bean的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊我鹅一五与

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值