Day1
购物应用分析 (实体-属性)
1. 用户
- 属性
账号
密码
昵称
会员
手机
头像
信誉值
订单集
购物车
(关联关系:一个类以属性方式存在另一个类中) - 业务[用户操作]
登陆
2. 订单
订单号
商品集
金额
下单时间
运费
快递
订单状态
3. 商品
商品编号
商品名
商品单价
数量
图片
折扣
详细介绍
4. 购物车
商品集
Eclipse for Java
new
->JavaProject
src
->new package
- 关联has a、继承、
Right mouse button
->Source
->Getters and Setters
->all build
//创建类后生成get set 方法Ctrl + Shift + F
//自动排版create class userinfo
public class userInfo{ //用户类 private String Id; //... //订单 private List<orderInfo> orderList; //Ctrl + Shift + O 导包 java.util 关联关系 数据库1->M //购物车 private buyCar goodsCar; //关联关系 数据库1->1 }
create class orderinfo
public class orderInfo{ //订单类 //... //商品 private List<Product> orderProducts; //Ctrl + Shift + O 导包 //Alt + / 自动补全 //建立 get set 方法 }
create class product
public class Product{ //商品类 private String probId; private String proName; private double proPrice; //商品单价 private int proNum; //商品数量 private String proPhoto; private double discount; //折扣 private String proinfo; //详细介绍 }
create class buyCar
public class buyCar{ //购物车 private String carNum; private List<Product> proList; //商品集 //get set }
implete interface user
public interface UserServiceInter{ //用户业务接口 //登陆 public UserInfo login(String userAccount, String userPass); //注册 public boolean userReg(UserInfo user); //修改密码 public boolean alterPass(UserInfo user); }
implete interface order
public interface OrderServiceInter{ //订单业务接口 //下单 public boolean order(OrderInfo order); //确认收货 public void commitGetPro(String orderId); //取消订单 public void orderDel(String[] orderId); }
create class to implete interface
public class UserServiceImp implements UserServiceInter{ }
- 用户数据库操作层
public interface UserDaoInter{ //用户添加 public boolean userAdd(userInfo user); //用户修改 public boolean userAlter(userInfo user); //用户查询 public boolean userSelectByAccount(String userAccount); public List<OrderInfo> userSelect(); //用户删除 public boolean userDel(String userAccount); }
- 订单数据库操作层
public interface OrderDaoInter{ //添加订单 public boolean orderAdd(orderInfo order); //修改订单 public boolean orderAlter(orderInfo order); //查询订单 public boolean orderSelectById(String orderId); public List<OrderInfo> orderSelect(String userAccount); //删除订单 public boolean orderDel(String userAccount); }
面向接口编程
视图 控制
Model View Controller
│ │ |
└── ○ Entrv
└── ○ Service 业务层[登陆 注册]
└── ○ Dao 数据库层[查询]
- Java 单继承 多实现
课堂练习 学生选课实体类的分析及代码实现
学生、教师、管理员、专业、院系、课程。
+ 学生:学号、姓名、性别、生日、密码、[院系]、[专业]
+ 教师:工号、姓名、性别、生日、密码、职称、[教授课程]、[院系]
+ 管理员:工号、姓名、性别、生日、密码、权限
+ 专业:专业号码、专业名、辅导员、联系方式、专业介绍、[教师]、[学生]
+ 院系:系号码、系名称、系主任、联系方式、系介绍、[系员工]
+ 课程:课程号码、学时、学分、课程类型、课程介绍、[任课教师]、[选课学生]
管理员业务管理模块
-
Dao接口类:
类名:SysManagerDao 成员变量: private int id;--编号 private String sysaccount;--用户名 private String syspassword;--密码
-
接口内方法:
Manager managerLogin(String sysaccount,String syspassword);--根据帐号和密码查询管理员 int addManager(Manager m);-- 添加管理员 int deleteManager(int id);-- 删除管理员 int updateManager(Manager m);-- 修改管理员密码 Manager findManagerById(int id);-- 根据id查询管理员 Manager findManagerByAccount(String sysaccount);-- 根据帐号查询管理员 List<Manager> findAllManager();--查询所有管理员信息
-
Service接口类
类名:SysManagerService Manager managerLogin(String sysaccount,String syspassword);-- 根据帐号和密码查询管理员 boolean addManager(Manager m);-- 添加管理员 boolean deleteManager(int id);-- 删除管理员 boolean updateManager(Manager m);-- 修改管理员密码 Manager findManagerById(int id);-- 根据id查询管理员 Manager findManagerByAccount(String sysaccount);-- 根据帐号查询管理员 List<Manager> findAllManager();--查询所有管理员信息
院系业务管理模块
-
Dao接口类:
类名:SysDepartmentDao 成员变量: private int id; private String depname;
-
接口内方法:
int addDepartment(Department dep);-- 添加系 int deleteDepartment(int id);-- 删除系 int updateDepartment(Department dep);-- 更新系名称 Department findDepById(int id);-- 根据编号查找系 Department findDepByName(String depname);-- 根据名称查找系 List<Department> findAllDep();--查看所有系
-
Service接口类
类名:SysDepartmentService boolean addDepartment(Department dep);-- 添加系 boolean deleteDepartment(int id);-- 删除系 boolean updateDepartment(Department dep);-- 更新系名称 Department findDepById(int id);-- 根据编号查找系 Department findDepByName(String depname);-- 根据名称查找系 List<Department> findAllDep();--查看所有系
专业班级业务管理
-
Dao接口类:
类名: SysClassDao 成员变量: private int id; private String classname; 接口内方法: //添加班级 public int addClassBean(ClassBean classbean); //删除班级 public int deleteClassBean(int id); //修改班级 public int updateClassBean(ClassBean classbean); //根据编号查找班级 public ClassBean findClassBeanById(int id); //根据名称查找班级 public ClassBean findClassBeanByName(String classname); //查看所有班级 public List<ClassBean> findAllClass();
-
Service接口类
类名: SysClassService 接口内的方法: //添加班级 public boolean addClassBean(ClassBean classbean); //删除班级 public boolean deleteClassBean(int id); //修改班级 public boolean updateClassBean(ClassBean classbean); //根据编号查找班级 public ClassBean findClassBeanById(int id); //根据名称查找班级 public ClassBean findClassBeanByName(String classname); //查看所有班级 public List<ClassBean> findAllClass();
-
具体实现类个别详解
Dao接口实现类名称:SysClassDaoImpl //通过班级名称来找到班级 public ClassBean findClassBeanByName(String classname) { Connection conn =DBConnection.getConnection(); ClassBean clsb = null; String sql = "use selectivedb select * from t_class where classname= '"+classname+"'"; ResultSet rs =null; try{ rs =ExecuteSql.executeQuery(sql, conn); while(rs.next()){ clsb = new ClassBean(); clsb.setId(rs.getInt("id")); clsb.setClassname(rs.getString("classname")); } }catch(Exception e){ e.printStackTrace(); } DBConnection.closeConn(conn); return clsb; } Service实现类名:SysClassServiceImpl //通过班级名称来找到班级 public ClassBean findClassBeanByName(String classname) { return c.findClassBeanByName(classname); }```
教师业务管理
-
Dao接口类:
类名: TeacherDao 成员变量: TeacherView: private int tid; private String tpassword; private String tname; private String tsex; private int tage; private String tjob; private String depname; Teacher: private int tid; private String tpassword; private String tname; private short tsex; private int tage; private String tjob; private int tdepartment; 接口内方法: //1.登录 public Teacher teacherLogin(int tid, String tpassword); //2.修改密码 public int updatePassword(int tid, String tpassword); //3.查看自己的任课信息 public List<Course> findCourseByTeacher(int tid);//根据教师编号查询教师任课信息 //4.查看选课信息(某门课有哪些学生选修) public List<StudentView> findSelectCourseByCid(int cid);//根据课程号查询选课信息 //5.录入成绩 public int updateScore(SelectCourse sc);//根据学号,课程号,录入或修改成绩 //6.成绩信息查看(某门课成绩) public List<SelectCourseView> findCourseScoreByCid(int cid);
-
Service接口类
类名: SysTeacherService 类中方法: //添加教师 public boolean addTeacher(Teacher tea); //删除教师 public boolean deleteTeacher(int tid); //修改教师 public boolean updateTeacher(Teacher tea); //根据教师工号查找 public TeacherView findTeaById(int tid); //查看所有教师 public List<TeacherView> findAllTeacher();
课程业务管理
-
Dao接口类:
类名: SysCourseDao 成员变量: CourseView: private int id; private String coursename; private int credit; private String ctime; private String caddress; private String tname; private int limitnumber; private int truenumber; Course: private int id; private String coursename; private int credit; private String ctime; private String caddress; private int teacher; private int limitnumber; private int truenumber; 接口内方法: //添加课程 public int addCourse(Course cou); //根据课程编号删除课程 public int deleteCourse(int id); //修改课程 public int updateCourse(Course cou); //根据课程名查找课程 public CourseView findCouByName(String coursename); //查看所有课程 public List<CourseView> findAllCourse(); public boolean findCouByAll(Course cou);
-
Service接口类
Service实现方法名: //添加课程 public boolean addCourse(Course cou); //删除课程 public boolean deleteCourse(int id); //修改课程 public boolean updateCourse(Course cou); //根据课程名查找课程 public CourseView findCouByName(String coursename); //查看所有课程 public List<CourseView>findAllCourse(); public boolean findCouByAll(Course cou);
学生业务管理
-
Dao接口类:
类名: SysStudentDao 成员变量: StudentView: private int sid; private String sname; private String spassword; private String ssex; private int sage; private String classname; private String depname; Student: private int sid; private String sname; private String spassword; private short ssex; private int sage; private int sclass; private int sdepartment; 接口内方法: //添加学生 public int addStudent(Student stu); //删除学生 public int deleteStudent(int sid); //修改学生 public int updateStudent(Student stu); //根据学号查找学生 public StudentView findStuById(int sid); //查找所有学生 public List<StudentView> findAllStudent();
-
Service接口类
类名: SysStudentService 接口内方法: //添加学生并返回学号 public boolean addStudent(Student stu); //删除学生 public boolean deleteStudent(int sid); //修改学生 public boolean updateStudent(Student stu); //根据学号查找学生 public StudentView findStuById(int sid); //查找所有学生 public List<StudentView> findAllStudent();
教师管理部分
- Dao接口类:TeacherDao
//1.登录 public Teacher teacherLogin(int tid, String tpassword); //2.修改密码 public int updatePassword(int tid, String tpassword); //3.查看自己的任课信息 public List<Course> findCourseByTeacher(int tid);//根据教师编号查询教师任课信息 //4.查看选课信息(某门课有哪些学生选修) public List<StudentView> findSelectCourseByCid(int cid);//根据课程号查询选课信息 //5.录入成绩 public int updateScore(SelectCourse sc);//根据学号,课程号,录入或修改成绩 //6.成绩信息查看(某门课成绩) public List<SelectCourseView> findCourseScoreByCid(int cid);
日志管理
-
Dao接口类:
类名: SysLogDao 成员变量: private int id ; private String Loginaccount ; private String Logintime ; 接口内方法: //记录登录信息 public int setLog(Log log); //获得所有登录日志 public List<Log> getLogs();
-
Service接口类
类名: SysLogService 接口内方法: //记录登录信息 public boolean setLog(Log log); //获得所有登录日志 public List<Log> getLogs();
-
实现类
Dao接口实现类名称:SysLogDaoImpl Service实现类名:SysLogServiceImpl
Day2
数据库
- 五大约束
主键约束(Primay Key Coustraint)
唯一性,非空性唯一约束(Unique Counstraint)
唯一性,可以空,但只能有一个检查约束(Check Counstraint)
对该列数据的范围、格式的限制(如:年龄、性别等)默认约束(Default Counstraint)
该数据的默认值外键约束(Foreign Key Counstraint)
需要建立两表间的关系并引用主表的列
- 五大约束的语法示例
- 添加主键约束(将stuNo作为主键)
alter table stuInfo add constraint PK_stuNo primary key (stuNo)
- 添加唯一约束(身份证号唯一,因为每个人的都不一样)
alter table stuInfo add constraint UQ_stuID unique(stuID)
- 添加默认约束(如果地址不填 默认为“地址不详”)
alter table stuInfo add constraint DF_stuAddress default (‘地址不详’) for stuAddress
- 添加检查约束 (对年龄加以限定 15-40岁之间)
alter table stuInfo add constraint CK_stuAge check (stuAge between 15 and 40) alter table stuInfo add constraint CK_stuSex check (stuSex=’男’ or stuSex=’女′)
- 添加外键约束 (主表stuInfo和从表stuMarks建立关系,关联字段stuNo)
alter table stuInfo add constraint FK_stuNo foreign key(stuNo)references stuinfo(stuNo)
用户表 usertable
字段名 | 类型 | FK/PK | 约束 |
---|---|---|---|
用户编号 | integer | PK | unique not null |
账号 | varchar(20) | unique not null | |
姓名 | varchar(20) | null | |
密码 | varchar(20) | not null | |
生日 | date | null | |
性别 | varchar(4) | check ‘m’ or ‘w’ | |
头像 | varchar(200) | ||
手机 | varchar(11) | ||
类型 | varchar(30) |
订单表 ordertable
字段名 | 类型 | FK/PK | 约束 |
---|---|---|---|
订单编号 | varchar(200) | PK | unique not null |
用户编号 | integer | FK | 关联用户表中的用户编号 |
订单金额 | double(10,2) | unique not null | |
下单时间 | datetime | null | |
运费 | double(4,2) | not null | |
快递类型 | varchar(80) | not null | |
快递编号 | varchar(50) | null(未发货) | |
订单状态 | integer | 0/1/2/3/… |
- 表的关系:
一对一
一对多
多对多
- 一对多关系的建立:在多的一方表中建立外键关系
- 多对多关系的建立:建立第三张表表示多对多关系
商品表
商品编号 商品名称 商品单价 商品数量 商品图片 折扣 详细介绍 图片
字段名 类型 FK/PK 约束
商品编号 integer PK unique not null
商品名称 varchar(100) not null
商品单价 double(10,2) not null
商品数量 integer
商品图片 varchar(200)
折扣 double(10,2)
详细介绍 varchar(200)
图片 varchar(200)
购物车表
编号 商品集(关联关系 )
MySQL安装
$ sudo apt-get update
$ sudo apt-get install mysql-server -y
$ sudo systemctl status mysql.service
● mysql.service - MySQL Community Server
看到 “Active: active (running)”。如果没有,使用下列命令去开始这个服务:sudo systemctl start mysql.service
$ sudo mysql_secure_installation
设置密码 一路y
$ mysql -u hyper -phc162315
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'hyper'@'localhost' (using password: YES)
mysql> UPDATE mysql.user SET authentication_string=PASSWORD('hc.162315'), PLUGIN='mysql_native_password' WHERE USER='root';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> UPDATE mysql.user SET authentication_string=PASSWORD('Hc.162315'), PLUGIN='mysql_native_password' WHERE USER='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
课堂练习
- 查询wm001的所有订单、订单编号、下单日期以及订单中的所有商品名称、单价、详细信息
连接查询 内连接 外连接SELECT proId,proName,proPrice,proInfo FROM proTable WHERE proId IN ( SELECT proId FROM ord_proTable WHERE orderId IN ( SELECT orderId FROM orderTable WHERE userId = 'wm001' ) )
SELECT res.* FROM ( SELECT ortb.userId,ortb.orderId,ortb.orderdate,pro.proName,proPrice FROM orderTable ortb INNER JOIN orderproTable odpr USING (orderId) INNER JOIN productTable pro USING (proId) ) res WHERE res.userId = ( SELECT userId FROM userTable WHERE userAccount = "wm001" );
Web前端
Day3
异步交互:当进行信息查看时,浏览器状态栏和标题栏无变化
<a>baidu</a>