(21)JDBC工具类、Dao模式、项目分层、Statement和PrepareStatement的区别

本文介绍了JDBC工具类的基本功能,包括建立和关闭连接以及执行SQL操作。深入探讨了Statement与PrepareStatement的区别,强调PrepareStatement的参数拼接优势。此外,文章详细阐述了项目分层的各个阶段,从需求分析到接口设计,涵盖了UI、controller、service和dao层的角色和职责。最后,解释了Dao模式的应用,包括创建DAO接口和实现类以规范数据访问规则。
摘要由CSDN通过智能技术生成

一、JDBC工具类

建立连接
关闭连接
执行增删改查SQL
封装无参的JDBCUtil:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCUtil {
	private static String url = "jdbc:mysql://localhost:3306/shopping?useSSL=false&serverTimezone=UTC";
	private static String username = "root";
	private static String password = "";
	public static Connection getConnection() {
		Connection conn = null;
		try {
			conn = DriverManager.getConnection(url,username,password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}
	public static void closeConn(Connection conn) {
		try {
			conn.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static int executeUpdateSql(String sql) {
		Connection conn = getConnection();
		int result = 0;
		try {
			Statement stat = conn.createStatement();
			result = stat.executeUpdate(sql);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		closeConn(conn);
		return result;
	}
}

二、Statement和PrepareStatement的区别

Statement:直接执行完整的SQL
PrepareStatement:SQL可以通过?来拼接,然后再给?赋值。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class UserDao_2 {

	String url = "jdbc:mysql://localhost:3306/shopping?useSSL=false&serverTimezone=UTC";
	String username = "root";
	String password = "";

	//insert into User values();每行对应一个对象
	public int addUser(User user){
		String sql = "insert into product values(?,?,?,?)";
		String[] params = {new Integer(user.getPid()).toString(),user.getPname(),new Double(user.getPrice()).toString(),new Integer(user.getCno()).toString()};
		return JDBCUtil.executeUpdateSql(sql,params);
	}

	//delete from User where id=?
	public int delUser(int pid) throws SQLException {
		String sql = "delete from User where id=?";
		String[] params = {new Integer(pid).toString()};
		return JDBCUtil.executeUpdateSql(sql,params);
	}
	//update User set name=?,sex=?,where id=?
	public int updateUser(User user) throws SQLException {
		
		String sql = "update product set pname=?,price=?,cno=?where pid=?";
		String[] params = {user.getPname(),new Double(user.getPrice()).toString(),new Integer(user.getCno()).toString(),new Integer(user.getPid()).toString()};
		return JDBCUtil.executeUpdateSql(sql,params);
	
	}

三、项目分层

1.需求分析:

(1)功能结构图
(2)业务流程图
(3)用例图

2.界面原型分析:

3.数据库分析:

4.接口分析:

UI层:
controller层:
service层:业务,将关联数据联通起来——业务流程图
     调用dao的多个对象的多个方法,连通业务
dao层:Java跟数据库连接,实现数据交互,数据在表里
     操作数据,不关心业务的
     所有的dao默认要提供五个方法
entity层:数据对应的对象,ORM映射
接口分析:确定service层需要提供什么方法,确定dao层需要提供什么方法
有多少张表,就有多少个entity
有多少个entity,就有多少个dao、操作表,dao默认提供五个方法。
有多少个主业务,就有多少个service,组织dao层的数据关联,实现业务

四、Dao模式

Data Access Object 数据访问对象
1.新建一个dao的接口,里面声明数据访问规则。

import java.sql.SQLException;

/*
 * 定义操作数据库的方法
 */
public interface UserDao {

	void findAll() throws SQLException;
}

2.新建一个dao的实现类,具体实现早前定义的规则。

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import Jdbc_0809Dao.User;
import Jdbc_0811Dao.UserDao;
import Jdbc_0811Util.JDBCUtil;

public class UserDaoImpl implements UserDao{

	@Override
		public void findAll() throws SQLException{
			Connection conn = JDBCUtil.getConnection();
			String sql = "select * from product" ;
			PreparedStatement prep = conn.prepareStatement(sql);
			
			ResultSet rs = prep.executeQuery();
			

			while(rs.next()) {
				int id = rs.getInt("id");
				String name = rs.getString("uname");
				String pass = rs.getString("password");
				System.out.println(id+name+pass);
			}
			conn.close();
	}
}

3.直接使用

import java.sql.SQLException;

import Jdbc_0811Dao.UserDao;
import Jdbc_0811DaoImpl.UserDaoImpl;

public class UserTest {

	public static void main(String[] args) throws SQLException {
		UserDao dao = new UserDaoImpl();

		dao.findAll();
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值