总结tips

ArrayList和LinkedList

ArrayList的查询,修改效率比LinkedList高,增加删除效率比LinkedList效率低,这句话并不是在任何情况下都成立。

插入效率:
ArrayList和LinkedList默认add()方法都是尾插法
头部插入:ArrayList效率最低,LinkedList效率最高,LinkedList快
中间插入:ArrayList效率一般,LinkedList效率最低,ArrayList快
尾部插入:ArrayList效率最高,LinkedList效率最高,ArrayList快

查询效率:
查第一个元素:ArrayList和LinkedList一样快
查中间的元素:ArrayList比LinkedList快
查最后一个元素:ArrayList和LinkedList一样快

具体参考大佬的链接:

http://t.csdn.cn/2Fbri

mybatis-plus

设置数据库字段为null

把数据库中某个字段设置为null(这种方法不需要在属性上多加注解,亲测没问题)

package com.hebi;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.hebi.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class ApplicationTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void test01(){
        // 把数据库中age为18的数据的username和address字段设置为null

        // 方法一
        UpdateWrapper<User> updateWrapper=new UpdateWrapper<>();
        updateWrapper.set("username",null).set("address",null).eq("age",18);
        userMapper.update(null,updateWrapper);

        // 方法二
        LambdaUpdateWrapper<User> lambdaUpdateWrapper=new LambdaUpdateWrapper<>();
        lambdaUpdateWrapper.set(User::getUsername,null).set(User::getAddress,null).
                eq(User::getAge,18);
        userMapper.update(null,lambdaUpdateWrapper);
    }
}

还有其他大佬总结的

http://t.csdn.cn/GYlpK

http://t.csdn.cn/CwwQ6

http://t.csdn.cn/vPG3L

复杂条件and和or连接

sql语句为

SELECT * FROM activity WHERE
(
(type=0 AND is_long_term=1 AND end_date>NOW())
OR
(type=3 AND end_date>NOW())
OR
(type=5)
)
AND `status`=1;

方式一:java代码为

package com.hebi.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hebi.domain.Activity;
import com.hebi.mapper.ActivityMapper;
import com.hebi.service.ActivityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * Created by 任王胡 on 2023/9/8 21:16
 */
@Service
public class ActivityServiceImpl implements ActivityService {

    @Autowired
    private ActivityMapper activityMapper;

    @Override
    public List<Activity> findLongTimeAct() {
        QueryWrapper<Activity> queryWrapper = new QueryWrapper<>();
        // 方式一
        queryWrapper.eq("type",5)
        .or(qw->qw.eq("type",3).gt("end_date",new Date()))
        .or(qw->qw.eq("type",0).eq("is_long_term",1).gt("end_date",new Date()));
        queryWrapper.eq("status",1);

        // 方式二
        //queryWrapper.and(x -> x.eq("type", 0).eq("is_long_term", 1).gt("end_date", new Date()))
        //        .or(x -> x.eq("type", 3).gt("end_date", new Date()))
        //        .or(x -> x.eq("type", 5));
        //queryWrapper.eq("status",1);
        List<Activity> activityList = activityMapper.selectList(queryWrapper);
        return activityList;
    }
}

控制台日志:

==>  Preparing: SELECT activity_id,is_long_term,title,type,number_limit,start_date,end_date,create_date,create_by,update_date,update_by,status FROM activity WHERE (type = ? OR (type = ? AND end_date > ?) OR (type = ? AND is_long_term = ? AND end_date > ?) AND status = ?)
==> Parameters: 5(Integer), 3(Integer), 2023-09-08 23:17:32.612(Timestamp), 0(Integer), 1(Integer), 2023-09-08 23:17:32.612(Timestamp), 1(Integer)

方式二:java代码为

package com.hebi.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hebi.domain.Activity;
import com.hebi.mapper.ActivityMapper;
import com.hebi.service.ActivityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * Created by 任王胡 on 2023/9/8 21:16
 */
@Service
public class ActivityServiceImpl implements ActivityService {

    @Autowired
    private ActivityMapper activityMapper;

    @Override
    public List<Activity> findLongTimeAct() {
        QueryWrapper<Activity> queryWrapper = new QueryWrapper<>();
        // 方式一
        //queryWrapper.eq("type",5)
        //.or(qw->qw.eq("type",3).gt("end_date",new Date()))
        //.or(qw->qw.eq("type",0).eq("is_long_term",1).gt("end_date",new Date()));
        //queryWrapper.eq("status",1);

        // 方式二
        queryWrapper.and(x -> x.eq("type", 0).eq("is_long_term", 1).gt("end_date", new Date()))
                .or(x -> x.eq("type", 3).gt("end_date", new Date()))
                .or(x -> x.eq("type", 5));
        queryWrapper.eq("status",1);
        List<Activity> activityList = activityMapper.selectList(queryWrapper);
        return activityList;
    }
}

控制台日志:

==>  Preparing: SELECT activity_id,is_long_term,title,type,number_limit,start_date,end_date,create_date,create_by,update_date,update_by,status FROM activity WHERE ((type = ? AND is_long_term = ? AND end_date > ?) OR (type = ? AND end_date > ?) OR (type = ?) AND status = ?)
==> Parameters: 0(Integer), 1(Integer), 2023-09-08 23:25:59.104(Timestamp), 3(Integer), 2023-09-08 23:25:59.104(Timestamp), 5(Integer), 1(Integer)

json和对象,集合转换

注意:用的阿里的fastjson,复杂对象不能转化,会报错,只能转化简单对象

实体类

package com.hebi.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {

    private String username;

    private Integer age;

    private String address;

}

测试类

package com.hebi.test;

import com.alibaba.fastjson.JSON;
import com.hebi.domain.User;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class JsonTest {
    public static void main(String[] args) {
        // json和对象互转
        User user=new User();
        user.setUsername("张三");
        user.setAge(18);
        String userStr = JSON.toJSONString(user);
        System.out.println(userStr); // 对象转json

        String userJson="{\"address\":\"北京\",\"age\":18,\"username\":\"张三\"}";
        User user1 = JSON.parseObject(userJson, User.class);
        System.out.println(user1); // json转对象

        // json和集合互转
        User user2=new User();
        user2.setUsername("李四");
        user2.setAge(19);
        User user3=new User();
        user3.setUsername("王五");
        user3.setAge(20);
        List<User> userList=new ArrayList<>();
        Collections.addAll(userList,user2,user3);
        String userListStr = JSON.toJSONString(userList); // list转json
        System.out.println(userListStr);
        System.out.println("--------------");

        String userListJson="[{\"age\":19,\"username\":\"李四\"},{\"age\":20,\"username\":\"王五\"}]";
        List<User> userList1 = JSON.parseArray(userListJson, User.class);
        userList1.forEach(System.out::println); // json转list
    }
}

字符串变数字,自动补全数字前的0

数据库有个字段课程编号courseNo,string类型,要求从0001开始,以+1递增
问题:调用Integer.varlue()方法会把0001变成1,+1后变成2,无法得到0002,
所以调用String.format方法自动补全数字前面的0

public class StringTest {
    public static void main(String[] args) {
        // 数据库有个字段课程编号courseNo,string类型,要求从0001开始,以+1递增
        // 问题:调用Integer.varlue()方法会把0001变成1,+1后变成2,无法得到0002,
        // 所以调用String.format方法自动补全数字前面的0
        String courseNo="0001";
        Integer integer = Integer.valueOf(courseNo)+1;
        String format = String.format("%04d", integer); // 保留4位数,补全数字前面的0(要想保留5位数,把4改为5即可)
        System.out.println(format); // 0002
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值