JDBC封装-Java(新手)
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日17:22:31