学习目标:图书馆管理小项目
提示:主要目的是让学完JavaSE的同学对之前掌握的知识做一些运用,该项目应用的知识点包括下面内容:
学习内容:
提示:这里可以添加要学的内容
例如:
1、面向对象的思想
2、分层的思想
3、接口
4、异常
5、集合
6、日期处理
7、Stream流
8、IO流
9、反射
10、Javafx(了解)
11、css(了解)
学习产出:
①代码存放的规范:
bean:存放实体类的包
global:存放了一些全局使用的类
media.img:存放一些图片
module:存放界面相关的类,不同的功能模块
service:存放服务相关类
theme:存放美化界面相关的文件
util:数据初始化
lib:存放第三方技术Jar包
App:主类
②关于fxml的一些知识点:
1、在项目启动时,会加载所有界面对应的fxml文件,然后将这些对象放入到map中,此map由ViewManager类进行管理。
2、每个界面都对应了一个fxml文件,fxml文件中的内容可以控制界面的展示效果。该文件中的标签都是成对出现的,但是绝对不能出现你中有我,我中有你。
3、用户在操作界面的时候会产生一些行为,比如点击一个按钮,这就是一个点击时间,我们可以通过button标签中的onAction属性与控制器对应的方法进行绑定:<button onAction=”#login”>
每个fxml文件都有一个对应的java文件相关联,这样的java文件叫做控制器,我们可以通过fxml文件中的最外层标签里面的fx:controller标签进行绑定:fx:controller="com.bjpowernode.module.login.Login"
4 :我们可以在输入框中看到自己输入的内容
:我们不能在输入框中看到自己输入的内容
通过输入框中的fx:id与控制器中的属性进行管理,例如:
fxml文件的标签:<TextField fx:id="username" />
控制器文件的属性:@FXML private TextField username;
③分层的 思想:
代码分层:
controller(请求处理层):负责与界面数据进行交互处理
service(业务逻辑层):负责业务逻辑相关处理
DAO(数据持久层):负责数据持久化操作,DAO的全称是Data Access Object
DAO层存放纯数据的增删改查,对多个数据的增删改查在service层操作。
④Stream流和IO流
IO流的使用存储对象的ObjectInputSteam和ObjectOutputSteam进行;
以下是几个之前se中没用涉及的点
list.steam().filter(u -> u.getId()==user.getId()).findFirst().get();
//使用steam流的filter过滤器获取Id一样的第一条User数据
list.steam().filter(u -> u.getId()==user.getId()).collect(Collectors.toList());
//使用steam流的filter过滤器收集Id一样的一个list集合
list.steam().collect(Collectors.groupingBy(Book::getType));
//使用steam流的collect收集方法根据Type类别groupingBy()来收集新的集合
⑤反射
简化属性赋值的时候想到反射,通过写一个方法,把传入的两个相同类的属性值进行赋值:
/**
* 对象属性值的拷贝
* @param origin
* @param dest
*/
public static void populate(Object origin, Object dest) {
try {
//使用反射解决这个问题
//判断两个对象是否是同一类型
if (origin.getClass() != dest.getClass()) {
throw new RuntimeException("两个对象必须得是同一类型");
}
Class<?> clazz = origin.getClass();
//获取origin中的属性
Field[] fields = clazz.getDeclaredFields();
for (Field f : fields) {
//排除serialVersionUID
if ("serialVersionUID".equals(f.getName())) {
continue;
}
//打破封装
f.setAccessible(true);
//从dest对象中找到对应的属性值,然后赋值到origin相应的属性中
f.set(origin,f.get(dest));
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
⑥知识点小结:
1、户欠费后需要充值并且充值之后的余额要大于0才能进行还书操作,我们需要精确计算出用户的余额,因此使用的类型是BigDecimal。(工资都用这个类)
2、编程前期我们应该考虑周全,比如想到在用户的类中添加isLend的boolean来表示是否已经借阅等;
3、借出书Id用int会导致超出范围,可以改成字符串,使用UUID生成唯一的编号`Id=UUID.randomUUID().toString();
4、使用方法重载可以有效避免很多无用操作,学会改变形参来重载,而不是在原方法上修改。
5、shift + f6同时修改相同的变量名,ctrl+alt+左键跳转实现类,ctrl+alt+t出现surround with(加包着的语句),ctrl+alt+u查看继承图
6、路径太多可以在bean中新建`Path类存放路径
7、observableList中更改集合数据界面会发生变化。