String中的equals和“==”
**
MVC
M-model Model(模型)表示应用程序核心(比如数据库记录列表)。是应用程序中用于处理应用程序数据逻辑的部分。
V-view
C-contorl 处理输入(写入数据库记录)。
1.项目名:没有要求,不起中文
2.包:公司域名倒着写 com.wxy.
3.数据访问层:dao,persist,mapper
4.实体:entity,model,bean,Javabean,pojo
5.业务逻辑层:service,biz
6.控制器:controller,servlet,action,web
7.过滤器:fifter
8.异常:exception
现在我 理解的 mvc 是这样的:
modal: Dao : 具体功能实现
service:调用 Dao 中的 具体功能
view : jsp 页面等
controll: servlet 等,获取请求数据,调用 modal 中的 service,页面跳转等。
首先,JavaEE开发分为表示层、业务层、持久化层。而表示层和持久化层需要做的功能比较单一。
1、表示层(action、controller)需要做的就是接受用户请求、调用业务进行处理、返回需要响应的页面或者结果,当前,如果有参数,就携带着。
2、持久化层(dao、repository)需要做的就是对数据库的操作,不同框架有不同的处理。但是总而言之,无非就是增删改查操作,当然,有时候需要很复杂的sql查询。
3、业务逻辑层(service),这个就是不同公司的主要业务核心,不同的公司有不同的业务。
因此,表示层和持久化层用不同的框架进行开发,而业务层就需要开发人员根据公司的情况进行业务开发。
数据的持久化—DAO
**
数据库持久化,就是将数据库的数据模型转化为存储模型以及将存储模型转换为内存中的数据模型的统称,也就是说涉及到数据库从硬盘到内存的读取,以及数据类型的转化等等
数据持久化对象的基本操作有:保存、更新、删除、查询等
考试系统中,
- 数据库逐行读取,用到了bufferdreader filereader。用hashmap去存储,这样一个String与一个对象对应,通过String找到了对象,返回对象。这里是数据库的查找操作
- service.findaccount(account,password)去找对象,这里的service充当MVC中的控制
倒计时的设计
要点
- StringBuilder组成字符串
- 利用线程对字符串进行刷新
- 刷新的同时是秒在减少,先看秒是否够,秒不够,分钟,小时退。
4.设置按钮对控制线程的进行
完整代码:
import view.ExamFrame;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Time;
public class Frame extends JFrame {
public Frame(){
}
public Frame(String str){
super(str);
setandson();
}
JButton startButton = new JButton("开始");
JButton stopButton = new JButton("暂停");
JLabel realTimeLabel = new JLabel();
JPanel panel = new JPanel();
TimeThread timeThread = new TimeThread();
private static int time = 61;
public void setandson(){
this.setBounds(600,280,560,340);
panel.setBounds(200,400,400,200);
realTimeLabel.setBounds(108,490,150,30);
realTimeLabel.setFont(new Font("黑体",Font.BOLD,20));
realTimeLabel.setForeground(Color.BLUE);
panel.add(realTimeLabel);
panel.add(startButton);
panel.add(stopButton);
this.add(panel);
//呈现
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗体大小不可拖拽
this.setResizable(false);
//设置窗体显示状态
this.setVisible(true);
timeThread.run();
addAction();
}
public void addAction(){
stopButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
timeThread.stopThread();
}
});
}
public class TimeThread extends Thread{
Boolean ThreadState = true;
public void stopThread(){
this.ThreadState = false;
}
@Override
public void run() {
int hh = time/60;
int mm = time%60;
int ss = 0;
while(ThreadState){
StringBuilder timeBuilder = new StringBuilder();
if(hh>=0&&hh<10){
timeBuilder.append(0);
}
timeBuilder.append(hh);
timeBuilder.append(":");
if(mm>=0&&mm<10){
timeBuilder.append(0);
}
timeBuilder.append(mm);
timeBuilder.append(":");
if(ss>=0&&ss<10){
timeBuilder.append(0);
}
timeBuilder.append(ss);
realTimeLabel.setText(timeBuilder.toString());
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(ss>0){
ss--;
}else {
if(mm>0){
mm--;
ss=59;
}else if(hh>0){
hh--;
mm=59;
ss=59;
}
}
}
}
}
}
public class maintest {
public static void main(String[] args) {
new Frame("倒计时");
}
}