ArrayList和LinkedList
ArrayList的查询,修改效率比LinkedList高,增加删除效率比LinkedList效率低,这句话并不是在任何情况下都成立。
插入效率:
ArrayList和LinkedList默认add()方法都是尾插法
头部插入:ArrayList效率最低,LinkedList效率最高,LinkedList快
中间插入:ArrayList效率一般,LinkedList效率最低,ArrayList快
尾部插入:ArrayList效率最高,LinkedList效率最高,ArrayList快
查询效率:
查第一个元素:ArrayList和LinkedList一样快
查中间的元素:ArrayList比LinkedList快
查最后一个元素:ArrayList和LinkedList一样快
具体参考大佬的链接:
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);
}
}
还有其他大佬总结的
复杂条件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
}
}