一、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();
}
}