栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Oracle——8.分层操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Oracle——8.分层操作

目录

分层操作

案例

数据库

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);
	}

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/831959.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号