JavaWeb_11_原生Web应用开发
尝试开发第一个web应用吧!点击跳转原生Web应用开发视频
留恋相似处,令我们停滞不前;接纳相异处,带我们改变未来。
超链接
配置tomcat启动参数-Dfile.encoding=UTF-8后,IDEA(Eclipse 类似)控制台乱码
intelij idea java.lang.ClassNotFoundException
P28 JDBC复习
什么是JDBC:Java连接数据库!
需要jar包的支持:
- java.sql
- mysql-connector-java-8.0.28.jar… 连接驱动(必须导入)
实验环境搭建
- sql
CREATE TABLE users(
id INT PRIMARY KEY,
`name` VARCHAR(40),
`password` VARCHAR(40),
email VARCHAR(60),
birthday DATE
);
INSERT INTO users(id,`name`,`password`,email,birthday)
VALUES(1,'牛魔瘦了','123456','nm@qq.com','2016-01-01');
INSERT INTO users(id,`name`,`password`,email,birthday)
VALUES(2,'八戒','123456','bj@qq.com','2016-01-01');
INSERT INTO users(id,`name`,`password`,email,birthday)
VALUES(3,'悟空','123456','wk@qq.com','2016-01-01');
SELECT * FROM users;
- 导入数据库依赖
<!--mysql的驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
- IDEA中连接数据库
JDBC 固定步骤:
- 加载驱动
- 连接数据库,代表数据库
- 向数据库发送SQL的对象Statement,prepareStatement:CRUD
- 编写SQL(根据业务,不同的SQL)
- 执行SQL
- 关闭连接
package com.niumo.test;
import java.sql.*;
public class TestJdbc {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//配置信息
//useUnicode=true&characterEncoding=utf-8 解决中文乱码
String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
String username = "root";
String password = "nm123456";
//1.加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.连接数据库,代表数据库
Connection connection = DriverManager.getConnection(url,username,password);
//3.向数据库发送SQL的对象Statement,prepareStatement:CRUD
Statement statement = connection.createStatement();
//4.编写SQL
String sql = "select * from users";
//5.执行查询SQL,返回一个ResultSet:结果集
ResultSet rs = statement.executeQuery(sql);
while(rs.next()){
System.out.println("id"+rs.getObject("id"));
System.out.println("name"+rs.getObject("name"));
System.out.println("password"+rs.getObject("password"));
System.out.println("email"+rs.getObject("email"));
System.out.println("birthday"+rs.getObject("birthday"));
System.out.println("===================================");
}
//6.关闭连接,释放资源(一定要做)先开后关
rs.close();
statement.close();
connection.close();
}
}
预编译SQL
package com.niumo.test;
import java.sql.*;
public class TestJdbc2 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//配置信息
//useUnicode=true&characterEncoding=utf-8 解决中文乱码
String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
String username = "root";
String password = "nm123456";
//1.加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.连接数据库,代表数据库
Connection connection = DriverManager.getConnection(url,username,password);
//3.编写SQL
String sql = "insert into users (id, name, password, email, birthday) values (?,?,?,?,?);";
//4.预编译
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1,4);//给第一个占位符? 的值赋值为1;
preparedStatement.setString(2,"牛魔瘦了2");//给第二个占位符? 的值赋值为牛魔瘦了2;
preparedStatement.setString(3,"123456");//给第四个占位符? 的值赋值为123456;
preparedStatement.setString(4,"123456@qq.com");//给第五个占位符? 的值赋值为123456@qq.com;
preparedStatement.setDate(5,new Date(new java.util.Date().getTime()));//给第一个占位符? 的值赋值为1;
//5.执行SQL
int i = preparedStatement.executeUpdate();
if(i>0){
System.out.println("插入成功!");
}
//6.关闭连接,释放资源(一定要做)先开后关
preparedStatement.close();
connection.close();
}
}
P29 JDBC事务
要么都成功,要么都失败!
ACID原则:保证数据的安全。
开启事务
事务提交 commit()
事务回滚 rollback()
关闭事务
转账:
A:1000
B:1000
A(900) --100--> B(1100)
Junit单元测试
依赖
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
简单使用
@Test注解只有在方法上有效,只要加了这个注解的方法,就可以直接运行!
@Test
public void test(){
System.out.println("Hello");
}
失败的时候是红色:
搭建一个环境
CREATE TABLE account(
id INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(40),
money FLOAT
);
INSERT INTO account(`name`,money) VALUES('A',1000);
INSERT INTO account(`name`,money) VALUES('B',1000);
INSERT INTO account(`name`,money) VALUES('C',1000);
package com.niumo.test;
import org.junit.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class TestJdbc3 {
@Test
public void test(){
//配置信息
//useUnicode=true&characterEncoding=utf-8 解决中文乱码
String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
String username = "root";
String password = "nm123456";
Connection connection = null;
try{
//1.加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.连接数据库,代表数据库
connection = DriverManager.getConnection(url,username,password);
//3.通知数据库开启事务,false 开启
connection.setAutoCommit(false);
String sql1 = "update account set money = money-100 where name = 'A';";
connection.prepareStatement(sql1).executeUpdate();
//制造错误
// int i= 1/0;
String sql2 = "update account set money = money+100 where name = 'B';";
connection.prepareStatement(sql2).executeUpdate();
connection.commit(); //以上两条SQL都执行成功了,就提交事务!
System.out.println("success");
} catch (Exception e) {
//如果出现异常,就通知数据库回滚事务
try {
connection.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}finally {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
P30 smbms项目搭建
架构图
数据库
CREATE DATABASE `smbms`;
USE `smbms`;
DROP TABLE IF EXISTS `smbms_address`;
CREATE TABLE `smbms_address`(
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`contact` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系人姓名',
`addressDesc` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '收货地址明细',
`postCode` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '邮编',
`tel` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系人电话',
`createBy` BIGINT(20) DEFAULT NULL COMMENT '创建者',
`creationDate` DATETIME DEFAULT NULL COMMENT '创建时间',
`modifyBy` BIGINT(20) DEFAULT NULL COMMENT '修改者',
`modifyDate` DATETIME DEFAULT NULL COMMENT '修改时间',
`userId` BIGINT(20) DEFAULT NULL COMMENT '用户ID',
PRIMARY KEY (`id`)
)ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
DROP TABLE IF EXISTS `smbms_bill`;
CREATE TABLE `smbms_bill`(
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`billCode` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '账单编码',
`productName` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '商品名称',
`productDesc` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '商品描述',
`productUnit` VARCHAR(10) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '商品单位',
`productCount` DECIMAL(20,2) DEFAULT NULL COMMENT '商品数量',
`totalPrice` DECIMAL(20,2) DEFAULT NULL COMMENT '商品总额',
`isPayment` INT(10) DEFAULT NULL COMMENT '是否支付(1:未支付 2:已支付)',
`createBy` BIGINT(20) DEFAULT NULL COMMENT '创建者(userId)',
`creationDate` DATETIME DEFAULT NULL COMMENT '创建时间',
`modifyBy` BIGINT(20) DEFAULT NULL COMMENT '更新者(userId)',
`modifyDate` DATETIME DEFAULT NULL COMMENT '更新时间',
`providerID` BIGINT(20) DEFAULT NULL COMMENT '供应商ID',
PRIMARY KEY (`id`)
)ENGINE=INNODB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
DROP TABLE IF EXISTS `smbms_provider`;
CREATE TABLE `smbms_provider`(
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`proCode` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商编码',
`proName` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商名称',
`proDesc` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商详细描述',
`proContact` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '供应商联系人',
`proPhone` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系电话',
`proAddress` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '地址',
`proFax` VARCHAR(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '传真',
`createBy` BIGINT(20) DEFAULT NULL COMMENT '创建者(userId)',
`creationDate` DATETIME DEFAULT NULL COMMENT '创建时间',
`modifyDate` DATETIME DEFAULT NULL COMMENT '更新时间',
`modifyBy` BIGINT(20) DEFAULT NULL COMMENT '更新者(userId)',
PRIMARY KEY (`id`)
)ENGINE=INNODB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
DROP TABLE IF EXISTS `smbms_role`;
CREATE TABLE `smbms_role`(
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`roleCode` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '角色编码',
`roleName` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '角色名称',
`createBy` BIGINT(20) DEFAULT NULL COMMENT '创建者',
`creationDate` DATETIME DEFAULT NULL COMMENT '创建时间',
`modifyBy` BIGINT(20) DEFAULT NULL COMMENT '修改者',
`modifyDate` DATETIME DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`)
)ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO smbms_role(id, roleCode, roleName, createBy, creationDate)
VALUES(1,"SMBMS_ADMIN","系统管理员",1,"2022-03-10 00:00:00"),
(2,"SMBMS_MANAGER","经理",1,"2022-03-10 00:00:00"),
(3,"SMBMS_EMPLOYEE","普通员工",1,"2022-03-10 00:00:00");
DROP TABLE IS EXISTS `smbms_user`;
CREATE TABLE `smbms_user`(
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`userCode` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户编码',
`userName` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户名称',
`userPassword` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户密码',
`gender` INT(10) DEFAULT NULL COMMENT '性别(1:女、2:男)',
`birthday` DATE DEFAULT NULL COMMENT '出生日期',
`phone` VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '手机',
`address` VARCHAR(30) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '地址',
`userRole` BIGINT(20) DEFAULT NULL COMMENT '用户角色(取字角色表-角色id)',
`createBy` BIGINT(20) DEFAULT NULL COMMENT '创建者(userId)',
`creationDate` DATETIME DEFAULT NULL COMMENT '创建时间',
`modifyDate` DATETIME DEFAULT NULL COMMENT '更新时间',
`modifyBy` BIGINT(20) DEFAULT NULL COMMENT '更新者(userId)',
PRIMARY KEY (`id`)
)ENGINE=INNODB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
TRUNCATE TABLE `smbms_user`;
INSERT INTO `smbms_user` (`userCode`,`userName`,`userPassword`,`gender`,`birthday`,`phone`,`address`,`userRole`)
VALUES('admin','管理员','123456',2,'1989-03-08','18583688888','成都',1),
('niumo','牛魔瘦了','123456',2,'1989-03-08','18583688888','北京',1),
('bajie','八戒','123456',2,'1989-03-08','18583688888','河南',1),
('wukong','悟空','123456',2,'1989-03-08','18583688888','重庆',2),
('zs','张三','123456',2,'1989-03-08','18583688888','新疆',2),
('ls','李四','123456',2,'1989-03-08','18583688888','哈尔滨',2),
('ww','王五','123456',2,'1989-03-08','18583688888','河北',2),
('zl','赵六','123456',2,'1989-03-08','18583688888','湖北',2),
('tq','田七','123456',2,'1989-03-08','18583688888','湖南',2),
('mq','梦琪','123456',1,'1989-03-08','18583688888','苏州',2),
('ylk','云凌可','123456',1,'1989-03-08','18583688888','杭州',2),
('ymm','余梦茂','123456',1,'1989-03-08','18583688888','上海',3),
('wzy','文子隐','123456',1,'1989-03-08','18583688888','齐齐哈尔',3),
('lsw','黎舒旺','123456',1,'1989-03-08','18583688888','呼和浩特',3),
('yy','亦玉','123456',1,'1989-03-08','18583688888','西藏',3),
('sx','书雪','123456',1,'1989-03-08','18583688888','拉萨',3),
('bt','冰彤','123456',1,'1989-03-08','18583688888','香格里拉',3),
('dz','代真','123456',2,'1989-03-08','18583688888','大理',3),
('yueyao','乐瑶','123456',2,'1989-03-08','18583688888','南阳',3),
('yyc','云羿谆','123456',2,'1989-03-08','18583688888','西昌',3);
项目如何搭建?
考虑使用不使用Maven?依赖,Jar
项目搭建准备工作
-
搭建一个maven web项目
-
配置Tomcat
-
测试项目是否能够跑起来
-
导入项目中会遇到的jar包;
servlet,jsp,mysql驱动,jstl,standard …
-
创建项目包结构
-
编写实体类;
ORM映射:表-类映射
package com.niumo.pojo; import java.util.Date; public class User { private Integer id; // id private String userCode; // 用户编码 private String userName; // 用户姓名 private String userPassword; // 用户密码 private Integer gender; // 性别 private Date birthday; // 出生日期 private String phone; // 电话 private String address; // 地址 private Integer userRole; // 用户角色 private Integer createBy; // 创建者 private Date creationDate; // 创建时间 private Integer modifyBy; // 更新者 private Date modifyDate; // 更新时间 private Integer age; // 年龄 private String userRoleName; // 用户角色名称 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserCode() { return userCode; } public void setUserCode(String userCode) { this.userCode = userCode; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } public Integer getGender() { return gender; } public void setGender(Integer gender) { this.gender = gender; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Integer getUserRole() { return userRole; } public void setUserRole(Integer userRole) { this.userRole = userRole; } public Integer getCreateBy() { return createBy; } public void setCreateBy(Integer createBy) { this.createBy = createBy; } public Date getCreationDate() { return creationDate; } public void setCreationDate(Date creationDate) { this.creationDate = creationDate;