首页
关于
留言
统计
友链
壁纸
影视
留言找电影
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
页面
关于
留言
统计
友链
壁纸
影视
留言找电影
搜索到
13
篇与
的结果
2024-02-01
mybatis-plus实现真批量导入数据
现在我以我项目的上传用户行为记录做示例实体类package com.xy.admin.entity; import com.baomidou.mybatisplus.annotation.IdType; import java.util.Date; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; /** * <p> * * </p> * * @author duGalaxy * @since 2024-01-31 */ @Data @EqualsAndHashCode(callSuper = false) public class UserTrail implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * iptv账号 */ private String iptvAccount; /** * 访问路径 */ private String route; /** * 访问界面描述 */ private String details; /** * 访问时间 */ private Date time; /** * 类型 */ private String type; } 控制层package com.xy.admin.controller; import com.xy.admin.entity.UserTrail; import com.xy.admin.service.UserTrailService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.sql.Timestamp; /** * <p> * 前端控制器 * </p> * * @author duGalaxy * @since 2024-01-31 */ @RestController @RequestMapping("/trail") @Slf4j public class UserTrailController { @Autowired private UserTrailService userTrailService; @PostMapping("addTrail") public String addTrail(String userId,String route, String details,String type){ if("".equals(userId)|| "".equals(route)|| "".equals(details)|| "".equals(type)){ log.info("参数为空,添加失败!"); return "参数为空,添加失败!"; }else{ UserTrail records = new UserTrail(); records.setIptvAccount(userId); records.setRoute(route); records.setDetails(details); records.setType(type); records.setTime(new Timestamp(System.currentTimeMillis())); return userTrailService.add(records) ? "添加成功!" : "添加失败!"; } } } service层package com.xy.admin.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.xy.admin.entity.UserTrail; import com.baomidou.mybatisplus.extension.service.IService; import com.xy.admin.mapper.UserTrailMapper; import org.springframework.beans.factory.annotation.Autowired; import java.util.List; /** * <p> * 服务类 * </p> * * @author duGalaxy * @since 2024-01-31 */ public interface UserTrailService extends IService<UserTrail> { boolean add(UserTrail records); } 重点package com.xy.admin.service.impl; import com.xy.admin.entity.UserTrail; import com.xy.admin.mapper.UserTrailMapper; import com.xy.admin.service.UserTrailService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; /** * <p> * 服务实现类 * </p> * * @author duGalaxy * @since 2024-01-31 */ import org.springframework.scheduling.annotation.Async; import javax.annotation.Resource; import java.util.List; import java.util.Set; @Service @Slf4j public class UserTrailServiceImpl extends ServiceImpl<UserTrailMapper, UserTrail> implements UserTrailService { @Autowired private UserTrailMapper userTrailMapper; @Resource private RedisTemplate<String, UserTrail> redisTemplate; public static final String USER_TRAIL_QUEUE = "user_trail_queue"; @Async public void saveUserTrailToRedis(UserTrail record) { // 存储用户轨迹数据到 Redis redisTemplate.opsForList().rightPush(USER_TRAIL_QUEUE, record); } @Async public void saveUserTrailsToDatabase(List<UserTrail> records) { // 批量插入用户轨迹数据到 MySQL 数据库 userTrailMapper.batchInsert(records); } // 定时任务,每隔一段时间执行一次 @Scheduled(fixedRate = 60000) // 60秒 public void processUserTrails() { log.info("开始处理用户轨迹数据..."); // 从 Redis 中取出用户轨迹数据并批量插入到 MySQL 数据库 List<UserTrail> userTrails = redisTemplate.opsForList().range(USER_TRAIL_QUEUE, 0, -1); assert userTrails != null; if (!userTrails.isEmpty()) { saveUserTrailsToDatabase(userTrails); redisTemplate.opsForList().trim(USER_TRAIL_QUEUE, 1, -1); } } @Override public boolean add(UserTrail record) { // 异步将用户轨迹数据存储到 Redis saveUserTrailToRedis(record); return true; // 返回成功,不等待数据库插入完成 } } mapper层package com.xy.admin.mapper; import com.xy.admin.entity.UserTrail; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> * Mapper 接口 * </p> * * @author duGalaxy * @since 2024-01-31 */ @Mapper public interface UserTrailMapper extends BaseMapper<UserTrail> { void batchInsert(@Param("list")List<UserTrail> records); } 对应xml,实现批量sql<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- Mapper XML文件 --> <mapper namespace="com.xy.admin.mapper.UserTrailMapper"> <insert id="batchInsert" parameterType="java.util.List"> INSERT INTO user_trail (iptv_account, route, details, time, type) VALUES <foreach collection="list" item="record" separator=","> (#{record.iptvAccount}, #{record.route}, #{record.details}, #{record.time}, #{record.type}) </foreach> </insert> </mapper> 该项目使用了redis,用户行为会先保存在redis,每隔60秒会触发定时任务将redis中的数据持久化到mysql。
2024年02月01日
19 阅读
0 评论
0 点赞
2024-01-30
Java实现将中文转换为拼音首字母
调用例子package com.zhkt.ostrich; /** * Author: duGalaxy * Date: 2023/09/11/11:03 * Description: */ import java.io.File; import static com.zhkt.ostrich.ChineseToLower.getPinYinHeadChar; public class test { public static void main(String[] args) { String directoryPath = "F:\\A公司项目\\汐游游戏\\20240126汐游二级02切图\\欢乐世界"; // 替换为你的目录路径 renameFiles(directoryPath); // int i = 2; // while (i<=20){ // System.out.println(directoryPath+i); // renameFiles(directoryPath+i); // i++; // } } public static void renameFiles(String directoryPath) { File directory = new File(directoryPath); File[] files = directory.listFiles(); int num = 1; String texy = ""; if (files != null) { for (File file : files) { if (file.isFile()) { String originalName = file.getName(); //讲包含病毒的文件名进行文件新命名 texy+=originalName+"\n"; String headChar = getPinYinHeadChar(originalName); String newName = headChar.toLowerCase(); // String newName; // String newName = originalName.replaceAll("欢乐世界", "").replaceAll("大", "").replaceAll("背景", "bg"); // newName = originalName.replaceAll(" ", ""); // newName = originalName.replaceAll("探险岛", "txd"); // String newName = num+".png"; num++; if (!originalName.equals(newName)) { String newPath = file.getParent() + File.separator + newName; File newFile = new File(newPath); if (file.renameTo(newFile)) { System.out.println("文件重命名成功:" + originalName + " --> " + newName); } else { System.out.println("文件重命名失败:" + originalName); } } } } } System.out.println(texy); } }工具类 package com.zhkt.ostrich; import java.util.regex.Matcher; import java.util.regex.Pattern; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; public class ChineseToLower { /** * 得到中文首字母 * @param str 需要转化的中文字符串 * @return */ public static String getPinYinHeadChar(String str) { String convert = ""; for (int j = 0; j < str.length(); j++) { char word = str.charAt(j); String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word); if (pinyinArray != null) { convert += pinyinArray[0].charAt(0); } else { convert += word; } } return convert; } /** * 得到中文全拼 * @param str 需要转化的中文字符串 * @return */ public static String getPingYin(String str) { char[] t1 = null; t1 = str.toCharArray(); String[] t2 = new String[t1.length]; HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat(); t3.setCaseType(HanyuPinyinCaseType.LOWERCASE); t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE); t3.setVCharType(HanyuPinyinVCharType.WITH_V); String t4 = ""; int t0 = t1.length; try { for (int i = 0; i < t0; i++) { // 判断是否为汉字字符 if (java.lang.Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) { t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3); t4 += t2[0]; } else { t4 += java.lang.Character.toString(t1[i]); } } return t4; } catch (BadHanyuPinyinOutputFormatCombination e1) { e1.printStackTrace(); } return t4; } /** * 获得中文字符串首字母 * @param str * @return */ public static String getFirstPinYin(String str){ String s = getPinYinHeadChar(str); StringBuffer sb = new StringBuffer(s); if (sb.length() > 1) { String ss = sb.delete(1, sb.length()).toString(); return String.valueOf(Character.toUpperCase(ss.toCharArray()[0])); } return str; } public static void main(String[] args) { //获取中文拼音首字母 String headChar = getPinYinHeadChar("欢乐世界-打我鸭.png"); // headChar.toUpperCase() String up = headChar.toLowerCase(); System.out.println(up); //获得中文拼音全拼 String pingYin = getPingYin("磊喆頔"); String s = pingYin.toUpperCase(); System.out.println(s); //获得中文拼音第一个字首字母 String ss = getFirstPinYin("湖北省"); System.out.println(ss); } }
2024年01月30日
9 阅读
0 评论
0 点赞
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-16
使用fastjson解析json字符串
import com.alibaba.fastjson.JSONObject; public class JsonParser { public static void main(String[] args) { String jsonString = "{\"algo_version\":\"adbdfe6d95e774e94e4b0b86b40b194e03807c75\",\"data\":{\"face\":{\"algo_version\":\"adbdfe6d95e774e94e4b0b86b40b194e03807c75\",\"angle\":0,\"data\":{\"address\":\"贵州省\",\"birthDate\":\"2000年13月27日\",\"ethnicity\":\"苗\",\"idNumber\":\"110423245012215153\",\"name\":\"八嘎\",\"sex\":\"男\"},\"figure\":[{\"box\":{\"angle\":0,\"h\":494,\"w\":411,\"x\":1332,\"y\":682},\"h\":497,\"points\":[{\"x\":1127,\"y\":435},{\"x\":1539,\"y\":435},{\"x\":1538,\"y\":929},{\"x\":1126,\"y\":929}],\"type\":\"face\",\"w\":414,\"x\":1126,\"y\":434}],\"ftype\":0,\"height\":910,\"orgHeight\":910,\"orgWidth\":1434,\"prism_keyValueInfo\":[{\"key\":\"name\",\"keyProb\":100,\"value\":\"八嘎\",\"valuePos\":[{\"x\":532,\"y\":398},{\"x\":690,\"y\":396},{\"x\":691,\"y\":456},{\"x\":532,\"y\":458}],\"valueProb\":100},{\"key\":\"sex\",\"keyProb\":100,\"value\":\"男\",\"valuePos\":[{\"x\":529,\"y\":514},{\"x\":575,\"y\":514},{\"x\":574,\"y\":565},{\"x\":527,\"y\":564}],\"valueProb\":100},{\"key\":\"ethnicity\",\"keyProb\":100,\"value\":\"苗\",\"valuePos\":[{\"x\":802,\"y\":519},{\"x\":849,\"y\":519},{\"x\":849,\"y\":567},{\"x\":802,\"y\":567}],\"valueProb\":100},{\"key\":\"birthDate\",\"keyProb\":100,\"value\":\"2000年12月21日\",\"valuePos\":[{\"x\":524,\"y\":621},{\"x\":908,\"y\":626},{\"x\":907,\"y\":668},{\"x\":523,\"y\":663}],\"valueProb\":100},{\"key\":\"address\",\"keyProb\":100,\"value\":\"贵州省八嘎\",\"valuePos\":[{\"x\":518,\"y\":730},{\"x\":1084,\"y\":738},{\"x\":1082,\"y\":862},{\"x\":516,\"y\":854}],\"valueProb\":100},{\"key\":\"idNumber\",\"keyProb\":100,\"value\":\"522423200012215153\",\"valuePos\":[{\"x\":731,\"y\":1025},{\"x\":1486,\"y\":1019},{\"x\":1486,\"y\":1073},{\"x\":731,\"y\":1079}],\"valueProb\":100}],\"sliceRect\":{\"x0\":259,\"x1\":1634,\"x2\":1655,\"x3\":223,\"y0\":266,\"y1\":281,\"y2\":1175,\"y3\":1165},\"width\":1434}},\"height\":1279,\"orgHeight\":1279,\"orgWidth\":1704,\"width\":1704}}"; JSONObject jsonObject = JSONObject.parseObject(jsonString); JSONObject faceData = jsonObject.getJSONObject("data").getJSONObject("face").getJSONObject("data"); String address = faceData.getString("address"); String birthDate = faceData.getString("birthDate"); String ethnicity = faceData.getString("ethnicity"); String idNumber = faceData.getString("idNumber"); String name = faceData.getString("name"); String sex = faceData.getString("sex"); System.out.println("地址:" + address); System.out.println("出生日期:" + birthDate); System.out.println("民族:" + ethnicity); System.out.println("身份证号码:" + idNumber); System.out.println("姓名:" + name); System.out.println("性别:" + sex); } }
2023年04月16日
8 阅读
0 评论
0 点赞
2023-04-15
在Java中修复json数据,json格式不正确,如何在Java中修复不正确的json
今天通过阿里云的orc服务写身份证识别功能,好家伙当我获取body部分后发现json格式不正确,这就麻烦了,不正确我获取名字啊,身份证什么的就麻烦,我就想着去修复一下,后面发现可以直接使用gson来进行修复import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.google.gson.JsonObject; String incorrectJson = "{name: \"John Doe\", age: 30, email: \"john.doe@example.com\"}"; System.out.println("Incorrect JSON: " + incorrectJson); // 使用Gson库来修复JSON格式 Gson gson = new Gson(); JsonObject jsonObject = null; try { jsonObject = gson.fromJson(incorrectJson, JsonObject.class); } catch (JsonSyntaxException e) { System.out.println("Error: " + e.getMessage()); } // 将修复后的JSON转换为字符串 String correctJson = gson.toJson(jsonObject); System.out.println("Correct JSON: " + correctJson);总结就是好用
2023年04月15日
116 阅读
0 评论
0 点赞
1
2
3