MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
主要是将业务层与持久层分开
模拟ATM的存款 取款 转账
数据库中创建的表
create table tb_atm(username varchar(10),password varchar(10),yue number(6));
利用 insert into tb_atm values(* *,* *,* *)插入一下数据
username | password | yue |
小明 | 123456 | 10000 |
小王 | 123456 | 10000 |
1.连接数据库
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JDBC_conn {
public static Connection conn() {
Connection conn=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott","123456");
} catch (ClassNotFoundException e) {
System.out.println("加载驱动失败...");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("连接数据库失败...");
e.printStackTrace();
}
return conn;
}
}
2.建立一个数据库数据的映射,以方便对数据库数据的查询
public class ATM_OP {
private String username;
private String password;
private int yue;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getYue() {
return yue;
}
public void setYue(int yue) {
this.yue = yue;
}
}
3..持久层(DAO)与 业务层
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 思路: 简化DAO的查询语句,创建一个ATM_OP类完成对数据库数据的映射,来对数据进行查询
* 完成银行的存款、转账、取款只需要对数据库先进行映射查询,然后根据查询到数据在业务端对数据进行业务处理,然后
* 再调用持久层,把业务的最新数据跟新到数据库;
* 注意事项:导包不要导错(sql)
* 查询语句要正确
*/
public class ATM {
//编写DAO持久层
//1.更新数据库操作
public void updateDAO(String username,int money) {
String sql="update tb_atm set yue='"+money+"'where username='"+username+"'";
try {
JDBC_conn.conn().createStatement().executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//查询对应用户的数据库内容映射到ATM
public ATM_OP load(String username) {
ATM_OP atm=new ATM_OP();
ResultSet rs=null;
String str="select * from tb_atm where username='"+username+"'";
try {
rs=JDBC_conn.conn().createStatement().executeQuery(str);
if(rs.next()) {
atm.setUsername(rs.getString("username"));
atm.setPassword(rs.getString("password"));
atm.setYue(rs.getInt("yue"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return atm;
}
//编写业务层
//1.存款
public void cunkuan(String username,int money) {
ATM_OP a=load(username);
a.setYue(a.getYue()+money);
updateDAO(username, a.getYue());
}
//2.取款
public void qukuan(String username,int money) throws SQLException {
if(money<yu(username)) {
ATM_OP a=load(username);
a.setYue(a.getYue()-money);
updateDAO(username, a.getYue());
}
else {
System.out.println("该账户余额不足");
}
}
//3.转账
public void zhuangzhang(String zusername,int money,String susername) throws SQLException {
if(money<yu(zusername)) {
ATM_OP a=load(zusername);
a.setYue(a.getYue()-money);
updateDAO(zusername, a.getYue());
ATM_OP a1=load(susername);
a1.setYue(a1.getYue()+money);
updateDAO(susername, a1.getYue());
}
else {
System.out.println("该账户余额不足");
}
}
//余额查询
//对应余额的查询、
public int yu(String username) throws SQLException {
return load(username).getYue();
}
}
4.测试
import java.sql.SQLException;
public class Test {
public static void main(String[] args) throws SQLException {
ATM atm=new ATM();
//小明存款100
atm.cunkuan("小明", 100);
System.out.println(atm.yu("小明"));
//小王取款1000
atm.qukuan("小王", 1000);
System.out.println(atm.yu("小王"));
//小明给小王转款1000
atm.zhuangzhang("小明", 1000, "小王");
System.out.println(atm.yu("小明"));
System.out.println(atm.yu("小王"));
}
}