AI使用示例(1)

前言

春节期间deepseek大火,到现在为止一个多月的时间各家都开始疯狂卷AI,对于程序员来说(或者说对于所有打工人来说)蹭上这股热潮、利用AI来辅助自己工作增加工作效率就成了必要的技能了,接下来分享几个最近一段时间用AI的例子

AI例子

下面的所有例子的代码都是由AI直接生成的且经过测试可以使用的

直接写代码

敏感信息脱敏

API返回的敏感信息(如手机号、身份证等)需要脱敏可谓是常规需求了,直接用AI生成的代码如下(spring boot框架,用的是注解的方式)
在这里插入图片描述

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import java.io.IOException;
public class IdCardSerializer extends JsonSerializer<String> {
    @Override
    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        if (value != null && value.length() == 18) {
            // 身份证号脱敏:保留前3位和后4位,中间用*代替
            String maskedIdCard = value.substring(0, 3) + "*************" + value.substring(16);
            gen.writeString(maskedIdCard);
        } else {
            gen.writeString(value);
        }
    }
}
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import java.io.IOException;

public class MobileSerializer extends JsonSerializer<String> {
    @Override
    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        if (value != null && value.length() == 11) {
            // 手机号脱敏:保留前3位和后4位,中间用*代替
            String maskedMobile = value.substring(0, 3) + "****" + value.substring(7);
            gen.writeString(maskedMobile);
        } else {
            gen.writeString(value);
        }
    }
}
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;

@Data
public class UserLoginDto {

    @JsonSerialize(using = MobileSerializer.class)
    private String phone;


}
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.SuperBuilder;


@SuperBuilder
@Data
public class StudentDto {


    @Schema(description = "身份证号")
    @JsonSerialize(using = IdCardSerializer.class)
    private String idCard;
   }

敏感信息加密

同样,对于敏感信息很多要求数据库存储的时候加密存储,同样在AOP层实现
EncryptedApiUtils是之前实现的加密解密类
在这里插入图片描述

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.persistence.PostLoad;
import javax.persistence.PrePersist;

@Component
public class StudentEntityListener {

    @Autowired
    private EncryptApiUtils encryptApiUtils;

    @PrePersist
    public void encryptFields(Student student) {
        if (StringUtils.isNotEmpty(student.getIdCard())) {
            student.setIdCard(encryptApiUtils.encrypt(student.getIdCard()));
        }
    }

    @PostLoad
    public void decryptFields(Student student) {
        if (StringUtils.isNotEmpty(student.getIdCard())) {
            student.setIdCard(encryptApiUtils.decrypt(student.getIdCard()));
        }
    }
}
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.persistence.PostLoad;
import javax.persistence.PrePersist;

@Component
public class UserEntityListener {

    @Autowired
    private EncryptApiUtils encryptApiUtils;

    @PrePersist
    public void encryptFields(User user) {
        if (StringUtils.isNotEmpty(user.getPhone())) {
            user.setPhone(encryptApiUtils.encrypt(user.getPhone()));
        }
    }

    @PostLoad
    public void decryptFields(User user) {
        if (StringUtils.isNotEmpty(user.getPhone())) {
            user.setPhone(encryptApiUtils.decrypt(user.getPhone()));
        }
    }
@NoArgsConstructor
@SuperBuilder
@Getter
@Setter
@Entity
@EntityListeners(StudentEntityListener.class)
@Table
public class Student extends AbstractModel{
}
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@DynamicUpdate
@EntityListeners(UserEntityListener.class)
@Entity
@Table(name = "\"user\"",schema = "SUOS", indexes = {
//        @Index(name = "idx_email", columnList = "email"),
//        @Index(name = "idx_phone", columnList = "phone"),
//        @Index(name = "idx_username", columnList = "username")
})
public class User {
}

sqlserver upsert语句

有个项目需要用到sqlserver,之前一直用的是mysql,很多语句会有一些区别,重新学习成本又太高,直接借助ai写代码
在这里插入图片描述

import pyodbc
import pandas as pd

def upsert_to_sqlserver(df: pd.DataFrame, connection: pyodbc.Connection, table_name: str, primary_keys: list):
    """
    将 Pandas DataFrame 写入 SQL Server 表,实现类似 MySQL 的 INSERT ... ON DUPLICATE KEY UPDATE 功能。
    使用 SQL Server 的 MERGE 语句实现。

    参数:
        df (pd.DataFrame): 要写入的数据。
        connection (pyodbc.Connection): PyODBC 连接对象。
        table_name (str): 目标表名。
        primary_keys (list): 表的主键字段名列表。
    """
    # 检查 DataFrame 是否为空
    if df.empty:
        print("DataFrame is empty. No data to insert or update.")
        return

    # 获取表的列名
    columns = df.columns.tolist()
    non_primary_columns = [col for col in columns if col not in primary_keys]

    # 构建 MERGE 语句
    merge_sql = f"""
    MERGE INTO {table_name} AS target
    USING (VALUES ({', '.join(['?' for _ in range(len(columns))])}))
    AS source ({', '.join(columns)})
    ON {' AND '.join([f'target.{pk} = source.{pk}' for pk in primary_keys])}
    WHEN MATCHED THEN
        UPDATE SET {', '.join([f'target.{col} = source.{col}' for col in non_primary_columns])}
    WHEN NOT MATCHED THEN
        INSERT ({', '.join(columns)})
        VALUES ({', '.join([f'source.{col}' for col in columns])});
    """

    # 将 DataFrame 转换为列表形式
    data = [tuple(row) for row in df.values]

    # 执行 MERGE 语句
    cursor = connection.cursor()
    cursor.fast_executemany = True  # 提高性能
    cursor.executemany(merge_sql, data)
    connection.commit()
    print(f"Data upserted successfully into {table_name}.")

def save_dataframe_to_sqlserver(df: pd.DataFrame, connection: pyodbc.Connection, table_name: str, schema: str = "dbo"):
    """
    将 Pandas DataFrame 的数据批量插入到 SQL Server 数据库表中。
    自动处理不规范的列名(如包含空格或特殊字符)。

    参数:
        df (pd.DataFrame): 要保存的数据。
        connection (pyodbc.Connection): PyODBC 连接对象。
        table_name (str): 目标表名。
        schema (str): 数据库的 schema,默认为 "dbo"。
    """
    # 检查 DataFrame 是否为空
    if df.empty:
        print("DataFrame is empty. No data to insert.")
        return

    # 获取表的列名,并处理不规范的列名
    columns = df.columns.tolist()
    safe_columns = [f"[{col}]" for col in columns]  # 使用方括号包裹列名

    # 构建 INSERT 语句
    insert_sql = f"""
    INSERT INTO {schema}.{table_name} ({', '.join(safe_columns)})
    VALUES ({', '.join(['?' for _ in columns])})
    """

    # 将 DataFrame 转换为列表形式
    data = [tuple(row) for row in df.values]

    # 执行批量插入
    cursor = connection.cursor()
    cursor.fast_executemany = True  # 提高性能
    cursor.executemany(insert_sql, data)
    connection.commit()

    print(f"Data successfully inserted into {schema}.{table_name}.")

这上面分别是insert语句和upsert语句的实现

辅助纯工作量类型工作

根据controller生成api信息

用户行为分析属于是常用的功能,而通常接口保存的日志只有接口路径,所以需要手动配置一张配置表来记录接口url和实际接口名称之间的映射关系,而这张配置表的配置完全可以通过AI来进行
在这里插入图片描述
在这里插入图片描述

根据er图生成JAVA类

通常来说设计阶段设计的数据结构都是ER图的形式,而将ER图转成java代码里的domain类也是纯堆工作量的事情,也可以通过AI解决
在这里插入图片描述

根据er图转sql建表语句

同样的也可以根据er图直接生成create table语句
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值