一、三层架构
1、三层架构对应的职责:
- 界面层(视图层):主要功能是接收用户请求数据,显示处理的结果
- 业务逻辑层:接收页面传过来的数据,计算业务逻辑,调用数据访问层获取数据。
- 数据访问层:与数据库打交道,主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。
2、三层对应的包:
- 界面层:controller包(servlet)
- 业务逻辑层:service包(XXXService类)
- 数据访问层:dao包(XXXDao类)
3、三层之间的处理请求与交互关系:
用户<——>界面层<——>业务逻辑层<——>数据访问层(持久层)<——>数据库
4、三层对应的处理框架:
- 界面层:servlet----springmvc框架
- 业务逻辑层:serivce类----spring框架
- 数据访问层:dao类----mybatis框架
二、何为Mybatis框架
1、Mybatis框架
- 它是一种持久层框架,其内部封装了jdbc,程序员只需关注sql语句本身,而不需要处理加载驱动、创建连接、创建statement、关闭连接等过程。
- Mybatis主要通过xml或者注解两种方式将要执行的sql语句配置起来,并通过实例对象和sql语句的动态参数进行映射生成最终的执行的sql语句,最终由Mybatis框架执行SQL语句并将结果映射为Java对象并返回。
2、jdbc编程
public void findStudent(){
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
//注册MySQL驱动
Class.forName("com.mysql.jdbc.Driver");
//连接数据的基本信息
String url = "jdbc:mysql://localhost:3306/test";
String username="root";
String password = "123456";
//创建连接对象
conn = DriverManager.getConnection(url, username, password);
//保存查询结果
List<Student> stuList = new ArrayList<>();
//创建Statement,用来执行SQL语句
st = conn.createStatement();
//执行查询,创建记录集
rs = st.executeQuery("select * from text ");
while (rs.next()){
Student stu = new Student();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
//从数据库取出的数据转为Student对象,封装到List集合中
stuList.add(stu);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
//关闭资源
if (rs != null) ;{
rs.close();
}
if (st != null) {
st.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3、使用jdbc编程的缺陷
- 代码比较多,重复代码也比较多,开发效率低
- 需要关注Connection,Statement,ResultSet对象的创建和销毁
- 对ResultSet查询的结果转为对象,需要自己封装为List集合
- 业务代码和操作数据库代码混合在一起
4、Mybatis主要解决的问题
- 注册数据库驱动,例如:
Class.forName("com.mysql.jdbc.Driver");
- 提供了创建Connection ,Statement, ResultSet的能力 ,不用开发人员创建这些对象了
- 从xml文件中获取sql并执行sql,把ResultSet结果转换为Java对象、List集合的能力
List<Student> list = new ArrayLsit<>();
ResultSet rs = state.executeQuery(“select * from student”);
while(rs.next){
Student student = new Student();
student.setName(rs.getString(“name”));
student.setAge(rs.getInt(“age”));
list.add(student);
}
- 提供了关闭资源的能力,不用你关闭Connection, Statement, ResultSet
- 开发人员:提供sql语句—>Mybatis处理sql—>开发人员得到List集合或者Java对象(表中的数据)
5、Mybatis的两大功能
- (1) Sql mapper:sql映射:
可以把数据库表中的一行数据映射为一个Java对象。操作这个对象就相当操作表中的数据
- (2) Data Access Objects(DAOs):数据访问
对数据库执行增删改查操作