整个项目的结构如图,其中所有的代码都在下面;
1.创建一个Dao接口
Dao接口
package com.kgc.one.Dao;
import java.io.Serializable;
import java.util.List;
/**
* 规定所有的Dao都应该实现这个接口
*/
public interface Dao<T> {
//增加一条记录
public int insert(T t);
//根据id删除一条记录
public int delete(Serializable id);
//修改一条记录
public int update(T t);
//根据id查询一条记录,将这条记录以对象的形式返回
public T findById(Serializable id);
//查询所以数据,将表中的每一条记录实例化一个对象,以集合形式返回
public List<T> findAll();
}
2、创建一个entity包 包含两个实体类Student、Classes 两个类
实体类,封装student表里面的记录
这个类的属性与表的字段对应,表中有什么字段,类就有什么属性
这个类的一个对象可以封装表中的一条记录
Classes类
package com.kgc.one.entity;
public class Classes {
private int id;
private String name;
private int num;
public Classes() { }
public Classes(int id, String name, int num) {
this.id = id;
this.name = name;
this.num = num;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
@Override
public String toString() {
return "Classes{" +
"id=" + id +
", name='" + name + '\'' +
", num=" + num +
'}';
}
}
Student类
package com.kgc.one.entity;
import java.util.Date;
/**
* 实体类,封装student表里面的记录
* 这个类的属性与表的字段对应,表中有什么字段,类就有1什么属性
* 这个类的一个对象可以封装表中的一条记录
*/
public class Student {
private int s_id;
private String name;
private Date birth;
private String sex;
private int age;
private int c_id;
public Student(){}
public Student( String name, Date birth, String sex, int age, int c_id) {
this.s_id = s_id;
this.name = name;
this.birth = birth;
this.sex = sex;
this.age = age;
this.c_id = c_id;
}
public Student(int s_id, String name, Date birth, String sex, int age, int c_id) {
this.s_id = s_id;
this.name = name;
this.birth = birth;
this.sex = sex;
this.age = age;
this.c_id = c_id;
}
public int getS_id() {
return s_id;
}
public void setS_id(int s_id) {
this.s_id = s_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getC_id() {
return c_id;
}
public void setC_id(int c_id) {
this.c_id = c_id;
}
@Override
public String toString() {
return "Student{" +
"s_id=" + s_id +
", name='" + name + '\'' +
", birth=" + birth +
", sex='" + sex + '\'' +
", age=" + age +
", c_id=" + c_id +
'}';
}
}
3.方法类数据访问对象【对表的操作转换成对对象的操作】
ClassesDao接口
package com.kgc.one.Dao;
import com.kgc.one.entity.Classes;
public interface ClassesDao extends Dao<Classes> {
}
StudentDao接口
package com.kgc.one.Dao;
import com.kgc.one.entity.Student;
public interface StudentDao extends Dao<Student> {
}
ClassDaoImpl类
package com.kgc.one.Dao.impl;
import com.kgc.one.Dao.ClassesDao;
import com.kgc.one.entity.Classes;
import com.kgc.one.utils.ConnectionUtils;
import java.io.Serializable;
import java.sql.ResultSet;
import java.util.List;
public class ClassesDaoImpl implements ClassesDao {
@Override
public int insert(Classes classes) {
String sql="insert into classes values("+classes.getId()+",'"+classes.getName()+"',"+classes.getNum()+")";
try{
System.out.println("添加成功");
return ConnectionUtils.executeUpdate(sql);
}catch (Exception ex){
ex.printStackTrace();
}
return 0;
}
@Override
public int delete(Serializable id) {
String sql="delete from classes where id="+id;
try {
System.out.println("删除成功");
return ConnectionUtils.executeUpdate(sql);
}catch (Exception ex){
ex.printStackTrace();
}
return 0;
}
@Override
public int update(Classes classes) {
//update from classes set name='WEB' where id=4;
String sql="update classes set name='"+classes.getName()
+"'where id=4";
try{
return ConnectionUtils.executeUpdate(sql);
}catch (Exception ex){
ex.printStackTrace();
}
return 0;
}
@Override
public Classes findById(Serializable id) {
String sql="select * from classes where id="+id;
try{
ResultSet resultSet=ConnectionUtils.executeQuery(sql);
while(resultSet.next()){
int c_id=resultSet.getInt(1);
String name=resultSet.getString(2);
int num=resultSet.getInt(3);
System.out.println(c_id+","+name+","+num);
}
}catch (Exception ex){
ex.printStackTrace();
};
return null;
}
@Override
public List<Classes> findAll() {
String sql="select * from classes ";
try{
ResultSet resultSet=ConnectionUtils.executeQuery(sql);
while(resultSet.next()){
int c_id=resultSet.getInt(1);
String name=resultSet.getString(2);
int num=resultSet.getInt(3);
System.out.println(c_id+","+name+","+num);
}
}catch (Exception ex){
ex.printStackTrace();
};
return null;
}
}
StudentDaoImpl类
package com.kgc.one.Dao.impl;
import com.kgc.one.Dao.StudentDao;
import com.kgc.one.entity.Student;
import com.kgc.one.utils.ConnectionUtils;
import java.io.Serializable;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.List;
public class StudnetDaoImpl implements StudentDao {
@Override
public int insert(Student student) {
//sql语句
//inset into student values(9,'张三','1998-02-08','男','23','1')
//字符串转日期
SimpleDateFormat sdf=new SimpleDateFormat("yyyy--MM--dd");
String rq=sdf.format(student.getBirth());
String sql="insert into student values("+student.getS_id()+",'"+student.getName()+"','"+rq+"','"
+student.getSex()+"','"+student.getAge()+"','"+student.getC_id()+"')";
System.out.println(sql);
//之前都是为了得到sql语句,然后调用ConnectionUtils.executeUpdate()连接数据库,执行sql语句
try{
return ConnectionUtils.executeUpdate(sql);
}catch (Exception ex){
ex.printStackTrace();
}
return 0;
}
@Override
public int delete(Serializable id) {
String sql="delete from student where s_id="+id;
try{
return ConnectionUtils.executeUpdate(sql);
}catch (Exception ex){
ex.printStackTrace();
}
return 0;
}
@Override
public int update(Student student) {
//update from student set s_name="李四" where s_id="08"
String sql="update from student set s_name="+student.getName()+"where id="+student.getS_id();
try{
return ConnectionUtils.executeUpdate(sql);
}catch (Exception ex){
ex.printStackTrace();
}
return 0;
}
@Override
public Student findById(Serializable id) {
String sql="select * from student where s_id="+id;
try{
ResultSet resultSet=ConnectionUtils.executeQuery(sql);
while(resultSet.next()) {
int s_id = resultSet.getInt(1);
String name = resultSet.getString(2);
String birth = resultSet.getString(3);
String sex = resultSet.getString(4);
int age = resultSet.getInt(5);
int c_id = resultSet.getInt(6);
System.out.println(s_id + "," + name + "," + birth + "," + sex + "," + age + "," + c_id);
}
}catch (Exception ex){
ex.printStackTrace();
}
return null;
}
@Override
public List<Student> findAll() {
String sql="select * from student";
try{
ResultSet resultSet=ConnectionUtils.executeQuery(sql);
while(resultSet.next()){
int id=resultSet.getInt(1);
String name=resultSet.getString(2);
String birth=resultSet.getString(3);
String sex=resultSet.getString(4);
int age=resultSet.getInt(5);
int c_id=resultSet.getInt(6);
System.out.println(id+","+name+","+birth+","+sex+","+age+","+c_id);
}
}catch (Exception ex){
ex.printStackTrace();
}
return null;
}
}
ConnectionUtils类
package com.kgc.one.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/**
* 使用单例模式构造一个连接对象
*/
public class ConnectionUtils {
private static Connection conn=null;
private static String driver="com.mysql.cj.jdbc.Driver";
private static String url="jdbc:mysql://localhost:3306/exercise?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT";
private static String username="root";
private static String password="123456";
private ConnectionUtils(){}
//在整个程序运行过程中都只会使用这一个连接
static {
try{
Class.forName(driver);
conn= DriverManager.getConnection(url,username,password);
}catch (Exception ex){
ex.printStackTrace();
}
}
//调用这个方法返回一个连接
public static Connection getConn(){
return conn;
}
//执行insert delete update
public static int executeUpdate(String sql) throws Exception{
Statement statement=ConnectionUtils.getConn().createStatement();
int result=statement.executeUpdate(sql);
return result;
}
//执行select
public static ResultSet executeQuery(String sql) throws Exception{
Statement statement=getConn().createStatement();
ResultSet resultSet=statement.executeQuery(sql);
return resultSet;
}
}
测试类 JdbcTest
package com.kgc.one;
import com.kgc.one.Dao.impl.ClassesDaoImpl;
import com.kgc.one.Dao.impl.StudnetDaoImpl;
import com.kgc.one.entity.Classes;
import com.kgc.one.entity.Student;
import java.util.Date;
public class JdbcTest {
public static void main(String[] args) throws Exception{
//向学生表中增加一条数据
StudnetDaoImpl studnetDao=new StudnetDaoImpl();
Student student=new Student(9,"张三",new Date(),"男",23,1);
//studnetDao.insert(student);
//从学生表中删除一条数据
//studnetDao.delete(9);
//根据id查询某一条数据
//studnetDao.findById(8);
//查询学生表里面的所有数据
//studnetDao.findAll();
//对班级表进行操作
ClassesDaoImpl classesDao=new ClassesDaoImpl();
Classes classes=new Classes(4,"web",20);
//插入一条数据
//classesDao.insert(classes);
//删除一条数据
//classesDao.delete(6);
//修改一条数据
//classesDao.update(classes);
//根据id查询一条数据
//classesDao.findById(4);
//查询所有数据
classesDao.findAll();
}
}