建立好项目以后,首先配置.xml文件 添加数据库链接包 数据库连接池包 、(junit架包)JUnit是一个开放源代码的测试框架,用于编写和运行可重复的测试 、jakarta架包 ,我自己喜欢加上lombok架包

以下以学生表(student)为例:
CREATE TABLE `student` (
`sid` int NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`age` int DEFAULT NULL,
`birthday` date DEFAULT NULL,
PRIMARY KEY (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=224 DEFAULT CHARSET=utf8mb3;

pojo:存放实体类
建立需要实例化的类 student
dao :持久层 主要负责数据库的连接和处理
Impl: 实现某写接口的类,一般是定义一些规范的类
web:存放web文件的
service:业务层
Dao主要做数据库的交互工作
Modle 是模型 存放你的实体类
Service 做相应的业务逻辑处理
Action是一个控制器
Action像是服务员,顾客点什么菜,菜上给几号桌,都是ta的职责;Service是厨师,action送来的菜单上的菜全是ta做的;Dao是厨房的小工,和原材料(通过hibernate操作数据库)打交道的事情全是ta管。对象的调用流程:JSP—Action—Service—DAO—Hibernate—数据库。(粗体是自己需要码代码的)
PS:所以我觉得在之前SpringMVC的例子中,HiFirstApp就是一个JSP与Action的集合体。它调用了BookService,然后BookService调用了BookDao。
在pojo中的实体类:
//这里我直接使用的是lombok的组件,在pom.xml中可以设置的
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private Integer sid;
private String name;
private Integer age;
private Date birthday;
}
在dao包中:
建立studentDao的接口,利用list集合进行进行输出查询的所有数据
//查询所有学生信息
public abstract ArrayList<Student> findAll();
//进行数据添加
int insert(Student stu);
//进行数据的更新
int update(Student stu);
//根据id查询数据
public abstract Student findById(Integer sid);
//删除数据
public int delete(Integer id);
建立Impl的类,继承studentDao,进行覆盖重写,在这个Impl类中,进行数据库的链接,定义sql语句,进行数据遍历
public class impl implements StudentDao {
public static int insert;
Connection conn = null;
Statement st = null;
ResultSet rs = null;
//这里也是Array接口格式,不用的话,在findall的做后要进行格式的转换
public static ArrayList<Student> list = new ArrayList<>();
//进行数据的查询
@Override
//变为Arraylist就能用,List类会报错
public ArrayList<Student> findAll() {
try {
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//获取链接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1",
"root", "1357");
//获取执行对象
st = conn.createStatement();
//编写sql执行语句
String sql = "select * from student";
//获取结构
//执行查询
rs = st.executeQuery(sql);
//遍历集合,进行结果集的处理
while (rs.next()) {
Integer sid = rs.getInt("sid");
String name = rs.getString("name");
int age = rs.getInt("age");
Date birthday = rs.getDate("birthday");
Student stu = new Student();
stu.setAge(sid);
stu.setName(name);
stu.setAge(age);
stu.setBirthday(birthday);
list.add(stu);
}
} catch (Exception e) {
//抛出异常
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if (st != null) {
try {
st.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
return list;
}
}
在impl包中,建立StudentService接口
public interface StudentService {
//查询所有学生的信息
public List<Student> findAll();
//新增学生的信息
int insert(Student stu);
//修改学生的信息
public static int update(Student stu) {
return 0;
}
//删除学生的信息
//为什么要这样子写,不能写成 int delete (Student stu)呢?
static int delete(Integer id) {
return 0;
}
//条件查询,根据id获取学生信息
public static Student findById(Integer id) {
return null;
}
}
在serviceimpl中建立StudentServicelImpl类
//业务层
public class StudentServiceImpl implements StudentService {
private StudentDao StudentDao = new impl();
//查找所有学生信息
@Override
public ArrayList<Student> findAll() {
return StudentDao.findAll();
}
//插入学生信息
public int insert (Student stu){
int insert = StudentDao.insert(stu);
return insert ;
}
//更新学生信息
public int update (Student stu){
int update =StudentDao.update(stu);
return update ;
}
//删除学生信息
public int delete(Student stu) {
int delete = StudentDao.delete(2);
return delete ;
}
//根据id查询
public Student findById(int sid) {
return StudentDao.findById(sid);
}
}
在web包中建立控制层的对象 StudentController
//业务层实现类
public class StudentServiceImpl implements StudentService {
private StudentDao StudentDao = new impl();
//查找所有学生信息
@Override
public ArrayList<Student> findAll() {
return StudentDao.findAll();
}
//插入学生信息
public int insert (Student stu){
int insert = StudentDao.insert(stu);
return insert ;
}
//更新学生信息
public int update (Student stu){
int update =StudentDao.update(stu);
return update ;
}
//删除学生信息
public int delete(Student stu) {
int delete = StudentDao.delete(2);
return delete ;
}
//根据id查询
public Student findById(int sid) {
return StudentDao.findById(sid);
}
}