MVC三层架构
什么是三层?
- 第一层:View(表示层)
收集用户输入的数据,并且展示数据,跟用户进行交互
- 第二层: Servicelmpl(业务逻辑层)
用户输入数据并且选择要实现的功能,是通过业务逻辑层实现的
- 第三层: Daolmpl(数据访问层)
与数据库进行交互,用户传过来的数据进行数据库查询并且返回给用户。
案例 Person
前言
- utils存放工具类(DBUtils)
- entity存放实体类(Person)
- Dao层存放Dao接口(PersonDao)
- impl存放Dao接口的实现类(Personimpl)
- service层存放service接口(PersonService)
- impl存放service接口实现类(PersonServiceimpl)
- view存放程序的启动项,main函数
PersonDaoimpl.java
我们可以看到,拿insert和update来说,这两个功能实现查的不是很多,区别在于sql语句,多了一个占位符仅此而已,其他的步骤一样。 对于增删改来说,有很多相同的内容,出现了重复代码,所以我们可以封装一个工具类,在Dao层中对数据库表的增删改查操作存在重复的部分进行抽取封装DaoUtils工具类实现重复使用。
DaoUtils.java
//DaoUtils.java
//增删改通用封装方法
package com.zjh.utils;
/*
* 封装增删改重复的部分成工具类,实现重复使用。
*
*
* */
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DaoUtils {
public int commonUpdate(String sql,Object... args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
connection = DbUtils.getconnection();
try {
preparedStatement = connection.prepareStatement(sql);
// preparedStatement.setObject(index,value);
if (int i =0;i<args.length;i++){
preparedStatement.setObject(i+1,args[i]);
}
int result = preparedStatement.executeUpdate();
return result;
} catch (SQLException e) {
e.printStackTrace();
}finally {
DbUtils.closeAll(null,preparedStatement,null);
}
return 0;
}
}
//查询通用封装方法
//DaoUtils.java
public List<Object> commonSelect(String sql, RowMapper rowMapper,Object... args){
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
List<Object> list = new ArrayList<>();
connection = DbUtils.getconnection();
try {
preparedStatement = connection.prepareStatement(sql);
for(int i = 1;i<args.length;i++){
preparedStatement.setObject(i+1,args[i]);
}
resultSet = preparedStatement.executeQuery();
while(resultSet.next()){
//如何根据查询结果完成ORM,如何进行对象的创建与赋值
Object object = rowMapper.getRow(resultSet);//回调 --> 调用者提供的一个封装方法ORM 需要创建一个接口
list.add(object);
return list;
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
//调用grtRow()方法定义了一个接口
//RowMapper.java
package com.zjh.advanced;
import java.sql.ResultSet;
public interface RowMapper {
public Object getRow(ResultSet resultSet);
}