技术标签: Java
DBUtil——通用的数据库帮助类,可以简化Dao层的代码量。
帮助类一般建议写在 xxx.util包中
这一篇,我们编写DBUtil将JAVA学习笔记032实例中StudentDao.java代码简化,提高代码的复用性。
即将StudentDao.java 分解为通用复用文件DBUtil和StudentDao.java
package org.student.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.student.entity.Student;
//数据访问层:原子性的增删改查,不能再分
public class StudentDao {
// private final String URL="jdbd:mysql://localhost:3306/three?serverTimezone=UTC";
// private final String USERNAME="root";
// private final String PASSWORD="prolific";
private static final String URL="jdbc:mysql://localhost:3306/three?serverTimezone=UTC";
private static final String USERNAME="root";
private static final String PASSWORD="prolific";
public boolean isExist(int sno) {//true:此人存在 false:此人不存在。
return queryStudentBySno(sno)==null? false:true;
// if (queryStudentBySno(sno)==null) { //如果是空的,说明此人步存在,false;
// System.out.println("is Exit=false");
// return false;
// }else {
// System.out.println("is Exit=false");
// return true;
// }
}
//增加学生操作
public boolean addStudent(Student student) {//zs 23 xa
Connection connection = null;
PreparedStatement pstmt =null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
String sql="insert into student values(?,?,?,?)";
pstmt=connection.prepareStatement(sql);
pstmt.setInt(1, student.getSno());
pstmt.setString(2, student.getSname());
pstmt.setInt(3, student.getSage());
pstmt.setString(4, student.getSaddress());
int count=pstmt.executeUpdate();
if (count>0)
return true;
else
return false;
}catch(ClassNotFoundException e) {
e.printStackTrace();
return false;
}catch(SQLException e) {
e.printStackTrace();
return false;
}catch(Exception e) {
e.printStackTrace();
return false;
}finally {
try {
if(connection!=null) connection.close();
if(pstmt!=null) pstmt.close();
}catch(SQLException e) {
e.printStackTrace();
return false;
}
}
}
//根据学号查学生
public Student queryStudentBySno(int sno) {
Connection connection = null;
PreparedStatement pstmt =null;
ResultSet rs=null;
Student student=null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
String sql="select * from student where sno=?";
pstmt=connection.prepareStatement(sql);
pstmt.setInt(1, sno);
rs=pstmt.executeQuery();
if(rs.next()) {
int no = rs.getInt("sno");
String name = rs.getString("sname");
int age = rs.getInt("sage");
String address = rs.getString("saddress");
student=new Student(no,name,age,address);
}
return student;
}catch(ClassNotFoundException e) {
e.printStackTrace();
return null;
}catch(SQLException e) {
e.printStackTrace();
return null;
}catch(Exception e) {
e.printStackTrace();
return null;
}finally {
try {
if(rs!=null) rs.close();
if(connection!=null) connection.close();
if(pstmt!=null) pstmt.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
//查询全部学生
public List<Student> queryAllStudents() {
List<Student> students=new ArrayList<>();
Connection connection = null;
PreparedStatement pstmt =null;
ResultSet rs=null;
Student student=null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
String sql="select * from student";
pstmt=connection.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()) {
int no = rs.getInt("sno");
String name = rs.getString("sname");
int age = rs.getInt("sage");
String address = rs.getString("saddress");
student=new Student(no,name,age,address);
students.add(student);
}
return students;
}catch(ClassNotFoundException e) {
e.printStackTrace();
return null;
}catch(SQLException e) {
e.printStackTrace();
return null;
}catch(Exception e) {
e.printStackTrace();
return null;
}finally {
try {
if(rs!=null) rs.close();
if(connection!=null) connection.close();
if(pstmt!=null) pstmt.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
//根据学号 删除学生
public boolean deleteStudentBySno(int sno) {
Connection connection = null;
PreparedStatement pstmt =null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
String sql="delete from student where sno=?";
pstmt=connection.prepareStatement(sql);
pstmt.setInt(1, sno);
int count=pstmt.executeUpdate();
if (count>0)
return true;
else
return false;
}catch(ClassNotFoundException e) {
e.printStackTrace();
return false;
}catch(SQLException e) {
e.printStackTrace();
return false;
}catch(Exception e) {
e.printStackTrace();
return false;
}finally {
try {
if(connection!=null) connection.close();
if(pstmt!=null) pstmt.close();
}catch(SQLException e) {
e.printStackTrace();
return false;
}
}
}
//根据学好修改学生:根据sno知道待修改的人,在把这个人修改成student
public boolean updateStudentBySno(int sno,Student student) {
Connection connection = null;
PreparedStatement pstmt =null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
String sql="update student set sname=?,sage=?,saddress=? where sno=?";
pstmt=connection.prepareStatement(sql);
pstmt.setString(1, student.getSname());
pstmt.setInt(2, student.getSage());
pstmt.setString(3, student.getSaddress());
pstmt.setInt(4, sno);
int count=pstmt.executeUpdate();
if (count>0)
return true;
else
return false;
}catch(ClassNotFoundException e) {
e.printStackTrace();
return false;
}catch(SQLException e) {
e.printStackTrace();
return false;
}catch(Exception e) {
e.printStackTrace();
return false;
}finally {
try {
if(connection!=null) connection.close();
if(pstmt!=null) pstmt.close();
}catch(SQLException e) {
e.printStackTrace();
return false;
}
}
}
}
1.DBUtil.java
package ort.student.util;
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;
import org.student.entity.Student;
//通用的数据库操作方法
public class DBUtil {
//通用的增删改
private static final String URL="jdbc:mysql://localhost:3306/three?serverTimezone=UTC";
private static final String USERNAME="root";
private static final String PASSWORD="prolific";
public static Connection connection = null;
public static PreparedStatement pstmt =null;
public static ResultSet rs=null;
//获取链接
public static Connection getConnection() throws ClassNotFoundException, SQLException{
Class.forName("com.mysql.cj.jdbc.Driver");
return connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
}
//关闭
public static void closeAll(ResultSet rs,Statement stmt,Connection connection) {
try {
if(rs!=null) rs.close();
if(connection!=null) connection.close();
if(pstmt!=null) pstmt.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
//获取PreparedStatement
public static PreparedStatement createPreParedStatement(String sql,Object[] params) throws SQLException, ClassNotFoundException {
pstmt=getConnection().prepareStatement(sql); //获取链接
if (params!=null) {
for (int i=0;i<params.length;i++) {
pstmt.setObject(i+1, params[i]);
}
}
return pstmt;
}
//通用的增删改
public static boolean executeUpdate(String sql,Object[] params) {
PreparedStatement pstmt =null;
try {
pstmt=createPreParedStatement(sql,params);
int count=pstmt.executeUpdate();
if (count>0)
return true;
else
return false;
}catch(SQLException e) {
e.printStackTrace();
}catch(Exception e) {
e.printStackTrace();
return false;
}finally {
closeAll(null,pstmt,connection);
}
return false;
}
//通用的查
public static ResultSet executeQuery(String sql,Object[] params) throws ClassNotFoundException, SQLException {
pstmt=createPreParedStatement(sql,params);
rs=pstmt.executeQuery();
return rs;
}
}
2.StudentDao.java
package org.student.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.student.entity.Student;
import ort.student.util.DBUtil;
//数据访问层:原子性的增删改查,不能再分
public class StudentDao {
private static final String URL="jdbc:mysql://localhost:3306/three?serverTimezone=UTC";
private static final String USERNAME="root";
private static final String PASSWORD="prolific";
public boolean isExist(int sno) {//true:此人存在 false:此人不存在。
return queryStudentBySno(sno)==null? false:true;
}
//根据学号查学生
public Student queryStudentBySno(int sno){
String sql="select * from student where sno=?";
Connection connection = null;
PreparedStatement pstmt =null;
ResultSet rs=null;
Student student=null;
Object[] params= {sno};
try {
// Class.forName("com.mysql.cj.jdbc.Driver");
// connection=DriverManager.getConnection(URL,USERNAME,PASSWORD);
// pstmt=connection.prepareStatement(sql);
// pstmt.setInt(1, sno);
// rs=pstmt.executeQuery();
rs=DBUtil.executeQuery(sql,params);
if(rs.next()) {
int no = rs.getInt("sno");
String name = rs.getString("sname");
int age = rs.getInt("sage");
String address = rs.getString("saddress");
student=new Student(no,name,age,address);
}
return student;
}catch(ClassNotFoundException e) {
e.printStackTrace();
return null;
}catch(SQLException e) {
e.printStackTrace();
return null;
}catch(Exception e) {
e.printStackTrace();
return null;
}finally {
DBUtil.closeAll(rs, pstmt, connection);
}
}
//查询全部学生
public List<Student> queryAllStudents() {
List<Student> students=new ArrayList<>();
PreparedStatement pstmt =null;
ResultSet rs=null;
Student student=null;
try {
String sql="select * from student";
rs=DBUtil.executeQuery(sql,null);
while(rs.next()) {
int no = rs.getInt("sno");
String name = rs.getString("sname");
int age = rs.getInt("sage");
String address = rs.getString("saddress");
student=new Student(no,name,age,address);
students.add(student);
}
return students;
}catch(ClassNotFoundException e) {
e.printStackTrace();
return null;
}catch(SQLException e) {
e.printStackTrace();
return null;
}catch(Exception e) {
e.printStackTrace();
return null;
}finally {
DBUtil.closeAll(rs,pstmt,DBUtil.connection);
// try {
// if(rs!=null) rs.close();
// if(DBUtil.connection!=null) DBUtil.connection.close();
// if(pstmt!=null) pstmt.close();
// }catch(SQLException e) {
// e.printStackTrace();
// }
}
}
//增加学生操作
public boolean addStudent(Student student) {//zs 23 xa
String sql="insert into student values(?,?,?,?)";
Object[] params= {student.getSno(),student.getSname(),student.getSage(),student.getSaddress()};
return DBUtil.executeUpdate(sql,params);
}
//根据学号 删除学生
public boolean deleteStudentBySno(int sno) {
String sql="delete from student where sno=?";
Object[] params= {sno};
return DBUtil.executeUpdate(sql,params);
}
//根据学号修改学生:根据sno知道待修改的人,在把这个人修改成student
public boolean updateStudentBySno(int sno,Student student) {
String sql="update student set sname=?,sage=?,saddress=? where sno=?";
Object[] params= {student.getSname(),student.getSage(),student.getSaddress(),sno};
return DBUtil.executeUpdate(sql,params);
}
}
以上替换代码经验证,增删改查均运行正常。
留待学习的地方:try{ }catch{}finalll{}结构的使用,和常用的方法。
第一次接触这种设计思路,首先,设置一个BaseServlet,它继承HttpServlet. 在BaseServlet里面doGet方法中,获取request中的method字段,通过反射执行这个方法,具体代码实现,可以看 其他的Servlet都继承BaseServlet,因为继承BaseServlet,不需要重写doGet方法,所以将自动创建的所有东西删除即可,然后在里面创建实现各种功能的方法....
目录 业务代码 1、递归查询树结构 配置文件 业务代码 1、递归查询树结构 使用JAVA8新特性:stream流 配置文件...
...
Python学习——函数和代码复用 1.七段数码管绘制 要求如下:...
一、MapStruct介绍 这是什么? MapStruct 是一个代码生成器,它极大地简化了基于约定而不是配置方法的 Java Bean 类型之间映射的实现。 生成的映射代码使用普通方法调用,因此快速、类型安全且易于理解。 为什么? 多层应用程序通常需要在不同的对象模型(例如实体和 DTO)之间进行映射。编写此类映射代码是一项繁琐且容易出错的任务。MapStruct旨在通过尽可能地自动化来简化这项...
前言 读过ibm上lambda系列的文章这里,做下总结 使用IntStream取代简单for循环 对于简单的for循环可以IntStream取代,如下 尽量去除冗余信息 lambda可以自己推断部分参数,因此可以省略一些信息 传递形参为实参 传递形参给目标 传递构造函数调用 传递多个实参 总结 一般来说对于可以简化的语句,idea会给出提示,有一部分需要我们有意识的去那样写,唉,lambda真香...
今天开始,Spring 笔记开始更新,主要还是作为阅读《Spring 实战》(第4版)的学习笔记,该系列的内容大多也是引用自该书中。 虽然工作中大量接触 Spring,但回顾发现自己只是知道怎么做,而并没有去深究,导致有时候遇到问题不知从何下手,所以想要系统学习 Spring。 Spring 的使命便是如标题所说:简化 Java 开发。具体怎么简化的呢?分为以下四个方面: 基于 POJO 的轻量级...
[size=x-large]第十六章:简化对Java代码的访问:jsp2.0表达式语言[/size] [size=medium]1[/size].为了计算和输出存储在标准位置的java对象的值,JSP2.0引入一种简捷的语言。表达式语言(EL),另一个特性是用JSP语法。 [size=medium]2[/size].<警告>JSP表达式语言不能用在只支持JSP1.2或更早版本的服务器中...
自己学习的时候可以自定义注解可以学习用,标志方便清晰; 注解1,不推荐写法 注解2 备注推荐的注解写法 注解3 线程安全的注解写法 注解4 线程不安全的注解写法 使用SpringBoot的Application来进行运行 线程不安全的一个测试类 可以使用SpringBoot的嵌入式的Servlet的Filter模式进行过滤器进行 自定义定义 SpringBoot的自定义拦截器 进行运行主类-Spr...