DAO (DataAccessobjects 数据存取对象):
是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。通俗来讲,就是将数据库操作都封装起来dao组成部分
1、DAO接口: 把对数据库的所有操作定义成抽象方法,可以提供多种实现。
2、DAO 实现类: 针对不同数据库给出DAO接口定义方法的具体实现。
3、实体类:用于存放与传输对象数据。
4、数据库连接和关闭工具类: 避免了数据库连接和关闭代码的重复使用,方便修改。
创建包(entity,util(BaseDao),dao,test,service)
Dao 对数据库的操作交替
entiy 实体类(封装)
Test测试类(输出)
Util 工具类(网上抄的工具表)
Service 业务需求
basedao的工具
package cn.kg.util;
import java.sql.*;
public class BaseDao {
//声明三大对象Connection,PreparedStatement,ResultSet
protected static Connection conn;
protected static PreparedStatement ps;
protected static ResultSet rs;
public static final String DRIVER="com.mysql.cj.jdbc.Driver";
public static final String URL="jdbc:mysql://localhost:3306/db_29";
public static final String USERNAME="root";
public static final String PASSWORD="123456";
//连接数据库的方法和关闭数据库的方法
public void getConnection(){
try {
Class.forName(DRIVER);
conn= DriverManager.getConnection(URL,USERNAME,PASSWORD);
// System.out.println(conn);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
//关闭
public void closeConn(){
try {
if (rs!=null){
rs.close();
}
if (ps!=null){
ps.close();
}
if (conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//通用增删改
public int executeUpdate(String sql ,Object[] params){
int flag=0;
try {
getConnection();
ps=conn.prepareStatement(sql);
if (params!=null){
for (int i=0;i<params.length;i++){
ps.setObject(i+1,params[i]);
}
}
flag=ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeConn();
}
return flag;
}
//通用查询
public ResultSet executeQuery(String sql ,Object[] params){
getConnection();
try {
ps=conn.prepareStatement(sql);
if (params!=null){
for (int i=0;i<params.length;i++){
ps.setObject(i+1,params[i]);
}
}
rs=ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
public static void main(String[] args) {
BaseDao bd=new BaseDao();
bd.getConnection();
}
}
新建一个dao包,dao包下面建一个IMpl包,Impl包下面建一个DemoDaoImpl类,Dao包下面放一个DemoDao接口
entiy包下面放Demo的封装
service包下面建一个Impl包,Impl包下面建一个DemoServiceImpl类,service下面建一个DemoService接口
test包下面放实现类。所有的方法在这里实现TestDempServiceImpl
util包下面放basedao。basedao里面放工具类,就是固定的格式
DemoService接口和DemoDao接口里面放
public Integer addStudent(Student student);
public Integer delbyID(Integer id);
public Integer updateStudent(Student Student);
public List<Student>findAll();
public Student findById(Integer id);
(增改,用集合查全部,用封装类的类名传进接口的参数列表内)(删和查某一个,用Integer id传进接口的参数列表)
DemoServiceImpl和DemoDaoImpl中都要重写接口的方法,DemoDaoImpl还要继承BaseDao类
根据要求(增删改查)
在方法中,返回值 调用父类basedao类中的方法应用于增删改
而差全部和查某个。只有通用查询方法所以要添加别的方法
public List<Student> findAll() {
List<Student> list = new ArrayList<>();
String sql = "select * from t_student";
Object[] params = null;
rs = super.executeQuery(sql, params);
try {while (rs.next()) {
Student student = new Student();
student.setId(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setNickname(rs.getString("nickname"));
student.setWeight(rs.getDouble("weight"));
student.setHeight(rs.getDouble("height"));
list.add(student);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
super.closeConn();
}
return list;
}
@Override
public Student findById(Integer id) {
Student student=new Student();
rs=super.executeQuery("select*from t_student where id=?",new Object[]{id});
try {
while(rs.next()){
student.setId(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setNickname(rs.getString("nickname"));
student.setHeight(rs.getDouble("height"));
student.setWeight(rs.getDouble("weight"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return student;
}
}