> 文档中心 > 你每日用到的代码(1)

你每日用到的代码(1)

记录编写代码的比较常用的内容

    • 1.常用注解
      • 1.1 参数校验
      • 1.2 跨域问题解决注解
    • 2.常用工具类
      • 2.1 分页
      • 2.2 赋值工具类
      • 2.3 二维码生成工具类
      • 2.4 流水号生成工具类
    • 3.代码精简
    • 4.踩坑

————————————欢迎大家分享补充常用的一些内容————————————————
—————————作为个新人,如有不足之处或更多经验请大佬指出————————————

1.常用注解

1.1 参数校验

//  关于时间    @DateTimeFormat(pattern = "yyyy-MM-dd")    @JsonFormat(pattern = "yyyy-MM-dd")      @ApiModelProperty(value = "检验开始时间")  //swagger所用    private Date startTimeOfSurvey;    //  判空  String 常用@NotBlan(notnull 和 去除首尾空格长度>0) //id Integer类型常用@NotNull@NotBlank    @ApiModelProperty(value = "样品编码")    private String sampleCode;     //Lombok 大家可以看一看 几个常用的 //get和set    @Data@Getter@Setter//构造相关 无参构造 有参构造注解@NoArgsConstructor@AllArgsConstructorcontroller 层的4种提交方式 get post delete put

1.2 跨域问题解决注解

加在controller层头上就OK

@CrossOrigin( allowCredentials = "true", allowedHeaders = {"*"}, methods = {RequestMethod.GET, RequestMethod.POST, RequestMethod.DELETE, RequestMethod.OPTIONS, RequestMethod.HEAD, RequestMethod.PUT, RequestMethod.PATCH}, origins = {"*"})

2.常用工具类

2.1 分页

//sampleParametersQueryDto 传入 PageHelper.startPage(QueryDto.getPageNum(), QueryDto.getPageSize()); List<Parameters> parametersList = this.parametersMapper.queryAll(QueryDto); PageInfo<Parameters> pageInfo = new PageInfo<>(parametersList ); return pageInfo;

2.2 赋值工具类

// 一般用的工具类 会把对象1的成员变量直接赋值给对象2相同名称的成员变量(对象可以不同 成员名称相同就好)BeanUtils.copyProperties(对象1, 对象2);

2.3 二维码生成工具类

public class BarcodeUtils {    /**     * 生成条形码文件     *     * @param msg  条形码的文本内容     * @param path 生成条形码的文件路径     * @return     */    public static File generateFile(String msg, String path) { File file = new File(path); OutputStream outputStream = null; try {     outputStream = new FileOutputStream(file); } catch (FileNotFoundException e) {     e.printStackTrace(); } try {     generateBarCode128(msg, 10.0, 0.3, true, false, outputStream); } catch (Exception e) {     throw new RuntimeException(e); } return file;    }    /**     * 生成code128条形码     *     * @param message要生成的文本     * @param height 条形码的高度     * @param width  条形码的宽度     * @param withQuietZone 是否两边留白     * @param hideText      隐藏可读文本     * @param outputStream  输出流     */    public static void generateBarCode128(String message, Double height, Double width, boolean withQuietZone,boolean hideText, OutputStream outputStream) { Code128Bean bean = new Code128Bean(); // 分辨率,越大条形码就越大 int dpi = 150; // 设置两侧是否留白 bean.doQuietZone(withQuietZone); // 设置条形码高度和宽度 bean.setBarHeight((Double) ObjectUtils.defaultIfNull(height, 9.0D)); if (width != null) {     bean.setModuleWidth(width); } // 设置文本位置(包括是否显示) if (hideText) {     bean.setMsgPosition(HumanReadablePlacement.HRP_NONE); } // 设置图片类型 String format = "image/png"; BitmapCanvasProvider canvas = new BitmapCanvasProvider(outputStream, format, dpi,  BufferedImage.TYPE_BYTE_BINARY, false, 0); // 生产条形码 bean.generateBarcode(canvas, message); try {     canvas.finish(); } catch (IOException e) {     //ByteArrayOutputStream won't happen }    }}

2.4 流水号生成工具类

不是特别严谨 小项目可以用 依赖缓存生成流水号 格式:开头+日期+流水 大佬可以优化一下

public class SerialNumberUtil {    @Autowired    private StringRedisTemplate redisTemplate;    /**     * 自动生成每日递增编号     * @param titleText (编码头部默认字符 如:PO20220101001 则为PO)     * @return 生成编码     */    public  String contextLoads(String titleText) { RedisAtomicLong entityIdCounter = new RedisAtomicLong(titleText, redisTemplate.getConnectionFactory()); Long counter = entityIdCounter.incrementAndGet(); DecimalFormat format=new DecimalFormat("000"); entityIdCounter.expire(1, TimeUnit.DAYS); return titleText + new SimpleDateFormat("yyyyMMdd").format(new Date()) + format.format(counter);    }}

3.代码精简

除了前面的注解判断参数、一些工具类之外,我就说说我常用的

1.foreach 循环(比单纯的for 少写了不少)for(double value : values) {一般用来遍历List<对象>  或者迭代器啥的  对对象进行一些操作}2.String sex = lalala(peo.getsex()) ? "男" : "女";  //三元表达式3. Assert.notNull(userId, "用户标识不能为空") 判空 intStringUtils.isEmpty(String字符串); String类型4. 

4.踩坑

在mybatis中 时间比较判空startTimeOfSurvey != null 不能去 ==" " 不然会爆 sting不能与date相比较错误,其实不是代码的问题

     <if test="startTimeOfSurvey != null">  and date_format ( quality_time_actual, '%Y-%m-%d' ) &gt;=  date_format (to_date( #{startTimeOfSurvey}, 'yyyy-mm-dd'), '%Y-%m-%d')     </if> &gt;大于号    &lt;小于号