桌面应用与WEB开发的实现步骤

一, 桌面应用和web开发的实现步骤(相同部分)

首先桌面应用和web开发的实现步骤大致差不太多基本的区别只有view层有点区别,主要操作的对象有三个

  • Connection 连接数据库的类
  • PreparedStatement 进行sql注入的类
  • ResultSet 对查询到的结果集进行的接收
    包的层次结构
    在这里插入图片描述

1.创建实体层

实体层的名称有多种叫法包过 pojo,domain,entity…
实体层主要是与数据库中的表结构做一个映射
实现步骤:

  • 对数据库列名的映射(下划线转驼峰)
  • 添加get set方法
  • 添加相应的构造器
  • 添加toString方法

2.创建一个工具类(utlis)

创建工具类的作用主要是对数据库的连接和关闭做一个封装,方便之后的使用
实现步骤:

  • 预先准备对应的驱动地址,jdbc的路径,数据库的用户名和密码
  • 静态加载驱动
  • 定义获取连接的方法
  • 定义关闭连接的方法
private static final String DRIVER = "com.mysql.jdbc.Driver";
	private static final String URL = "jdbc:mysql://192.168.88.100/student_db?characterEncoding=utf-8";
	private static final String USER = "root";
	private static final String PASSWORD = "123456";
	
	//加载驱动
	static {
		try {
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//获取链接
	public static Connection conn() {
		try {
			//获取链接并返回
			return DriverManager.getConnection(URL,USER,PASSWORD);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	//关闭连接
	public static void close(Connection conn,ResultSet rser,PreparedStatement pst) {
		
		try {
			if (rser != null) {
				rser.close();
			}
			if (pst != null) {
				pst.close();
			}
			if (conn != null) {
				conn.close();
			} 
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

3.创建一个dao包

dao包主要是直接和数据库做一些交互,实现数据的增删改查

查询方法实现步骤:

  • 定义Connection,PreparedStatement,R的全局变量(创建全局变量的意义是为了之后的方法方便调用)
  • 创建查询的方法
  • 创建LIst集合接收多条数据方便结果的返回
  • 通过之前封装的utils(工具类)包下的方法连接数据库
  • 定义查询的sql语句
  • 判断是否需要进行sql语句的拼接
  • 预编译sql
  • 为预编译的sql赋值
  • 执行sql并返回结果集
  • 循环创建相对应的实体类逐条接收结果
  • 将循环获取的数据添加到list集合中并返回结果
private Connection conn;
	private PreparedStatement pst;
	private ResultSet rset;
	
	//创建查询方法
	public List<TbStudent> selectAndLike(String name){
		//创建集合存储数据
		List<TbStudent> list = new ArrayList<>();
		//获取数据库链接
		conn = ConnAndClose.conn();
		//定义sql语句
		String sql = "select * from tb_student ts , tb_class tc where ts.class_no = tc.class_no ";
		//判断是否需要拼接sql
		if (name != null && !name.equals("")) {
			sql += " and ts.stu_name like ?";
		}
		//预编译sql语句
		try {
			pst = conn.prepareStatement(sql);
			if (name != null && !name.equals("")) {
				//给站位符赋值
				pst.setString(1, "%"+ name +"%");
			}

			//执行sql语句
			
			rset = pst.executeQuery();
			//将查询到的数据放入list中并返回
			while (rset.next()) {
				//创建学生类用于获取查询的数据
				TbStudent tbStudent = new TbStudent();
				tbStudent.setStuNo(rset.getInt("stu_no"));
				tbStudent.setStuName(rset.getString("stu_name"));
				tbStudent.setStuGender(rset.getString("stu_gender"));
				tbStudent.setStuAge(rset.getInt("stu_age"));
				TbClass tbClass = new TbClass();
				tbClass.setClassNo(rset.getInt("tc.class_no"));
				tbClass.setClassName(rset.getString("class_name"));
				tbStudent.setTbClass(tbClass);
				list.add(tbStudent);
			}
			//返回数据
			return list;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			//关闭连接
			ConnAndClose.close(conn, rset, pst);
		}
		return list;
	}
	

增删改方法的实现步骤:

  • 定义 Connection,PreparedStatement,ResultSet的全局变量
  • 创建方法
  • 获取连接
  • 定义sql
  • 预编译sql
  • 为预编译sql赋值
  • 执行sql
  • 返回结果集
    tips:增删改操作基本一致,只需更改对应sql
//新增方法
	public int insertLink(TbStudent tbStudent) {
		
		//获取链接
		conn = ConnAndClose.conn();
		//编写sql
		String sql = "INSERT into tb_student(stu_name,stu_gender,stu_age,class_no) "
				+ "VALUES(?,?,?,(select class_no FROM tb_class WHERE class_name <=> ?))";
		//预编译sql
		try {
			pst = conn.prepareStatement(sql);
			//给占位符赋值
			pst.setString(1, tbStudent.getStuName());
			pst.setString(2, tbStudent.getStuGender());
			pst.setInt(3, tbStudent.getStuAge());
			pst.setString(4, tbStudent.getTbClass().getClassName());
			//执行sql
			int up = pst.executeUpdate();
			return up;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//返回执行值
		return 0;
	}

4.创建service层(业务层)

创建多层的意义是为了解耦,降低程序的耦合性
service层的主要意义是为了实现各种业务的需求,根据不同的需求调用不同的dao层的方法
首先要创建对应的接口层

public interface SelectAndInser {
	
	//查询方法
	List<TbStudent> findAll(String name);
	
	//新增
	int insertStudent(TbStudent tbStudent);

}

其次是对对应接口的实现

public class SelectAndInserImpl implements SelectAndInser{

	@Override
	public List<TbStudent> findAll(String name) {
		// TODO Auto-generated method stub
		SelectAndInsert select = new SelectAndInsert();
		return select.selectAndLike(name);
	}

	@Override
	public int insertStudent(TbStudent tbStudent) {
		// TODO Auto-generated method stub
		SelectAndInsert select = new SelectAndInsert();
		return select.insertLink(tbStudent);
	}
}

创建对应的接口层后视图层就可以根据相对应的需求调用业务层的方法

二. view层(视图层)

1.桌面应用view层开发

视图层就是我们所能看到的页面桌面应用一般通过Jfrom实现
常用的方法有:

方法作用
table = new JTable(bs,bt);定义相对应的表结构
scrollPane.setViewportView(table);将对应的表结构展示出来
	public void select(String name) {
		//获取所有数据
		list = sele.findAll(name);
		//定义表头
		Object bt [] = {"学号","学生姓名","学生性别","学生年龄","学生班级","班级名称"};
		
		//定义表生
		Object bs [][] = new Object[list.size()][bt.length];
		//给表结构赋值
		for (int i = 0; i < bs.length; i++) {
			//获取每一条数据
			TbStudent tb = list.get(i);
			bs[i][0] = tb.getStuNo();
			bs[i][1] = tb.getStuName();
			bs[i][2] = tb.getStuGender();
			bs[i][3] = tb.getStuAge();
			bs[i][4] = tb.getTbClass().getClassNo();
			bs[i][5] = tb.getTbClass().getClassName();
		}
		table = new JTable(bs,bt);
		//展示出来
		scrollPane.setViewportView(table);
	}
方法作用
SelectView.this.dispose();关闭相对应的窗体
InsertView frame = new InsertView();frame.setVisible(true);打开相对应的窗体
				SelectView.this.dispose();
				InsertView frame = new InsertView();
				frame.setVisible(true);
方法作用
文本框名.getText()文本框所输入的值
单选框1.isSelected()?单选框1.getText():单选框2.getText()获取选中的单选框值(只适合两个)
复选框名.getSelectedItem().toString();获取复选框的文本内容
JOptionPane.showMessageDialog(null, “不能为空”);提示框
int pd = JOptionPane.showConfirmDialog(SelectAndDeleteUl.this,“您是否确定需要删除 id为”+tb.getDeptId()+“的值”,“温馨提示”, 0,1);
警告框,可以根据返回的值判断是否进行下一步操作
//获取文本框的文本内容
//年龄
				String age = textage.getText();
//获取点选框的文本内容
//想要获取单个单选框,首先需要将单选按钮加入单选组
//添加进单选按钮组
		ButtonGroup gp = new ButtonGroup();
		gp.add(rdbtnNewRadioButton);
		gp.add(rdbtnNewRadioButton_1);
//获取单选值
String sex=rdbtnNewRadioButton.isSelected()?rdbtnNewRadioButton.getText():rdbtnNewRadioButton_1.getText();
//提示信息
JOptionPane.showMessageDialog(null, "不能为空");
//警告框,可以根据返回的值判断是否进行下一步操作
int pd = JOptionPane.showConfirmDialog(SelectAndDeleteUl.this,"您是否确定需要删除 id为"+tb.getDeptId()+"的值","温馨提示", 0,1);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值