目录
参加学校实训记下的一些知识点
java核心
ArrayList, Map
对比ArrayList与vector:
ArrayList线程不安全,第一次扩容到10,后面扩容到1.5倍
vector线程安全,扩容2倍
map:
HashMap使用红黑树存储同key的值,大于8个节点才会树化
hashMap线程不安全,hashTable线程安全
StringBuild线程不安全,StringBuffer线程安全
Lambda
Lambda:可以理解为函数式接口(只有一个抽象方法或加注解@FunctionalInterface)的实例对象
语法:(参数类型 参数名称) ‐> { 代码语句 }
小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
省略:
小括号内参数的类型可以省略;
如果小括号内有且仅有一个参,则小括号可以省略;
如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号
常用函数式接口:
Supplier接口:获取一个泛型参数指定类型的对象数据
Consumer接口:使用一个指定泛型的数据
Function接口:根据一个类型的数据得到另一个类型的数据
Predicate接口:对某种类型的数据进行判断,从而得到一个boolean值结果
创建线程
java
new Thread(新线程).start();
new Thread(()->{线程执行代码}).start(); //Lambda表达式
stream流
对list进行多次处理
java
list.stream().filter(s ‐> s.startsWith("张"))
.filter(s ‐> s.length() == 3)
.forEach(System.out::println);
快捷键:
alt+enter 自动结构纠错
小巧思:
判断是否是奇数:与1进行&运算,得到2进制的最后一位,是0则是偶数,是1则是奇数
java
(Integer&1)==1
SQL
数据表:is_deleted 逻辑删除,bool值
创建时间 create_time
修改时间 update_time
MyBatis-Plus
分页
分页将大量数据分割成多个小块(页Page)进行显示和处理
动态sql
动态sql语句:
动态查询:不确定有哪些条件的条件查询
xml
select * from
<where>
<if test="user.id!=null">
id=#{user.id}
</if>
<if test="user.loginName!=null">
and login_name=#{user.loginName}
</if>
</where>
动态输入:循环输入所有数据
xml
update user set is_deleted=1 where id in (
<foreach collection="ids" item="x" sparator=",">
#{x}
</foreach>
)
关联查询
1对1关联查询:查询一个对象会顺带查出另一个唯一的对象
例:根据班级id查询班级信息,顺带查老师的信息
java
public class Classes {
private int id;
private String name;
private Teacher teacher;
}
public class Teacher {
private int id;
private String name;
}
进行查询并定义sql映射文件ClassMapper.xml
xml
<!--SQL查询部分-->
<!--指定使用名为ClassResultMap的结果映射来处理查询结果-->
<select id="getClass" parameterType="int" resultMap="ClassResultMap">
<!--从class表(别名c)和teacher表(别名t)联合查询-->
select * from class c, teacher t where c.teacher_id=t.t_id and c.c_id=#{id}
</select>
<!--结果映射部分-->
<resultMap type="Classes" id="ClassResultMap">
<!--主映射:班级对象-->
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<!--关联映射:教师对象-->
<association property="teacher" javaType="Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
</resultMap>
1对n关联查询:查询一个对象会顺带查出另一堆的对象
例:根据classId查询对应的班级信息,包括学生,老师
java
public class Student {
private int id;
private String name;
}
public class Classes {
private int id;
private String name;
private Teacher teacher;
private List<Student> students;
}
进行查询并定义sql映射文件ClassMapper.xml
xml
<select id="getClass3" parameterType="int" resultMap="ClassResultMap3">
select * from class c, teacher t,student s where c.teacher_id=t.t_id and c.C_id=s.class_id and c.c_id=#{id}
</select>
<resultMap type="Classes" id="ClassResultMap3">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association property="teacher" column="teacher_id" javaType="Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
<!-- ofType指定students集合中的对象类型 -->
<collection property="students" ofType="Student">
<id property="id" column="s_id"/>
<result property="name" column="s_name"/>
</collection>
</resultMap>
映射关系:column是数据库列名,property是java定义的属性名
雪花算法:确保id唯一
maven
引入第三方jar
优先看本地有没有需要的依赖包,不同项目可以共享
Spring
控制反转IOC:创建对象的权力在容器(第三方)而不在类里
依赖注入DI:类需要其它类实例时,通过容器注入获得(加上注解的类可以获得容器里的实例)
目的:降低耦合性
3层架构
持久层mapper:操作数据库
业务层service:实现业务逻辑
控制层control:接收HTTP请求
wrapper:条件构造器,查询条件有多个时使用
QuerWrapper:字段查询
LambdaQuerWrapper:属性查询
@param() 别名
VUE3
组件
vue组件包含3个部分:script, template, style
java
//类似js
<script setup>
//定义常数
const age=2
//两种定义函数的方式
const xxx = function(){
}
const yyy = () => {
}
</script>
//类似html
<template>
</template>
//类似css
<style scoped>
</style>
{{}}里写表达式(文本插值)
v-前缀特殊属性
v-text, v-html,
v-if(判断标签是否存在,不存在时开发者工具都不显示),
v-show(判断标签是否显示),
v-for(遍历数组),
v-bind(将变量的值绑定到属性,可以缩写为:),
v-on(给标签添加事件,事件本质是方法,可以缩写为@),
v-model(双向绑定表单元素的值,数据需要是响应式数据ref)
html
<!--两种效果相同-->
<h1>{{name}}</h1>
<h1 v-text="name"></h1>
响应式基本类型:ref
响应式对象:reactive
路由
router路由进行页面跳转,可传递参数
可以当页面的组件有路由,其它组件挂着在页面上无路由
给页面一个路由:
1.创建路由
javascript
const routes = [
{
path: '/demo',
name: 'Demo',
component: Demo
}
] // main.js如果没路由需要添加app.use(router)
2.原页面使用
html
<div id="app">
<router-link to="/demo">跳转到Demo页面</router-link>
<router-view></router-view>
</div>
组件间传递值
父组件->子组件:defineProp直接传递
子组件->父组件:子组件修改一个变量,父组件监控这个变量并触发方法
onMounted (页面加载完成后执行的方法)
代理
前端服务器会根据请求前缀判断是不是对后端的请求,然后进行处理
javascript
//vite.config.js进行配置
server: {
host: 'localhost',
port: 5173, //端口
https: false, //false关闭https,true为开启
proxy: {
'/api': { //前缀为api时
target: 'http://127.0.0.1:8080',
ws: true,
changeOrigin: true, //允许跨域
rewrite: (path)=>path.replace(/^\/api/, '/api')
}
}
发送请求
使用axios发送请求
get请求数据
javascript
//get方法参数:get(url,{param:{}})
//url?xxx=yy&aa=bb
//方式1
axios.get('/ss?loginName='+loginName.value+'&password='+password.value).then((res)=>{
//请求成功后执行
}).catch((error)=>{
//处理错误
}).finally(()=>{
})
//方式2
axios.get('/ss',{params:{loginName:loginName.value,password:password.value}})
//方式3
axios.get(`/ss?loginName=${loginName.value}&password=${password.value}`)
post提交数据
javascript
//post(url,data)发送json数据
axios.post('/ss',{loginName:loginName.value,password:password.value})
element-plus
vue样式,有各种样式