1.简介
1.1 三层架构
1.2 ORM
1.3 持久层技术解决方案
2.使用IDEA搭建Mybatis入门案例
2.1 新建maven工程并导入依赖
2.2 创建uer表,user实体类,dao层接口IUserDao
2.3 resources目录下创建mybatis配置文件SqlMapConfig.xml
2.4 每个dao创建独立的sql映射文件IUserDao.xml
2.5 单元测试
3.入门案例分析
3.1设计模式分析
3.2 执行查询所有分析
4.自定义Mybatis框架
1.简介:
1.1 三层架构:
表现层(UI),业务逻辑层(BLL),数据访问层(DAL)
1.2 ORM:
对象关系映射,实体类和数据库表一一对应,不需要操作数据库表,操作表对应的实体类对象即可
1.3 持久层技术解决方案:
JDBC:一种规范和接口,面向sql (规范)(Connection PreparedStatement ResultSet)
Spring的JdbcTemplate:Spring中对jdbc简单封装 (工具类)
Apache中的DButils:对jdbc简单封装(工具类)
JPA:一种ORM规范,使应用程序以统一的方式访问持久层(规范)
Hibernate:全自动全映射orm框架,复杂的sql需要额外使用HQL,不灵活(框架)
MyBatis:半自动orm框架,同Hibernate相比可在配置文件中配置sql(框架)
2.使用IDEA搭建Mybatis入门案例
2.1 新建maven工程并导入依赖
当然也可以导入日志插件log4j和单元测试插件junit
2.2 创建uer表,user实体类,dao层接口IUserDao
实体类user中的属性要与user表中的字段一一对应,然后生成getter,setter,toString(IDEA中右键选择generate)
2.3 resources目录下创建mybatis配置文件SqlMapConfig.xml
配置文件的名称非固定
2.4 每个dao创建独立的sql映射文件:IUserDao.xml
2.5 单元测试
3.入门案例分析
3.1 设计模式分析
3.2 执行查询所有分析
首先,MyBatis会使用dom4j读取配置文件,解析xml,然后进行如下操作:
1.根据配置文件信息,创建Connection对象
2.获取预处理对象PreparedSatement
conn.prepareSatement(sql); ->从IUserDao.xml中拿到sql
3.执行查询 ResultSet resultSet = preparedStatement.executeQuery();
4.遍历结果集,用于封装
List<E> list = new ArrayList();
while(resultSet .next()){
// 进行封装,将每个rs的内容都添加到element中
E element = (E) class.forName("配置的全限定类名").newInstance();
// 因为表中列名与实体属性是一致的,我们可以把表的列名看成实体类的属性名
// 可以通过反射的方式根据名称获取每个属性,并把值赋进去
list.add(element); //之后把element追加到list中
}
5 return list
4. 自定义Mybatis框架:
1.使用类加载器读取配置文件的类(dom4j)
2.使用SqlSessionFactoryBuilder(构建者模式)创建一个实现SqlSessionFactory工厂的DefaultSqlSessionFactory类
这里SqlSessionFactory读取SqlMapConfig.xml中连接数据库和mapper映射信息。用来生产出真正操作数据库的SqlSession对象。
3.DefaultSqlSession实现SqlSession接口。SqlSession对象有两大作用:
1生成接口代理对象
2定义通用增删改查方法
4.SqlSession
作用1:生成接口代理对象。在SqlSessionImpl对象的getMapper方法中首先使用SqlSessionFactory读取的数据库连接信息创建Connection对象。接下来通过jdk代理模式创建出代理对象作为getMapper方法的返回值。这里主要工作是在创建代理对象时,第3个参数处理类里面得到的sql语句,并执行curd操作
作用2:定义通用增删改查方法。在SqlSessionImpl对象中提供的selectList()方法(mybatis中还有selectOne与insert等方法)这些方法也分为两步:使用SqlSessionFactory读取的数据库连接信息创建jdbc的Connection对象。第二直接得到sql语句,使用jdbc的Connection对象进行对应的curd操作
此处是一个InvocationHandler的接口,我们需要写一个该接口的实现类,在实现类中调用selectList()
5.我们要对返回的数据库结果集进行封装,变成java对象返回给调用者。所以我们还必须要知道调用者所需要的返回类型