目录
分层操作
案例
数据库
Test.java
DataBase.java
StuDao.java
DB_Stu.java
StuService.java
分层操作
如果不进行分层操作,会很难维护
优点:
- 维护修改方便,每个模块都做自己的工作,比较清晰
- 可以分工操作
问题:数据如何处理?——实体类(可以当做参数传递)
怎么分层?
- dao:数据库层,用来连接数据库的一层,一般主要写的是一些sql语句
- service:处理层、业务层、逻辑层,主要做一些复杂的逻辑处理
- Test:程序的入口,也可以叫控制层,主要是接收数据,简单流程的处理
- entity:实体类层,里面会有很多类,一般情况里面的属性和数据库字段名一致,把数据存到这个类里面,进行数据相互的传递
案例
数据库
先在plsqldev里建一个表DB_Stu
设置列
再来设一个主键和条件
填入数据
结构
Test.java
import java.sql.ResultSet;
import java.util.List;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws Exception {
// 层的名字
// 1.dao 数据库层
// 2.service 处理层、业务层、逻辑层
// 3.entity 实体类层,里面会有很多类,一般情况里面的属性和数据库字段名一致
// 4.test 程序的入口,也可以叫控制层,主要是接收数据,简单流程的处理
Scanner input = new Scanner(System.in);
DataBase db = new DataBase();
StuService ss = new StuService();
System.out.println("1.增加");
System.out.println("2.删除");
System.out.println("3.修改");
System.out.println("4.查询所有信息");
System.out.println("5.根据名字来查询(可以模糊查询)");
System.out.println("请选择");
switch(input.nextInt()){
case 1:
// 增加
System.out.print("请输入名字:");
String name = input.next();
System.out.print("请输入年龄:");
int age = input.nextInt();
System.out.print("请输入性别:");
String sex = input.next();
DB_Stu ds = new DB_Stu();
ds.setStuname(name);
ds.setStusex(sex);
ds.setStuage(age);
int addnum = ss.add(ds);
if(addnum>0) {
System.out.println("添加成功");
}else{
System.out.println("添加失败");
}
break;
case 2:
// 删除
System.out.println("请输入要删除的学号");
int delno = input.nextInt();
// 要告诉后面的程序我要删除数据库中的数据
int num = ss.del(delno);
if(num>0) {
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
break;
case 3:
// 修改
System.out.print("请输入要修改的学号:");
int stuno = input.nextInt();
System.out.print("请输入新的姓名:");
String stuname = input.next();
System.out.print("请输入新的性别:");
String stusex = input.next();
System.out.print("请输入新的年龄:");
int reage = input.nextInt();
// 实体类的对象,来存储数据,并进行传参
DB_Stu s = new DB_Stu();
s.setStuno(stuno);
s.setStuname(stuname);
s.setStusex(stusex);
s.setStuage(reage);
int renum = ss.update(s);
if(renum>0){
System.out.println("修改成功");
}else{
System.out.println("修改失败");
}
break;
case 4:
// 查询全部信息
List stulist = ss.QueryAll();
for(DB_Stu stu : stulist) {
System.out.println(stu.getStuno() + "----" + stu.getStuname() + "----" + stu.getStusex() + "----" + stu.getStuage());
}
break;
case 5:
// 根据名字来进行查询,并且是模糊查询
System.out.println("请输入姓名可以模糊查询:");
String sname = input.next();
List dstu = ss.Query(sname);
for(DB_Stu stu : dstu) {
System.out.println(stu.getStuno() + "----" + stu.getStuname() + "----" + stu.getStusex() + "----" + stu.getStuage());
}
break;
}
}
}
DataBase.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DataBase {
Connection conn;
// 连接
public void getConn() throws Exception{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","123456");
}
// 增删改
public int DoExe(String sql,Object... obj) throws Exception {
getConn();
PreparedStatement pstmt = conn.prepareStatement(sql);
for(int i = 0; i
StuDao.java
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class StuDao {
DataBase db = new DataBase();
// 添加
// 这里的参数是一个实体类的对象
public int add(DB_Stu stu) throws Exception {
String sql = "insert into db_stu values((select max(stuno)+1 from db_stu),?,?,?)";
return db.DoExe(sql, stu.getStuname(),stu.getStusex(),stu.getStuage());
}
// 删除,这个方法的参数是学号
public int del(int stuno) throws Exception {
// 删除语句
String sql = "delete from db_stu where stuno=?";
int num = db.DoExe(sql, stuno);
return num;
}
// 修改 是一个实体类
public int update(DB_Stu stu) throws Exception {
String sql = "update db_stu set stuname=?,stusex=?,stuage=? where stuno=?";
return db.DoExe(sql, stu.getStuname(),stu.getStusex(),stu.getStuage(),stu.getStuno());
}
// 查询所有数据
public List QueryAll() throws Exception {
// 可以理解为,数据库中的每一条数据,都可以是一个实体类的对象
// 泛型集合,这个集合里只能存放DB_Stu类型的对象
List stulist = new ArrayList<>();
String sql = "select * from db_stu";
// 调用方法,执行查询
ResultSet rs = db.Query(sql);
// 循环结果集中的数据,并且把数据存储到集合中
try {
while(rs.next()) {
DB_Stu stu = new DB_Stu();
stu.setStuno(rs.getInt(1));
stu.setStuname(rs.getString(2));
stu.setStusex(rs.getString(3));
stu.setStuage(rs.getInt(4));
// 把这个有数据库的对象存储到集合中去
stulist.add(stu);
}
} catch(SQLException e) {
e.printStackTrace();
}
return stulist;
}
public List Query(String name) throws Exception{
List slist = new ArrayList<>();
String sql = "select * from db_stu where stuname like concat(concat('%',?),'%')";
ResultSet rsq = db.Query(sql, name);
while(rsq.next()) {
DB_Stu dstu = new DB_Stu();
dstu.setStuno(rsq.getInt(1));
dstu.setStuname(rsq.getString(2));
dstu.setStusex(rsq.getString(3));
dstu.setStuage(rsq.getInt(4));
slist.add(dstu);
}
return slist;
}
}
DB_Stu.java
public class DB_Stu {
// 里面的信息 尽量和数据库中的字段一致
int stuno;
String stuname;
String stusex;
int stuage;
public int getStuno() {
return stuno;
}
public void setStuno(int stuno) {
this.stuno = stuno;
}
public String getStuname() {
return stuname;
}
public void setStuname(String stuname) {
this.stuname = stuname;
}
public String getStusex() {
return stusex;
}
public void setStusex(String stusex) {
this.stusex = stusex;
}
public int getStuage() {
return stuage;
}
public void setStuage(int stuage) {
this.stuage = stuage;
}
}
StuService.java
import java.sql.ResultSet;
import java.util.List;
// 处理层
public class StuService {
StuDao sdao = new StuDao();
public int add(DB_Stu stu) throws Exception {
if(stu != null) {
return sdao.add(stu);
}
return 0;
}
public int del(int stuno) throws Exception {
// 调用dao层中的方法(接收dao中的结果交给Test处理)
int num = sdao.del(stuno);
return num;
}
public int update(DB_Stu stu) throws Exception {
return sdao.update(stu);
}
public List QueryAll() throws Exception {
return sdao.QueryAll();
}
public List Query(String name) throws Exception{
return sdao.Query(name);
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DataBase {
Connection conn;
// 连接
public void getConn() throws Exception{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","123456");
}
// 增删改
public int DoExe(String sql,Object... obj) throws Exception {
getConn();
PreparedStatement pstmt = conn.prepareStatement(sql);
for(int i = 0; i
StuDao.java
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class StuDao {
DataBase db = new DataBase();
// 添加
// 这里的参数是一个实体类的对象
public int add(DB_Stu stu) throws Exception {
String sql = "insert into db_stu values((select max(stuno)+1 from db_stu),?,?,?)";
return db.DoExe(sql, stu.getStuname(),stu.getStusex(),stu.getStuage());
}
// 删除,这个方法的参数是学号
public int del(int stuno) throws Exception {
// 删除语句
String sql = "delete from db_stu where stuno=?";
int num = db.DoExe(sql, stuno);
return num;
}
// 修改 是一个实体类
public int update(DB_Stu stu) throws Exception {
String sql = "update db_stu set stuname=?,stusex=?,stuage=? where stuno=?";
return db.DoExe(sql, stu.getStuname(),stu.getStusex(),stu.getStuage(),stu.getStuno());
}
// 查询所有数据
public List QueryAll() throws Exception {
// 可以理解为,数据库中的每一条数据,都可以是一个实体类的对象
// 泛型集合,这个集合里只能存放DB_Stu类型的对象
List stulist = new ArrayList<>();
String sql = "select * from db_stu";
// 调用方法,执行查询
ResultSet rs = db.Query(sql);
// 循环结果集中的数据,并且把数据存储到集合中
try {
while(rs.next()) {
DB_Stu stu = new DB_Stu();
stu.setStuno(rs.getInt(1));
stu.setStuname(rs.getString(2));
stu.setStusex(rs.getString(3));
stu.setStuage(rs.getInt(4));
// 把这个有数据库的对象存储到集合中去
stulist.add(stu);
}
} catch(SQLException e) {
e.printStackTrace();
}
return stulist;
}
public List Query(String name) throws Exception{
List slist = new ArrayList<>();
String sql = "select * from db_stu where stuname like concat(concat('%',?),'%')";
ResultSet rsq = db.Query(sql, name);
while(rsq.next()) {
DB_Stu dstu = new DB_Stu();
dstu.setStuno(rsq.getInt(1));
dstu.setStuname(rsq.getString(2));
dstu.setStusex(rsq.getString(3));
dstu.setStuage(rsq.getInt(4));
slist.add(dstu);
}
return slist;
}
}
DB_Stu.java
public class DB_Stu {
// 里面的信息 尽量和数据库中的字段一致
int stuno;
String stuname;
String stusex;
int stuage;
public int getStuno() {
return stuno;
}
public void setStuno(int stuno) {
this.stuno = stuno;
}
public String getStuname() {
return stuname;
}
public void setStuname(String stuname) {
this.stuname = stuname;
}
public String getStusex() {
return stusex;
}
public void setStusex(String stusex) {
this.stusex = stusex;
}
public int getStuage() {
return stuage;
}
public void setStuage(int stuage) {
this.stuage = stuage;
}
}
StuService.java
import java.sql.ResultSet;
import java.util.List;
// 处理层
public class StuService {
StuDao sdao = new StuDao();
public int add(DB_Stu stu) throws Exception {
if(stu != null) {
return sdao.add(stu);
}
return 0;
}
public int del(int stuno) throws Exception {
// 调用dao层中的方法(接收dao中的结果交给Test处理)
int num = sdao.del(stuno);
return num;
}
public int update(DB_Stu stu) throws Exception {
return sdao.update(stu);
}
public List QueryAll() throws Exception {
return sdao.QueryAll();
}
public List Query(String name) throws Exception{
return sdao.Query(name);
}
}



