Arrays工具类
使用Arrays.sort( )对自定义类进行排序的时候,这个类需要实现(implements) Comparable<类名>,然后重写compareTo( )这个方法。
Lambda表达式
Lambda表达式,必须要有一个接口类,并且这个接口类中只有有一个抽象方法,注意:不能是抽象类,只能是接口。
(重写方法的参数列表)->{重写方法的代码
};
Lambda简化
(o1,o2)->{重写方法的代码
};
(o1,o2)-> 重写方法的代码;
Mybatis常用标签
<update id="update" parameterType="Category">
parameterType
:通过mapper传递过来的参数类型。
<select id="list" resultType="Category">
resultType
:MyBatis会根据SQL语句的结果集中的列名与resultType
类型的属性进行自动映射,将每一行数据转换为一个resultType
实例。
<insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">insert into dish_flavor(dish_id, name, value) values<foreach collection="flavors" item="df" separator=",">(#{df.dishId},#{df.name},#{df.value})</foreach
</insert>
useGenerateKeys
:这是一个属性设置,表示开启JDBC的getGeneratedKeys功能来获取数据库自动生成的主键值。许多数据库系统(如MySQL、SQL Server等)支持在插入数据时自动为某些列生成唯一标识符(通常是主键)。通过设置useGeneratedKeys="true"
,MyBatis可以将这些自动生成的主键值映射到实体对象中。
keyProperty
:指定主键为谁。
@Transactionalpublic void saveWithFlavor(DishDTO dishDTO) {Dish dish = new Dish();BeanUtils.copyProperties(dishDTO,dish);//向菜品表添加数据dishMapper.insert(dish);//获取dishIdlong dishId=dish.getId();//向口味表插入n条数据List<DishFlavor> flavors=dishDTO.getFlavors();if(flavors!=null&& flavors.size()>0){flavors.forEach(dishFlavor -> {dishFlavor.setDishId(dishId);});//非空数据dishFlavorMapper.insertBatch(flavors);//保持一致,都为flavors}}
collection
:通常是传递过来一个集合,collection的值和传递过来的值保持一致。
item
:依次遍历collection这个集合,每一次遍历出来的对象叫做item
。
separator
:一次遍历完了之后和下一次遍历的结果之间的分隔符
Mybatis配置文件
mybatis:#mapper配置文件mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.sky.entity #设置别名configuration:#开启驼峰命名map-underscore-to-camel-case: true
PageHelper
public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {//设置当前的页码是多少,以及当前页面有多少个数据PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());//查询结果封装在Page中Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);//获取查询到的所有的数据数量long total=page.getTotal();//拿到分页查询的数据List<Employee> records=page.getResult();//返回PageResultreturn new PageResult(total,records);
}
Annotation自定义注解
public enum OperationType {//更新操作UPDATE,//插入操作INSERT
}@Target(ElementType.METHOD) //注解只能加在方法上
@Retention(RetentionPolicy.RUNTIME) //注解在运行期间起作用
public @interface AutoFill {//数据库操作类型:update insertOperationType value();
}
@Aspect
@Component
@Slf4j
public class AutoFillAspect {//切入点//锁定com.sky.mapper包下的所有类的所有方法,并且标注了AutoFill这个注解的方法就会被拦截进行填充处理@Pointcut("execution(* com.sky.mapper.*.*(..))&&@annotation(com.sky.annotation.AutoFill)")public void autoFillPointCut(){}//通知@Before("autoFillPointCut()")public void autoFill(JoinPoint joinPoint){MethodSignature signature= (MethodSignature) joinPoint.getSignature();//获取调用函数签名AutoFill autoFill=signature.getMethod().getAnnotation(AutoFill.class);//获取到注解对象OperationType operationType = autoFill.value();//获取注解上的value-->如何操作数据库。Insert or Update//获取当前被拦截的方法的参数Object[] args = joinPoint.getArgs();if(args == null || args.length==0){return;}Object entity = args[0];//要操作的对象的实体//准备赋值的数据LocalDateTime now = LocalDateTime.now();Long currentId = BaseContext.getCurrentId();//根据不同的操作类型,为对应的属性通过反射赋值if(operationType == OperationType.INSERT) {try {//获取方法Method setCreateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_TIME, LocalDateTime.class);Method setCreateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_USER, Long.class);Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class);Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class);//通过反射给对象属性赋值setCreateTime.invoke(entity, now);setCreateUser.invoke(entity, currentId);setUpdateTime.invoke(entity, now);setUpdateUser.invoke(entity, currentId);} catch (Exception e) {e.printStackTrace();}}else{try {Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class);Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class);//通过反射给对象属性赋值setUpdateTime.invoke(entity, now);setUpdateUser.invoke(entity, currentId);} catch (Exception e) {e.printStackTrace();}}}
}