总!
-
## 7月9号:
-
学习的整体框架:
-
Java 定义了 4 种整数类型变量:字节型(byte)、短整型(short)、整型(int)和长整型(long)。
常量:final 数据类型 常量名
-
重要规范:
-
强制类型转换:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wiKhaBvv-1658893825559)(C:\Users\xuezihan123\AppData\Roaming\Typora\typora-user-images\image-20220711105935597.png)]
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-87SaFFAj-1658893825561)(C:\Users\xuezihan123\AppData\Local\Temp\type.png)]
1个字节=8位
byte: 1个字节,不考虑负数能表示范围是:0255(2的八次方=256),考虑正负表示范围:-128127
short:2个字节,16位 65536 0~65535
int: 4个字节,考虑正负:-21亿~+21亿
long:8个字节
float: 4个字节
double:8个字节
char字符型:2个字节,采用的是Unicode编码每个字符在编码表里面都对应一个int整数
Boolean: 只有true和false两种情况
-
数据类型转换:
1、从小到大自动类型转换
2、从大到小需要强制类型转换,可能会丢失精度
byte->short(char)->int->long->float->double
-
&&:两边的结果都是true,结果才是true
||:两边只要有一个是true,结果就是true
-
在程序运行前进行判断,若有非法输入,则使用:System.exit();
-
**三目运算符号:**语法:boolean ? 数1 : 数2。
-
-
## 7月11号
-
数组:int[] array = new int[4];
-
java.lang.Array Index OutOf Bounds Exception: 4
数组下标越界异常(Index:bounds:边界 OutOf:超出 Exception:异常)
-
数组的排序:冒泡排序 (双重For循环)
-
快捷键集合笔记链接:D:\思途笔记\笔记\快捷键集合.md
-
instanceof:是二元运算符
instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。
-
类和对象:抽象、封装、继承、多态
-
数据类型的默认值:
int类型默认值是:0
double类型默认值是:0.0
boolean类型默认值是:false
String类型默认值是:null
int[]类型默认值是:null
Student[]类型默认值是:null
boolean[]类型默认值是:null
-
属性私有,通过get、set方法访问。
-
构造方法:
特点:1、方法名和类名一样 2、没有返回值
//无参构造方法
//如果不写,Java默认提供这样一个无参构造方法.
//如果你写了,Java就不会再提供这个无参构造方法
-
this代表当前对象,把通过构造方法传递过来的值,赋值给当前对象的id。
- ## 7月13号
继承,重载,重写,抽象,多态
-
你继承谁你就是谁,继承是一种严格的父子关系(在父类里面抽取的属性和方法一定是所有子类所共有)
-
private:只在当前类里面可以访问(子类也不能访问)
public:任何地方都可以访问
protected:提高代码复用性。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6hBOM7NR-1658893825561)(C:\Users\xuezihan123\AppData\Local\Temp\707_0 (1)].png)
-
super();
-
重载(overload):
在同一个类里面,允许存在一个以上同名方法,只要他们参数类型和参数个数不同即可。
同一个类中看同名方法的参数列表。(构造方法重载)
-
重写/覆盖(@Override):
1、子类覆盖父类,必须保证子类权限大于父类权限才可以覆盖,否则会编译失败。
2、如果父类是private的方法,子类是默认方法,那么子类是不知道这个方法的,不是覆盖。
-
多态:
在子类中重写父类方法,在测试类中创建方法时,声明写父类 如Cal cal;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K1c46CUU-1658893825562)(C:\Users\xuezihan123\AppData\Roaming\Typora\typora-user-images\image-20220713161349596.png)]
-
抽象类:
1、抽象方法是没有方法体(method),如果这个类里面有抽象方法,这个类必须变成抽象类。
2、如果这个类是抽象类,并不要求这个类一定要有抽象方法
3、抽象类里面可以有普通方法,也可以有抽象方法。
4、如果一个类是抽象类,那么这个类就不能被new实例化,只能被其他类继承。
5、抽象方法可以理解为父类(抽象类)定义的一个模板或者规范(自己本身不实现),子类必须实现这个抽象方法,如果子类不想实现这个方法,那么这个子类也必须要变成抽象类。
-
接口interface:
1.接口是一个纯粹的抽象类(接口里面所有的方法都是抽象方法),接口里面的方法都是抽象方法 public abstract。
2.接口里面所有的属性public static final
-
接口与抽象类的区别:🤕
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。另外,接口和抽象类在方法上有区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
3.抽象类中可以有普通成员变量,接口中没有普通成员变量
-
抽象类中的抽象方法的访问类型可以是public,protected和默认类型
-
抽象类中可以包含静态方法,接口中不能包含静态方法
-
抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型
-
一个类可以实现多个接口,但只能继承一个抽象类。
-
-
final:(最终的意思)
final变量:这个变量就不能被修改,常量 ,接口里面: public static final double PI = 3.1415;
final类:这个类就不能被继承
final方法:这个方法就不能被重写
- 7月14号:
-
static静态属性、静态方法:(经常被写成静态类Math,ArrayUtil)
1、静态方法:如果一个static方法则最好使用【 类名 点 方法 】Student.print(),此静态方法属于这个类。静态方法中没有实例时,不能调用this super 。
2、静态属性:
3、静态的方法只能访问静态的方法和静态的属性(因为当前对象的实例可以没有创建,所以静态的方法是没办法调用非静态的方法和属性的)
4、静态的方法中不能写this、super关键字(因为当前的对象实例可能还没有创建,代表当前类对象的this还有代表父类对象的super可能都还没有创建)
5、非静态的属性和方法(实例属性和方法)必须通过new对象访问,而静态的属性和方法是属于类的,在类加载到内存中就可以访问,被所有对象所共享。
-
String:
-
== 比较的是地址 equals 比较的是内容
-
s1 = “aBC”;
-
s1 = “AbC”;
-
s1.equals(s2); // false 不忽略大小写
-
s1.equalsIgnorecase(s2); // true 忽略大小写
-
-
常量池问题:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wQOTebGr-1658893825563)(C:\Users\xuezihan123\AppData\Local\Temp\701_0.png)]
-
String API:
startswith(String prefix/suffix) 以······开头 prefix 前缀 suffix 后缀
-
String、StringBuffer、StringBuilder异同点:
相同点:都是final类,都不能被继承。
不同点:1、String长度是不可改变的,StringBuffer、StringBuilder长度是可变的。
2、StringBuffer是线程安全(需要加锁,效率低)、StringBuilder是线程不安全(没有加锁,效率高)。
-
包装数据类型:
Java是纯面向对象语言,int、double都是基本数据类型。
int Integer
char Character
double Double
long Long
short Short
boolean Boolean
byte Byte
定义全局的变量是用Integer ,局部方面的话
-
🆘Static静态代码块知识点笔记 ⭐️
链接:https://app.yinxiang.com/fx/31dc0cd8-c357-4674-b331-c77128ebd79e
-
ArrayList LineList HashMap HashSet:
Collecton接口常用的子接口有:List接口、Set接口
List接口常用的子类有:ArrayList类、LinkedList类(链表)
Set接口常用的子类有:HashSet类、LinkedHashSet类
List允许有重复的元素,有序。
Set不予许有重复元素,无序。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mcTbacxk-1658893825563)(C:\Users\XUEZIH~1\AppData\Local\Temp\17200016-b868ad987c4947ceb76c42b44887c783.png)]
-
值传递和引用传递:💖
又错了的人来回答一下:
String a = “a”;
String b = “a”;
这样定义的a和b指向的是字符串常量区变量,地址是一样的,即用equals为true,用==也为true。
但是
String a =new String( “a”);
String b = new String( “a”);
这样是定义了两个堆内存对象,只能equals,不能==
例题:
String s1=new String( ” xyz ” );
String s2=new String( ” xyz ” );//在堆中建了两个“xyz”,不是同一个
Boolean b1=s1.equals(s2);
Boolean b2=(s1==s2);
System .out.print(b1+ ” ” +b2);
答案:
TRUE FALSE
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CJDQQyPa-1658893825564)(C:\Users\xuezihan123\AppData\Roaming\Typora\typora-user-images\image-20220715092234861.png)]
synchronized是Java中的关键字,是一种同步锁。
它修饰的对象有以下几种:
-
修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
-
修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
-
修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
-
修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。
-
- ## 7月15号 MySql
-
主键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一
标识一条记录,该属性组就可以成为一个主键 。
-
外键:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外
键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被
称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。
-
字段属性设置:
1、not null: 不为空,表示该字段不能放“null”这个值。不写,则默认是可以为空
2、auto_increment: 设定int类型字段的值可以“自增长”,即其值无需“写入”,而会自动获得并增加
此属性必须随同 primary key 或 unique key 一起使用。primary key = unique key + not null
3、primary] key: 设定为主键。
是唯一键“加强”:不能重复并且不能使用null,并且可以作为确定任意一行数据的“关键值”,
最常见的类似:where id= 8; 或 where user_name=‘zhangsan’;
通常,每个表都应该有个主键,而且大多数表,喜欢使用一个id并自增长类型作为主键。
但:一个表只能设定一个主键。
4、unique [key] : 设定为唯一键:表示该字段的所有行的值不可以重复(唯一性)。Duplicate entry ‘zhangsan’ for key ‘name’
5、default ‘默认值’: 设定一个字段在没有插入数据的时候自动使用的值。
6、comment ‘字段注释’
-
PRIMARY KEY 主键,不能重复,唯一确定一条记录 (unique+not null)
AUTO_INCREMENT 自动增长
varchar(10) char(10)区别:
同点:都可以最大放10个字符
不同点:char(10)不管输入的是多少都会占10个字符,例如输入名字“张三”只有两个字符,
但是使用char(10)在数据库里面还是占10个字符的空间。
使用varchar(10)最大支持是10个字符,但是实际长度就是输入字符长度,例如输入名字“张三”只有两个字符,
那么在varchar(10)里面就只占两个字符。
-
联合主键:
PRIMARY KEY(banji_id,course_id), -- 联合主键 FOREIGN KEY(banji_id) REFERENCES banji(id), -- banji_id既是联合主键又是外键 FOREIGN KEY(course_id) REFERENCES course(id) -- course_id既是联合主键又是外键);
-
多表查询:
SELECT * FROM student WHERE banji_id=2; SELECT id FROM banji WHERE `name`='java1812'; SELECT * FROM student WHERE banji_id=(SELECT id FROM banji WHERE `name`='java1812');
-
inner join(关联查询):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pGwxi0rc-1658893825565)(C:\Users\xuezihan123\AppData\Local\Temp\668_0.png)]
-
**select查询:**group by之后使用having
-- 4、查询该店每个栏目下挤压的货款 > 20000 SELECT cat_id,SUM(goods_number*shop_price) AS total_price FROM goods GROUP BY cat_id HAVING total_price>20000;-- having
-
模糊查找:like
1、like模糊查找用于对字符类型的字段进行字符匹配查找。
2、要查找的字符中,有两个特殊含义的字符:% , _:
2.1: %含义是:代表0或多个的任意字符
2.2: _含义是:代表1个任意字符
2.3: 这里的字符都是指现实中可见的一个“符号”,而不是字节。
3、语法:like ‘%关键字%’
SELECT * FROM student WHERE `name` LIKE '张%'; -- 以张开头 SELECT * FROM student WHERE `name` LIKE '张_'; -- 以张开头,而且名字是两个字 SELECT * FROM student WHERE `name` LIKE '%张%'; -- 名字里面只要有张就可以
-
分组查询:
-
范式:
第一范式:原子性
第二范式:唯一性(消除非主键依赖联合主键中的部分字段)
第三范式:独立性,消除传递依赖(非主键值不依赖于另一个非主键值,都应该依赖于主键)
-
异常:
-
ArrayIndexOutofBoundsException 数组下标越界异常
-
NullPointerException 空指针异常
-
StringIndexOutofBoundsException 字符串下标越界异常
-
ArithmeticException 算数异常
-
ClassCastException 类型转换异常
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PANw0IjR-1658893825565)(C:\Users\XUEZIH~1\AppData\Local\Temp\Image.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ChHjrvFR-1658893825566)(C:\Users\xuezihan123\AppData\Roaming\Typora\typora-user-images\image-20220719091038345.png)]
多重捕获块(多个catch)
try {
需要检测的代码(可能会抛出异常,也可能不会抛出异常)
} catch (异常的类型1 异常类型的变量1) {
捕获异常后处理异常
} catch (异常的类型2 异常类型的变量2) {
捕获异常后处理异常
} catch (异常的类型3 异常类型的变量3) {
捕获异常后处理异常
} finally {
一定会被执行的代码(不管异常抛不抛出都会执行,例如数据库释放连接)
}
自定义异常:
1、所有的异常的都是Throwable的子类
2、如果写一个运行时异常,需要继承RuntimeException
3、如果要写一个编译时异常,继承Exception
案例:模拟银行转账,可以实现存钱和取钱的功能取钱时候如果余额不够就抛出异常
MeiQianException
-
-
JDBC:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QPjuX6Vj-1658893825567)(C:\Users\xuezihan123\AppData\Roaming\Typora\typora-user-images\image-20220718160638014.png)]
-
JDBC开发步骤:😵
1、加载驱动Class.forName(“”);
2、获得连接对象Connection
3、写sql语句
4、创建Statement(一艘船)
5、执行sql语句
(1) 更新类(更改了表里面数据):delete/update/insert executeUpdate()
返回值:int,表示你影响的行数
(2)查询(没有改变表里面数据): select executeQuery()
返回值:结果集ResultSet6、关闭连接
-
## 7月19日
-
HTML:超文本标记语言 定义页面结构
-
CSS:层叠样式表 页面显示的样式
-
BootStrapJS: JavaScript 界面交互(动态交互) JQuery
-
HTML:
-
< ; less than < > great than > © © < h1 > 在HTML页面输出:<h1>
table:
th:table head
tr:table row
td:table data 单元格
- form表单:
-
Css:
**语法:**选择器 { 属性名1:属性值1; 属性名2:属性值2; 属性名3:属性值3; 属性名4:属性值4;}
**CSS使用:**1、通过选择器选择上标签2、在选择的标签上设置样式
**选择器分类:**标签选择器: p{}类选择器: .className{}id选择器: #id{}
一些常见的样式:
color:red; 文字颜色 font-size:40px; background-color:blue;
text-decoration:underline;//下划线 text-decoration:none; //去掉下划线
-
CSS高级选择器:(直接看代码)前三个重要
s1 s2 后代选择器
s1,s2 并集选择器(选择器组)
s1s2 交集选择器(既满足选择器1也满足选择器2)
s1>s2 直接儿子选择器,和后代选择器不一样
s1+s2 下一个兄弟选择器,后面紧挨着的第一个兄弟
-
-
盒模型:
盒子中主要的属性就5个:width、height、padding、border、margin。
padding:内边距 margin:外边距
-
**border:**就是边框。
边框有三个要素:粗细、线型、颜色。
实线:solid 点:dotted 虚线: dashed
颜色如果不写,默认是黑色。另外两个属性不写,显示不出来边框。
border是一个大综合属性:border:1px solid red;
border属性能够被拆开,有两大种拆开的方式:
1) 按3要素:border-width、border-style、border-color
2) 按方向:border-top、border-right、border-bottom、border-left
-
什么是Bootstrap? 简洁、直观、强悍的前端开发框架,让web开发更迅速、简单。
-
- ## 7月20号:
-
JS:解释型语言
-
变量都用var,console.log();用来输出值。使用网页端的F12查看
-
DOM:
元素节点的获取:document.getElementById( id属性值);document.getElementsByTagName(“标签名”);
-
关系运算符:
全等:===
不全等:!==
判断值是不是相等 ,还有类型是不是相等。
-
String和java一样使用:String常用的方法:
1、大小写转换
str.toLowerCase();
str.toUpperCase();
var str = “Hello jS!”;
console.log(str.toLowerCase());//hello js!
console.log(str.toUpperCase());//HELLO JS!
2、获取指定字符:
str.charAt(index)
返回指定位置的字符index:字符位置
console.log(str.charAt(6));//j
3、查询指定字符串出现索引
str.indexOf(findstr, [index]);
str.indexOf(findstr);
str.indexOf(findstr,index);
str.indexOf(findstr,[index])
str.lastIndexOf(findstr, [index]);
使用说明:
findstr:查找的字符串index:开始查找的位置索引,可以省略
返回findstr在x中出现的首字符位置索引,如果没有找到则返回-1
lastIndexOf:从后面找起
4、split() 方法用于把一个字符串分割成字符串数组。x.split(separator,howmany)
separator : 字符串或正则表达式,从该参数指定的地方分割 stringObject
howmany:指定返回数组的最大长度,可以省略返回分割后的字符串数组
-
Boolean
Java中条件表达式必须返回布尔类型
2<3
JS中表达式可以是任意表达式.
1不是0,就是非空值,表示true。
在JS里面一切表示空的值都是false,非空的值都是true。
-
eval:
console.log(eval(‘2+3’)); //5
eval(‘var x=10;var y=20;console.log(x*y);’); //200
-
innerText 直接当成一个字符串展示
innerHtml 将内容当成html来解析
-
数组:
push pop 输入输出数据
-
-
Servlet:
-
实现步骤:1、创建类继承HttpServlet 2、覆盖未实现的方法–service方法[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3lHI776j-1658893825568)(C:\Users\xuezihan123\AppData\Local\Temp\1146_0.png)]
-
JSP:
Servlet的作用: 用java语言开发动态资源的技术!!!
JSP的作用:用java语言(+html语言)开发动态资源的技术!!!
JSP就是servlet!!!
JSP的脚本:(脚本就是一段代码)
语法:<%java代码 %>
作用: 执行java代码
JSP表达式:
语法:<%=变量或表达式%>
作用: 向浏览器输出变量的值或表达式计算的结果
-
- ## 7月21号(servlet连接jsp 可以页面显示了)
-
Servlet生命周期使用的方法:(面试会问)
构造方法:创建servlet对象的时候被调用。默认情况下,第一次访问这个servlet的时候调用构造方法创建对象。
构造方法只被调用一次,servlet对象在tomcat是单实例的。
init方法:initial 创建完servlet对象时候调用。只调用1次。
service:每次浏览器发出请求时候调用这个方法。调用n次。
destroy:销毁servlet对象的时候调用。停止服务器或者重新部署web应用时候会销毁servlet对象。只调用1次。
-
给超链接添加点击事件并触发:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vfsk5P4P-1658893825569)(C:\Users\xuezihan123\AppData\Local\Temp\1148_0.png)]
-
Servlet中的Get和Post对比:
-
Get:
1、采用URL请求路径传输参数。参数拼接在URL后面。
2、参数传输过程中隐私性较差,直接在URL后面。
3、路径可以容纳的数据有限,只能传递少量参数。
4、所有请求默认就是get。
-
POST:
1、采用实体内容传参数。
2、参数在传输过程中不可见,隐私性好。
3、实体内容专门用来传输数据,大小没有限制。
4、使用:在form上加method=“post”
不管是Get方式还是POST方式传参数,后台代码获取参数的方式都是一样的。
req.getParameter(“name”);
-
-
乱码问题解决:去网上搜
-
转发:(用于SelectAll的servlet)
req.setAttribute(“list”, list);
req.getRequestDispatcher(“student_list.jsp”).forward(req, resp);
-
重定向:(操作完成后返回之前的页面)
一般添加、删除、修改之后重定向到:查找所有
resp.sendRedirect(req.getContextPath() + “/student?method=selectAll”);
重定向的地址最终是由浏览器发送这个请求,浏览器只能定位到服务器上的tomcat,tomcat下面可能会有多个项目,无法确定是哪个项目,所以需要加上项目名。
重定向:是服务器把这个请求地址告诉浏览器,然后浏览发送这个请求/JavaWeb/student?method=selectAll
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-09XkKZVl-1658893825571)(C:\Users\XUEZIH~1\AppData\Local\Temp\chrome_drag2028_12940\Image.png)]
-
前台往后台发请求方式:
1、form表单
2、超链接
<a href="/JavaWeb/student?method=delete&id=1">删除</a>
3、location.href
4、ajax
-
总结以下:
-
建表,明确属性;
-
Mysql可以使用工具类JDBCUtil。(包含连接数据库的静态方法,异常抓取和关闭全部链接connection之类的)
-
创建pojo文件,写清私有属性(和数据库对应好),set get方法写全;
-
明确对数据的操作,具体是什么如何实现,创建servlet文件,对应操作写方法。
- 先创建值为空的connection,statement
-
写出对应的jsp,传值取值要注意。
跳转到一个JSP页面有两种方式:
1、浏览器直接请求这个JSP页面,一般这个页面不需要数据(查询页面等不需要输入的页面)
2、先访问Servlet,然后转发到这个JSP页面,访问Servlet可以可以查询数据,放到req中,转发到JSP页面展示(最常用的方法)
-
- ## 7月22日 分页
-
使用到的SQL语句:select * from student LIMIT 0,5;(LIMIT offset, rows:分别表示偏移到哪个位置,rows表示往下数多少个数。)
pageNo,pageSize 2,5 3,5
*limit (pageNo-1)pageSize ,pageSize
示例图:
-
需要封装一个方法类PageInfo,作用是存储用到的数据,如:pageNo,pageSize,totalCount, totalPage
-
测试main函数:
public static void main(String[] args) { int totalCount = 12; int pageSize = 5; int totalPage = (int)Math.ceil((double)totalCount / pageSize); System.out.println(totalPage);// 2 }
- 7月25日
-
Cookie、Session、ServletContext
-
域对象:
-
过滤器filter与登陆:
-
MVC
Controller:完成接收的数据的封装(就是之前的servlet,不过少了数据库的那一部分)
在此之前需要new一个service:
private IStudentService studentService = new StudentServiceImpl();//类型是接口 new的是接口的实现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SPO5kC8i-1658893825572)(C:\Users\xuezihan123\AppData\Roaming\Typora\typora-user-images\image-20220725170926717.png)]
Service和ServiceImpl:实现业务逻辑(举例分页的实现)
public interface IStudentService { List<Student> selectAll(); void deleteById(Integer id); void add(Student student); Student selectById(Integer id); void update(Student student); }
public class StudentServiceImpl implements IStudentService { private IStudentDao studentDao = new StudentDaoImpl(); @Override public List<Student> selectAll() { return studentDao.selectAll(); } @Override public void deleteById(Integer id) { studentDao.deleteById(id); } @Override public void add(Student student) { studentDao.add(student); } @Override public Student selectById(Integer id) { return studentDao.selectById(id); } @Override public void update(Student student) { studentDao.update(student); } }
Dao和DaoImpl:最基本的增删改查
public interface IStudentDao { List<Student> selectAll(); void deleteById(Integer id); void add(Student student); Student selectById(Integer id); void update(Student student); }
@Override public void add(Student student) { Connection connection = null; PreparedStatement statement = null; try { connection = JDBCUtil.getConnection(); String sql = "insert into student(name,age,gender) values(?,?,?)"; statement = connection.prepareStatement(sql); statement.setString(1, student.getName()); statement.setInt(2, student.getAge()); statement.setString(3, student.getGender()); System.out.println(statement); int count = statement.executeUpdate(); System.out.println(count); } catch (SQLException throwables) { throwables.printStackTrace(); } finally { JDBCUtil.close(connection, statement, null); } }
-
4354635
-
45234
-
534
-
53243
-
55
-
43
- 7月26日 Day13
-
JS DOM
-
JQuery
toggle开关;若开则关,若关则开。
- 7月27号 Day14
- Ajax
-
打个梵蒂冈
-
发多少郭德纲
-
工时费
-
发多少刚发的
-
发多少刚刚的
-
afdsg
-
发多少郭德纲
-
钢塑复合管的话
-
[x]