什么是框架
- 框架(Framework):整个或部分系统的可重用设计,表现为一组抽象构建实例间交互的方法;是应用开发者定制的应用骨架(软件开发的一套解决方案)。
- 优点:框架封装了很多的细节,让开发者可以使用极简的方式实现功能,从而提高开发效率。
三层架构
持久层技术解决方案
1)JDBC技术:Connection,PreparedStatement,ResultSet
2)Spring的JdbcTemplate:Spring中对jdbc的简单封装
3)Apache的DBCUtils:它和Spring的JdbcTemplate很像,也是对Jdbc的简单封装。
注意:
- Spring的JdbcTemplate和Apache的DBUtils都只是工具类而不是框架。
- JDBC是规范不是框架。
什么是Mybatis
概念:
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
概述:
- 封装了jdbc操作的许多细节,令开发者只需要关注sql语句本身,无需关注注册驱动和创建连接等繁杂过程。
- 使用了ORM思想实现了结果集的封装。
ORM是谁呢?
- ORM的全名为:
Object Relational Mappging
,我们喊它作:对象关系映射
ORM的主要工作:
把数据库表和实体类及实体类的属性对应起来,使我们可以只需要操作实体类就实现操作数据库表。
注:实体类中的属性和数据库表的字段名称保持一致。
Mybatis的环境搭建流程
Mybatis入门级流程
age com.example.test;
import com.example.dao.UserDao;
import com.example.domain.User;
import com.example.mybatis.io.Resources;
import com.example.mybatis.sqlsession.SqlSession;
import com.example.mybatis.sqlsession.SqlSessionFactory;
import com.example.mybatis.sqlsession.SqlSessionFactoryBuilder;
import java.io.InputStream;
import java.util.List;
public class MybatisTest {
/**
* 入门案例
* @param args
*/
public static void main(String[] args)throws Exception {
//1. 读取配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
/*
* 绝对路径:d:/xxx/xxx.xml <--使用类加载器,只能读取类路径的配置文件
* 相对路径:src/java/main/xxx.xml <--使用ServletContext对象的getRealPath()
*/
//2. 创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(is);
/*
* builder是创建者;创建工厂时这里使用了创建者模式
* 创建者模式:将对象的创建细节隐藏,使使用者直接调用方法就可以拿到对象
*/
//3. 使用工厂生产SqlSession对象
SqlSession session = factory.openSession();、
/*
* 生产SqlSession使用了工厂模式
* 其可以降低类之间的依赖关系(解耦)
*/
//4. 使用SqlSession创建Dao接口的代理对象
UserDao userDao = session.getMapper(UserDao.class);
/*
* 创建Dao 接口实现类使用了代理模式
* 其可以在不修改源码的前提下对已有的方法进行增强
*/
//5. 使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
//6. 释放资源
session.close();
is.close();
}
}
注意事项:
- 在映射配置中表明mybatis要封装到哪个实体类。
- 配置方式:指定实体类的全限定类名
- 把UserDao.xml移除,在dao接口的方法上使用@Select注解,并指定sql语句时,需要在 SqlMapperConfig.xml的mapper配置时使用class属性指定dao接口的全限定类名。
提示:虽然Mybatis支持写dao实现类,但在 日常开发时都是采用不写dao实现类的方式(不管使用xml还是注解装置)
自定义Mybatis解析:
- Mybatis在使用代理dao的方式实现增删查改的主要作用:
- 在代理对象中调用selectList
- 创建代理对象
“图解”: