JDBC封装-JAVA(新手)

本文介绍了如何进行JDBC封装,包括代码分层规范,如DAO、Servlet、Entity和Util的组织,以及创建数据库表单、实体类、工具类、DAO接口和实现的详细步骤。通过实例展示了从数据库设计到Java代码实现的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDBC的封装

在这里插入图片描述

dao (代码分层)命名规范:

1、com.XXX.dao    存放dao相关的类型 例如 StudentDAOImpl 处理 数据库的链接 存取数据

2、com.XXX.servlet 存放servlet相关的类 例如:StudentServlet 处理 与浏览器交互的类

3、com.XXX.entity 存放实体类 例如 Student 接受数据库对象模型

4、com.XXX.util 存放工具类 例如 DBUtil

操作步骤:

首先,创建一个数据库表单,起名为Studetn。内有:id、name、age、sex四个属性。将id设为主键并且设置自动递增。

第二,在数据库建立完表单之后,在Java中创建一个数据库表单的实体类。(类名和表名一致)

内有:

1、表单的属性值和属性的基本数据类型。

2、无参的构造函数。

3、有参的构造函数。

4、Get和Set方法。

5、toString方法。

第三:创建一个工具类。

内有:

1、写一个静态代码块。将注册驱动写入其中。

原因:驱动只需要加载一次即可,

所以写在静态代码段中(static),类的静态代码块,随着类的加载,只执行一次。

2、将建立连接进行封装。

3、将增删改的通用方法也一并进行封装。

第四,先在dao层创建一个接口

内有:

1、返回值类型和方法名、参数。

1.1、可根据增删改分为不同的写法。

1.2、两个以上的参数,全部使用对象传参。

第五:在dao层下创建一个包,命名为Impl,在这个包内创建一个接口实现类。

内有:

1、写入SQL语句,要增删改的内容可用占位符代替。

2、返回在工具类里给增删改通用方法设定的调用方法。

3、在返回调用方法里加入占位符所代表的对象。

第六:在servlet里创建测试类。

内有:

1、通过创建的实体类来赋值。

2、通过实现类来调用接口里的方法。

3、调用方法。

实例:

第一步:创建数据库表单。*

在这里插入图片描述

第二步: 创建一个数据库表单的实体类。


    1 package com.Wuchuang.entiy;
     2 
     3 public class Student {
     4 
     5     private int id;
     6     private String name;
     7     private int age;
     8     private String sex;
     9 
    10 
    11     public Student() {
    12     }
    13 
    14     public Student(int id, String name, int age, String sex) {
    15         this.id = id;
    16         this.name = name;
    17         this.age = age;
    18         this.sex = sex;
    19     }
    20 
    21     public int getId() {
    22         return id;
    23     }
    24 
    25     public void setId(int id) {
    26         this.id = id;
    27     }
    28 
    29     public String getName() {
    30         return name;
    31     }
    32 
    33     public void setName(String name) {
    34         this.name = name;
    35     }
    36 
    37     public int getAge() {
    38         return age;
    39     }
    40 
    41     public void setAge(int age) {
    42         this.age = age;
    43     }
    44 
    45     public String getSex() {
    46         return sex;
    47     }
    48 
    49     public void setSex(String sex) {
    50         this.sex = sex;
    51     }
    52 
    53     @Override
    54     public String toString() {
    55         return "Student{" +
    56                 "id=" + id +
    57                 ", name='" + name + '\'' +
    58                 ", age=" + age +
    59                 ", sex='" + sex + '\'' +
    60                 '}';
    61     }
    62 }

第三步:创建一个工具类。


 1 package com.Wuchuang.util;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.PreparedStatement;
 6 import java.sql.SQLException;
 7 
 8 public class DBUtil {
 9     //注册驱动,驱动只需要加载一次即可
10     //所以写在静态代码段中(static)
11     //类的静态代码块,随着类的加载,只执行一次。
12     static {
13         try {
14             Class.forName("com.mysql.jdbc.Driver");
15         } catch (ClassNotFoundException e) {
16             e.printStackTrace();
17         }
18     }
19     //建立链接。需要单独创建一个方法。
20     //通过返回值返回链接对象。
21     //链接每次用完之后就会关闭。
22     public static Connection getConnection() {
23         try {
24             return DriverManager.getConnection("jdbc:mysql:///test?characterEnconding=UTF-8", "数据库账户", "密码");
25         } catch (SQLException e) {
26             e.printStackTrace();
27         }
28         return null;
29     }
30 
31     /** 增删改的通用方法
32      * @param  String sql       要执行的sql
33      * @param  Object[] obj    对象类型的数组  里面存放着 sql执行的占位符参数
34      *         Object...       可变参数
35      * */
36     public  static  boolean executeUpdate(String sql,Object... args){
37         PreparedStatement ps = null;
38 
39         try {
40             ps = getConnection().prepareStatement(sql);
41             for (int i = 0;i<args.length;i++){
42                 ps.setObject(i+1,args[i]);
43             }
44             int i = ps.executeUpdate();
45             if (i>0)return true;
46         } catch (SQLException e) {
47             e.printStackTrace();
48         }
49         return  false;
50     }
51 }

第四步:在dao层创建一个接口。


 1 package com.Wuchuang.dao;
 2 
 3 import com.Wuchuang.entiy.Student;
 4 
 5 public interface IStudentDAO {
 6     /**
 7      * 添加新学生
 8      * insert  into student  (name,age,sex) values (?,?,?);
 9      * 两个以上的参数 全用对象传参
10      * @param  学生对象 里面存放当着需要添加的学生信息
11      * @return  boolean  成功返回 true  失败 返回 false
12      */
13         boolean add (Student s);
14 
15 
16     /**
17      * 根据id删除学生,所以返回值可以直接填写id的数据类型和id
18      * delete from student where id = ?
19      */
20         boolean  delete(int  id);
21 
22 
23     /**
24      * 根据id修改学生
25      * update student set name = ?,age= ? where id = ?
26      */
27         boolean update(Student s);
28 }

 

第五步:创建一个接口实现类。


 1 package com.Wuchuang.dao.Impl;
 2 
 3 import com.Wuchuang.dao.IStudentDAO;
 4 import com.Wuchuang.entiy.Student;
 5 import com.Wuchuang.util.DBUtil;
 6 
 7 public class StudentDAOImpl implements IStudentDAO {
 8     @Override
 9     public boolean add(Student s) {
10         String sql = "insert into Student (name,age,sex) values (?,?,?)";
11 
12         return DBUtil.executeUpdate(sql,s.getName(),s.getAge(),s.getSex());
13     }
14 
15     @Override
16     public boolean delete(int id) {
17         String sql = "delete from Student where id = ?";
18 
19         return DBUtil.executeUpdate(sql,id);
20     }
21 
22     @Override
23     public boolean update(Student s) {
24         String sql = "update Student set name = ?,age = ?,sex = ? where id = ?";
25 
26         return DBUtil.executeUpdate(sql,s.getName(),s.getAge(),s.getSex(),s.getId());
27 
28     }
29 }

 

第六步:进行测试。

 1 package com.Wuchuang.servlet;
 2 
 3 import com.Wuchuang.dao.IStudentDAO;
 4 import com.Wuchuang.dao.Impl.StudentDAOImpl;
 5 import com.Wuchuang.entiy.Student;
 6 import org.junit.Test;
 7 
 8 public class ServletTest{
 9     @Test
10     public void test(){
11         Student s = new Student(1,"吃饭",38,"男");
12 
13         IStudentDAO dao =  new StudentDAOImpl();
14 
15         dao.add(s);
16     }
17 
18 }

2019年4月11日在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值