实验室框架采用的是SSM,权限管理使用的是RBAC模型,依赖使用Maven进行管理。
SSM(Spring+SpringMVC+MyBatis)
Java
基本语法
注释{ 单行, 多行, 文档注释}
数据类型{
整型`
byte(-2^7^ ~ 2^7^)
short(-2^15^ ~ 2^15^)
int(-2^31^ ~ 2^31^)
long(-2^63^ ~ 2^63^)
浮点
小数默认double类型 所以 float f=0.1f; 多加一个f表示float类型
float maxF = Float.MAX_VALUE;
float的最大值
字符,char 定义单个字符
转义字符 ‘+’
Unicode 编码输出中文名
布尔类型
基本类型转换:
}
运算:
b=a++; 先赋值再自增
b=++a; 先自增再赋值
(条件1)&(条件2) 短路与 条件1不成立就不接着看条件2了
^ 异或 俩操作数不相同时返回true
三目运算符
(表达式)?a1:b2;
选择与循环语句
if…else…else if… else
switch(){
case 1:{ break; }
case 2:{ break; }
default: ;
}
数组
静态初始化
int []arr;
int arr[] = new int[]{1,2,3};
foreach方式
for(int i:arr){
System.out.println(j);
}
动态初始
int arry[] = new int[3];
面向对象
封装,继承,多态
String …hobbies 不固定参数
传到方法中的对象是可以方法中更改数值,在外部也变化的。
方法:
重载指的参数数量,类型不一样;
返回类型不同不算重载。
static
普通方法要 对象.方法
静态方法 类名.方法
访问控制权限
package 要导入其他包
构造块
通用代码块在实例化就会运行
静态代码块只要加载类就会执行
String类
直接赋值若值相同,指向同一地址;
new 每次都分配一个新的地址
== 比较的是引用
.equals() 比较的是内容
继承
子类可用用super()调用父类的构造方法
public Cat(int age, String name){
super(name, age);
}
final关键字
使用final声明的类不能被继承;
使用final声明的方法不能被子类覆盖;
使用final声明的变量不能被修改,即为常量;
抽象类
- 包含一个抽象方法的类是抽象类;
- 抽象类和抽象方法都要用abstract关键字修饰;
- 抽象方法只需要声明而不需要实现;
- 抽象类必须被子类(假如不是抽象类)必须重写抽象中的全部抽象方法;
- 抽象类不能被实例化
接口
方法不用实现
多态性
1,方法的重载和重写;
2,可以用父类的引用指向子类的具体实现,而且可以随时更换为其他子类的具体实现;
Object类
instanceof
匿名内部类
包装类:
基本类型和类类型转化然后操作
《Head First设计模式》
异常处理 27-28讲
try{
...
}catch(Exception e){
....
}
编译异常要捕获(try…catch)
运行异常可以不捕获
自定义异常
JAVA常用类
Date类
Calandar.MONTH从0开始 要+1
SimpleDateFormat 用于日期和字符串转换
String VS StringBuffer
string通过 str+=“xxx”; 增加内容
在堆区中指向不同区域
对String复杂操作用StringBuffer 如append
在堆区中指向相同区域
Math 类
Arrays类
JAVA泛型
public class Prototyle<T extends type>{
private T t;
public Prototyle(T t){
super( );
this.t = t;
}
set()...
get()...
}
main(){
Prototyle<ex1> p1 = new Prototype<ex1>( new ex1());
Prototyle<ex2> p2 = new Prototype<ex2>( new ex2());
}
通配符泛型 32
反射
Class<?> c = Class.format("com.java1234.chap07.sec01.Student")
Student s = (Student) c.newInstance()
通过反射获得构造方法
Constructor<?>[] cons = c.getConstructors();
s = (Student) cons[0].newInstance("abc", 11 );
JAVA集合
ArrayList.size() .add(str) .remove(int) .set(int, str)
LinkedList.indexof(str) .peekFirst()
双向链表
集合的遍历
Iterator
LinkedList<Student> list = new LinkList<Student>();
Iterator<Student> it = list.iterator( );
while(it.hasnext()){
...
}
foreach
for(Student s:list) {
System.out.println(s);
}
set集合
HashSet是无序且不重复的
Map<K,V>
hashmap.get(key) 获得value
value获取key只能手写遍历
Java多线程 37-38讲
Class extends Thread
synchronized 线程锁
I/O流
File file=new File("dir");
InputStream inputStream= new FileInputStream(file);
OutputStream outputStream = new FileOutputStream(file);
OutputStream outputStream = new FileOutputStream(file, true);
Buffer
BufferedInputStream bufferedinputStream =new BufferedInputStream(new FileInputStream("C://Users//83926//Desktop//1).txt"));
BufferedOutputStream bufferedoutputStream =new BufferedOutputStream( new FileOutputStream("C://Users//83926//Desktop//11.txt"));
Reader Writer
Reader reader=new FileReader(file);
char c[]=new char[1024];
int len=reader.read(c);
debug
F6 单步 F8 完成 F5进入方法
ctrl+shift+i 查看表示式值
动态修改
快捷键:
main alt+/ 可以获得提示
syso alt+/ 可以获得输出语句
ctrl+shift+o 自动导入包
ctrl+shift+/ 多行注释
ctrl+d 删除当前行
alt+shift+s 弹出菜单选择自动生成get和set方法
alt+/ 打开所选函数的重载
选区按住alt 按方向键可以移动位置
ctrl+o 搜索当前class的属性,方法
Mysql
环境搭建
- 安装mysql
- 安装SQLyog可视化软件
- 安装apach-tomcat
- eclipse配置server以及JARs
查询语句
IN / NOT IN
BETWEEN A AND B
LIKE %任意字符 _单个字符
IS NULL
ORDER BY ASC/DESC 升序/降序
GROUP BY 分组查询{
GROUP_CONCAT()函数一起使用
和聚合函数一起使用 例如COUNT()
HAVING一起使用
WITH ROLLUP一起使用 在最后一行加总和
}
LIMIT 0,5 ; 从0开始数五条
聚合函数
COUNT() AS total 以total命名表头
SUM()
AVG()
MAX()
MIN()
??如何找到各年级年龄最大的学生 【未解决】
连接查询
笛卡尔乘积
左连接有左表全部信息 a LEFT JOIN b ON c
右连接有右表全部信息 a RIGHTJOIN b ON c
子查询
合并查询
UNION 合并查询结果(不可重复)
UNION ALL 合并查询结果(可重复)
表取别名 t_book t
字段取别名 AS
插入删除数据
索引 11-12讲
提高查询速度;
视图
1.简化
2安全性
3逻辑独立性
CREATE VIEW x AS SELECT * FROM t_book;
SHOW TABLE STATUS LIKE ‘v3’;
替换view
CREATE OR REPLACE VIEW x AS SELECT * FROM t_book;
ALTER VIEW x AS SELECT * FROM t_book;
更新视图
INSERT INTO v1 VALUES (null.‘xx’,123,‘feng’,1);
UPDATE v1 SET bookName=‘java’ WHERE id=5;
DELETE FROM v1 WHERE id=5;
DROP VIEW IF EXISTS v4;
触发器
CREATE TRIGGER trig_bnum AFTER INSERT
ON t_book FOR EACH ROW
UPDATE t_bookType SET bookNum=bookNum+1 WHERE new.bookTypeid=t_booktype.id;
触发器触发多个效果
DELIMITER |
CREATE TRIGGER trig_book2 AFTER DELETE
ON t_book FOR EACH ROW
BEGIN
UPDATE t_booktype SET bookNum=bookNum-1 WHERE old.booktypeid=id;
INSERT INTO t_log VALUES(NULL,NOW(),'删除了一条book数据');
END
|
DELIMITER;
SHOW TRIGGERS
DROP TRIGGERS trig_book;
存储过程,存储函数
游标 【未解决】 18讲
流程控制
DELIMITER &&
CREATE PROCEDURE pro_user(IN bookId INT)
BEGIN
SELECT COUNT(*) INTO @num FROM t_user1 WHERE id=bookId;
IF @num>0 THEN UPDATE t_user1 SET userName='ssss'WHERE id=bookId;
ELSE
INSERT INTO t_user1 VALUES(NULL,'111','222');
END IF;
END
&&
DELIMITER;
CALL pro_user(4);
CASE 语句
CASE @num
WHEN value THEN ...
WHEN value THEN ...
ELSE ...
END CASE
LOOP LEAVE
BEGIN
aaa:LOOP
SET totalNum=totalNum-1;
IF totalNum=0 THEN LEAVE aaa;
ELSE INSERT INTO t_user VALUES(totalNum,'xxxx','aaaa');
END IF
END LOOP aaa;
END
ITERATE
IF value THEN ITERATE aaa; 跳过本次循环
REPEAT
BEGIN
REPEAT
SET totalNum=totalNum-1;
INSERT INTO t_user VALUES(totalNum,'xxxx','aaaa');
UNTILL totalNum=1;
END REPEAT
END
WHILE
BEGIN
WHILE totalNum>0 DO
INSERT INTO t_user VALUES(totalNum,'xxxx','aaaa');
SET totalNum=totalNum-1;
END WHILE;
END
19讲对存储过程和函数的操作
提示
建表id自增
当删除一列时对应id列为空,可以通过insert固定位填充且不会影响自增。
例如自增下一次为id=11. 此时删除id=7,插入values(7,xxx)
下次插入values(null,xxx) id为11
数据备份