首页
关于
留言
统计
友链
壁纸
影视
留言找电影
Search
1
java jdk17版本使用cglib报错问题解决
320 阅读
2
在Java中修复json数据,json格式不正确,如何在Java中修复不正确的json
116 阅读
3
Java实现双链表插入排序~渡星河全网首发
106 阅读
4
Java打印某年某月的日历~不调用函数
76 阅读
5
Java中判断是否是闰年
70 阅读
代码笔记
Java
css
Javascript
数据库
安卓开发
Java 功能实例
Java 封装
我的日常
影音分享
文案
恋爱问答
资源分享
电脑游戏
实用APP
登录
/
注册
Search
标签搜索
java
java作业
恋爱
动漫
3A大作
独行月球
电影分享
总之就是非常可爱
JavaScript
office
破解
mysql
vue
java打包
跨域
tomcat解决乱码
bug解决
tomcat
vscode
渡星河
累计撰写
94
篇文章
累计收到
30
条评论
首页
栏目
代码笔记
Java
css
Javascript
数据库
安卓开发
Java 功能实例
Java 封装
我的日常
影音分享
文案
恋爱问答
资源分享
电脑游戏
实用APP
页面
关于
留言
统计
友链
壁纸
影视
留言找电影
搜索到
7
篇与
的结果
2023-04-20
Java根据实体类转换为sql语句。使用mybatis-plus实现,java实现实体类转sql
必要依赖<!-- MyBatis-Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> 工具类SQLGeneratorpackage cn.yyx.aclservice; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Date; public class SQLGenerator { public static String generateDDL(Class<?> clazz) { StringBuilder sb = new StringBuilder(); String tableName = getTableName(clazz); sb.append("CREATE TABLE `").append(tableName).append("` (\n"); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { sb.append(getColumnDefinition(field)); sb.append(",\n"); } sb.append("PRIMARY KEY (`id`)\n") .append(") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='") .append(tableName).append("';"); return sb.toString(); } private static String getTableName(Class<?> clazz) { String tableName = clazz.getSimpleName(); TableName table = clazz.getAnnotation(TableName.class); if (table != null && !"".equals(table.value())) { tableName = table.value(); } return tableName; } private static String getColumnDefinition(Field field) { StringBuilder sb = new StringBuilder(); String columnName = getColumnName(field); Class<?> type = field.getType(); String columnType = getColumnType(type); if (columnType != null && !"".equals(columnType)) { sb.append("`").append(columnName).append("` ").append(columnType) .append(" DEFAULT NULL COMMENT '").append(getColumnComment(field)).append("'"); } return sb.toString(); } private static String getColumnName(Field field) { String columnName = field.getName(); TableField tableField = field.getAnnotation(TableField.class); if (tableField != null && !"".equals(tableField.value())) { columnName = tableField.value(); } return columnName; } private static String getColumnComment(Field field) { String columnComment = ""; ApiModelProperty apiModelProperty = field.getAnnotation(ApiModelProperty.class); if (apiModelProperty != null && !"".equals(apiModelProperty.value())) { columnComment = apiModelProperty.value(); } return columnComment; } private static String getColumnType(Class<?> type) { if (String.class.equals(type)) { return "VARCHAR(255)"; } else if (Integer.class.equals(type) || int.class.equals(type)) { return "INT(11)"; } else if (Long.class.equals(type) || long.class.equals(type)) { return "BIGINT(20)"; } else if (BigDecimal.class.equals(type)) { return "DECIMAL(10,2)"; } else if (Boolean.class.equals(type) || boolean.class.equals(type)) { return "TINYINT(1)"; } else if (Double.class.equals(type) || double.class.equals(type)) { return "DOUBLE(10,2)"; } else if (Date.class.equals(type)) { return "DATETIME"; } else { return null; } } } 实体类package cn.yyx.order.entity; import java.math.BigDecimal; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowHeight; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import java.util.Date; import java.io.Serializable; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import org.springframework.stereotype.Component; /** * <p> * * </p> * * @author 渡星河 * @since 2023-04-18 */ @Data @EqualsAndHashCode(callSuper = false) @TableName("t_order") @ApiModel(value="Order对象", description="") @HeadRowHeight(20) @ColumnWidth(20) @ContentRowHeight(15) @AllArgsConstructor @NoArgsConstructor public class Order implements Serializable { private static final long serialVersionUID = 1L; private String id; @ExcelProperty(index = 0,value = "客户名") private String cname; @ExcelProperty(index = 1,value = "性别") private String sex; @ExcelProperty(index = 2,value = "业务名字") private String sname; @ExcelProperty(index = 3,value = "技术名字") private String operatorName; @ExcelProperty(index = 4,value = "手机号") private String phone; @ExcelProperty(index = 5,value = "项目名字") private String itemName; @ExcelProperty(index = 6,value = "销售人员的编号") @ApiModelProperty(value = "销售人员的编号") private String saleId; @ExcelProperty(index = 7,value = "技术人员的编号") @ApiModelProperty(value = "技术人员的编号") private String operatorId; @ExcelProperty(index = 8,value = "订单日期") @ApiModelProperty(value = "订单日期") @JsonFormat(pattern = "yyyy-MM-dd") private Date orderDate; @ExcelProperty(index = 9,value = "服务状态") @ApiModelProperty(value = "0 已经服务 1 服务中 2 交了定金 3 退款") private Integer orderStatus; @ExcelProperty(index = 10,value = "是否删除") @TableLogic(value = "1",delval = "0") private Integer delstatus; @ExcelProperty(index = 11,value = "单价") private Double orderPrice; @ExcelProperty(index = 12,value = "备注") @ApiModelProperty(value = "备注") private String note; @JsonFormat(pattern = "yyyy-MM-dd") @ExcelProperty(index = 13,value = "客户生日") private Date birthDay; } 测试类package cn.yyx.aclservice; import cn.yyx.employee.entity.Employee; import cn.yyx.order.entity.Order; public class Test { public static void main(String[] args) { String ddl = SQLGenerator.generateDDL(Order.class); System.out.println(ddl); } } {dotted startColor="#ff6c6c" endColor="#1989fa"/}输出结果CREATE TABLE `t_order` ( `serialVersionUID` BIGINT(20) DEFAULT NULL COMMENT '', `id` VARCHAR(255) DEFAULT NULL COMMENT '', `cname` VARCHAR(255) DEFAULT NULL COMMENT '', `sex` VARCHAR(255) DEFAULT NULL COMMENT '', `sname` VARCHAR(255) DEFAULT NULL COMMENT '', `operatorName` VARCHAR(255) DEFAULT NULL COMMENT '', `phone` VARCHAR(255) DEFAULT NULL COMMENT '', `itemName` VARCHAR(255) DEFAULT NULL COMMENT '', `saleId` VARCHAR(255) DEFAULT NULL COMMENT '销售人员的编号', `operatorId` VARCHAR(255) DEFAULT NULL COMMENT '技术人员的编号', `orderDate` DATETIME DEFAULT NULL COMMENT '订单日期', `orderStatus` INT(11) DEFAULT NULL COMMENT '0 已经服务 1 服务中 2 交了定金 3 退款', `delstatus` INT(11) DEFAULT NULL COMMENT '', `orderPrice` DOUBLE(10,2) DEFAULT NULL COMMENT '', `note` VARCHAR(255) DEFAULT NULL COMMENT '备注', `birthDay` DATETIME DEFAULT NULL COMMENT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='t_order';
2023年04月20日
9 阅读
0 评论
1 点赞
2023-04-18
springboot将实体类或者List集合数据导成excel文件,批量导入数据到数据库
必要依赖用于操作excel<!-- EasyExcel --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.2.0</version> </dependency>实体类例子package cn.yyx.order.entity; import java.math.BigDecimal; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowHeight; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import java.util.Date; import java.io.Serializable; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; /** * <p> * * </p> * * @author 渡星河 * @since 2023-04-18 */ @Data @EqualsAndHashCode(callSuper = false) @TableName("t_order") @ApiModel(value="Order对象", description="") @HeadRowHeight(20) @ColumnWidth(20) @ContentRowHeight(15) @AllArgsConstructor @NoArgsConstructor public class Order implements Serializable { private static final long serialVersionUID = 1L; private String id; @ExcelProperty(index = 0,value = "客户名") private String cname; @ExcelProperty(index = 1,value = "性别") private String sex; @ExcelProperty(index = 2,value = "业务名字") private String sname; @ExcelProperty(index = 3,value = "技术名字") private String operatorName; @ExcelProperty(index = 4,value = "手机号") private String phone; @ExcelProperty(index = 5,value = "项目名字") private String itemName; @ExcelProperty(index = 6,value = "销售人员的编号") @ApiModelProperty(value = "销售人员的编号") private String saleId; @ExcelProperty(index = 7,value = "技术人员的编号") @ApiModelProperty(value = "技术人员的编号") private String operatorId; @ExcelProperty(index = 8,value = "订单日期") @ApiModelProperty(value = "订单日期") private Date orderDate; @ExcelProperty(index = 9,value = "服务状态") @ApiModelProperty(value = "0 已经服务 1 服务中 2 交了定金 3 退款") private Integer orderStatus; @ExcelProperty(index = 10,value = "是否删除") @TableLogic(value = "1",delval = "0") private Integer delstatus; @ExcelProperty(index = 11,value = "单价") private Double orderPrice; @ExcelProperty(index = 12,value = "备注") @ApiModelProperty(value = "备注") private String note; @ExcelProperty(index = 13,value = "客户生日") private Date birthDay; } 注解看不懂的搜一下,这里不做解释 {dotted startColor="#ff6c6c" endColor="#1989fa"/}对应的控制类@RequestMapping("excel") public void exportStudentInfos(HttpServletResponse response, HttpServletRequest request) throws Exception { // 设置响应类型 response.setContentType("application/vnd.ms-excel"); // 设置字符编码 response.setCharacterEncoding("utf-8"); // 设置响应头信息 response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + URLEncoder.encode("学生花名册", "UTF-8") + ".xlsx"); List<Order> studentList = new ArrayList<Order>() { { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); add(new Order("1", "张三", "男", "业务名称", "技术名称", "13888888888", "项目名称", "SALE001", "OPERATOR001", new Date(), 0, 1, 100.00, "备注信息", new Date())); } }; File file = new File("D:\\20222\\学生花名册.xlsx"); if (!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } if (file.exists()) { file.delete(); } // 2. 写入 Excel 数据 EasyExcel.write(file, Order.class).sheet("信息").doWrite(studentList); // 写入文件 EasyExcel.write(response.getOutputStream(), Order.class).sheet("信息").doWrite(studentList); }ImportDataListener工具类package cn.yyx.utils; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import lombok.Getter; import java.util.ArrayList; import java.util.List; public class ImportDataListener<T> extends AnalysisEventListener<T> { @Getter private final List<T> list = new ArrayList<T>(); @Override public void invoke(T data, AnalysisContext analysisContext) { // 将数据添加到List集合里面 list.add(data); } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { // 处理完所有数据后的操作 //list.forEach(System.out::println); } } 用于处理excel用户上传后处理excel例子 @PostMapping("save") public R save(@RequestPart MultipartFile file) throws IOException { ImportDataListener importOrderListener = new ImportDataListener(); EasyExcel.read(file.getInputStream(), Order.class, importOrderListener).sheet().doRead(); for (Object order : importOrderListener.getList()) { System.out.println(order); } return R.ok(); }实操一波,上传的excel文件解析后数据保存到本地文件夹,和浏览器下载数据@PostMapping("save") public R save(@RequestPart MultipartFile file) throws Exception { ImportDataListener<Order> importOrderListener = new ImportDataListener<Order>(); EasyExcel.read(file.getInputStream(), Order.class, importOrderListener).sheet().doRead(); List<Order> list = importOrderListener.getList(); exportStudentInfos(list,response,request); System.out.println(list); return R.ok(); } @RequestMapping("excel") public void exportStudentInfos(List<Order> orders,HttpServletResponse response, HttpServletRequest request) throws Exception { // 设置响应头信息 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileName = "orders.xlsx"; // 设置导出文件的文件名 response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8")); // 写入本地文件夹 EasyExcel.write("D:\\apipost\\数据.xlsx", Order.class).sheet("订单数据").doWrite(orders); System.out.println("执行成功"); // 写入 Excel 数据 EasyExcel.write(response.getOutputStream(), Order.class).sheet("订单数据").doWrite(orders); }
2023年04月18日
12 阅读
0 评论
1 点赞
2023-04-13
Java封装删除指定redis前缀key
redis删除指定前缀key无语了家人们,今天写项目想通过通配符删除redis缓存的key,没有用啊我本来想使用命令 del wang* 去删除前缀是wang的可以,结果不可以啊含泪封装一个删除指定前缀的key的java类 package com.galaxy.empvue.utils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import java.util.Set; @Component public class RedisUtils { @Autowired private RedisTemplate<String, Object> redisTemplate; public void deleteByPrefix(String prefix) { redisTemplate.execute((RedisCallback<Void>) connection -> { Set<byte[]> keys = connection.keys((prefix + "*").getBytes()); assert keys != null; if (!keys.isEmpty()) { connection.del(keys.toArray(new byte[0][])); } return null; }); } } 直接自动装配到你要用的类就行了
2023年04月13日
7 阅读
0 评论
-1 点赞
2023-02-16
javaServlet封装AES的加密类
Java Servlet 可以封装常用的加密类,以实现对用户数据的保护。以下是一个简单的加密类封装示例:import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class EncryptionUtils { // 算法名 private static final String ALGORITHM_NAME = "AES"; // 填充方式 private static final String ALGORITHM_PADDING = "AES/CBC/PKCS5Padding"; // 加密密钥(长度必须是16位) private static final String ENCRYPTION_KEY = "0123456789abcdef"; // 初始向量(长度必须是16位) private static final String IV = "0123456789abcdef"; // 加密字符串 public static String encrypt(String plaintext) { try { SecretKeySpec key = new SecretKeySpec(ENCRYPTION_KEY.getBytes("UTF-8"), ALGORITHM_NAME); Cipher cipher = Cipher.getInstance(ALGORITHM_PADDING); IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes("UTF-8")); cipher.init(Cipher.ENCRYPT_MODE, key, ivParameterSpec); byte[] encrypted = cipher.doFinal(plaintext.getBytes("UTF-8")); return Base64.getEncoder().encodeToString(encrypted); } catch (Exception e) { e.printStackTrace(); } return null; } // 解密字符串 public static String decrypt(String ciphertext) { try { SecretKeySpec key = new SecretKeySpec(ENCRYPTION_KEY.getBytes("UTF-8"), ALGORITHM_NAME); Cipher cipher = Cipher.getInstance(ALGORITHM_PADDING); IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes("UTF-8")); cipher.init(Cipher.DECRYPT_MODE, key, ivParameterSpec); byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(ciphertext)); return new String(decrypted, "UTF-8"); } catch (Exception e) { e.printStackTrace(); } return null; } } 这个类中使用了 Java 中提供的加密类库,实现了对字符串的加密和解密操作。加密方法使用 AES 算法对字符串进行加密,加密后的密文使用 Base64 编码。解密方法则是先使用 Base64 解码,再使用 AES 算法进行解密,最后将解密后的字节数组转换为字符串。在 Servlet 中使用这个类只需要导入这个类,然后就可以使用其中的加密和解密方法了。例如String plaintext = "Hello, world!"; String ciphertext = EncryptionUtils.encrypt(plaintext); System.out.println(ciphertext); // 输出加密后的字符串 String decrypted = EncryptionUtils.decrypt(ciphertext); System.out.println(decrypted); // 输出解密后的字符串 注意:这个示例中的加密密钥和初始向量都是写死的,实际应用中应该根据具体情况进行修改,不能直接使用这个示例中的值。
2023年02月16日
12 阅读
0 评论
1 点赞
2023-02-16
javaServlet封装常用数据库查询逻辑
封装常用的数据库查询语句可以提高代码的复用性和可维护性,以下是一个 JavaServlet 封装常用查询语句的实例,包括增、删、改、查。查询一条记录public Map<String, Object> queryOne(String sql, Object... params) { try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { for (int i = 0; i < params.length; i++) { stmt.setObject(i + 1, params[i]); } try (ResultSet rs = stmt.executeQuery()) { if (rs.next()) { ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); Map<String, Object> resultMap = new HashMap<>(); for (int i = 1; i <= columnCount; i++) { String columnName = metaData.getColumnLabel(i); Object columnValue = rs.getObject(columnName); resultMap.put(columnName, columnValue); } return resultMap; } } } catch (SQLException e) { e.printStackTrace(); } return null; } 查询多条记录public List<Map<String, Object>> queryList(String sql, Object... params) { List<Map<String, Object>> resultList = new ArrayList<>(); try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { for (int i = 0; i < params.length; i++) { stmt.setObject(i + 1, params[i]); } try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); Map<String, Object> resultMap = new HashMap<>(); for (int i = 1; i <= columnCount; i++) { String columnName = metaData.getColumnLabel(i); Object columnValue = rs.getObject(columnName); resultMap.put(columnName, columnValue); } resultList.add(resultMap); } } } catch (SQLException e) { e.printStackTrace(); } return resultList; } 插入一条记录public int insert(String sql, Object... params) { try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { for (int i = 0; i < params.length; i++) { stmt.setObject(i + 1, params[i]); } return stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return 0; } 更新一条记录public int update(String sql, Object... params) { try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { for (int i = 0; i < params.length; i++) { stmt.setObject(i + 1, params[i]); } return stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return 0; } 删除一条记录public int delete(String sql, Object... params) { try (Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { for (int i = 0; i < params.length; i++) { stmt.setObject(i + 1, params[i]); } return stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return 0; } 调用实例要使用以上代码,需要首先创建一个数据源,例如import com.alibaba.druid.pool.DruidDataSource; import javax.sql.DataSource; public class DataSourceFactory { public static DataSource createDataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false"); dataSource.setUsername("root"); dataSource.setPassword("123456"); dataSource.setInitialSize(5); dataSource.setMaxActive(100); dataSource.setMinIdle(1); dataSource.setMaxWait(60000); return dataSource; } } 然后,在 Servlet 中创建一个数据库操作对象:import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; import java.util.Map; import javax.sql.DataSource; import java.sql.SQLException; @WebServlet("/database") public class DatabaseServlet extends HttpServlet { private DataSource dataSource; private DatabaseOperation databaseOperation; @Override public void init() throws ServletException { dataSource = DataSourceFactory.createDataSource(); databaseOperation = new DatabaseOperation(dataSource); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String sql = "SELECT * FROM user WHERE id = ?"; Map<String, Object> user = databaseOperation.queryOne(sql, 1); System.out.println(user); sql = "SELECT * FROM user"; List<Map<String, Object>> userList = databaseOperation.queryList(sql); System.out.println(userList); } @Override public void destroy() { if (dataSource != null) { try { dataSource.close(); } catch (SQLException e) { e.printStackTrace(); } } } } 在 Servlet 的 init 方法中初始化数据源和数据库操作对象,然后在 doGet 方法中使用这个对象调用封装好的方法进行数据库操作。最后,在 Servlet 的 destroy 方法中关闭数据源。以上代码仅作为示例,具体实现需要根据具体的需求进行修改和完善。
2023年02月16日
10 阅读
0 评论
0 点赞
1
2