一:框架概括与三层架构
1.什么是框架?
首先说说框架,简单来说框架就是将我们繁琐的代码实现进行封装,从而极简的实现功能,大大提高开发效率。不同框架解决不同的问题。
2.三层MVC架构
在javaweb中我们说到了三层架构,其中有表现层(展示数据),业务层(处理业务,进行事务处理),持久层(与数据库进行交互)
三层架构所用框架
3.持久层(dao)技术解决方案
(1)JDBC技术:
Connection
PreparedStatement
ResultSet
(2)其他的比如Spring的JdbcTemplate:
Spring中对jdbc的简单封装
(3)Apache的DBUtils:
它和Spring的JdbcTemplate很像,也是对Jdbc的简单封装
以上这些都不是框架JDBC是规范Spring的JdbcTemplate和Apache的DBUtils都只是工具类
持久层(dao层)总图
二:Mybatis概述
Mybatis是一个持久层的框架,用java编写。它封装了jdbc操作的很多细节,是开发者只需关注sql语句本身,而无需关注那些注册驱动,创建连接等繁杂的过程,他使用的是一种ORM思想实现结果集的封装。
ORM(Objece Relational Mapping)思想:顾名思义 对象关系的映射。
简答来说就是把 数据库和实体类属性 所对应起来让我们可以操作实体类就实现操作数据库。
数据库中是user id password 则实体类中就必须是user id password,我们只需要做到实体类中的属性和数据库表的字段名称保持一致。
三:Mybatis环境搭建
1.准备:
创建Maven工程导入jar坐标和Mybatis的坐标
在main中创建实体类和dao的接口(例如User和com.itheima.dao.IUserDao)
实体类和dao的接口
在resource资源目录下创建Mybatis整体的主配置文件SqlMapConifg.xml以及映射的配置文件
创建映射配置文件IUserDao.xml
环境搭建的注意事项:
1.创建IUserDao.xml和IUserDao.java时名称是为了和我们之前学习javaweb的知识相同一致。
在Mybatis中它把持久层的操作接口名称和映射文件也叫作Mapper(即mapper=dao)所以:IUserDao 和 IUserMapper是一样的
2.在IDEA创建目录的时候,它和包不一样,包在创建时:com.itheima.dao它是三级结构
目录在创建时:com.itheima.dao是一级目录
3.Mybatis的映射配置文件位置必须和 dao接口的包结构相同,也要是com.itheima.dao.
4.映射配置文件(IUserDao.xml)mapper标签和namespace属性的取值必须是dao接口的全限定类名
5.映射配置文件(IUserDao.xml)对数据库的操作配置(select),id 属性必须是dao接口的方法名(findAll)
因此,我们遵从了以上点时,我们就无需再在开发中书写dao的实现类了(只需要写接口)。
2.代码案例分析
一切环境配置准备就绪后,我们开始编写测试工具类,来实现功能。
编写测试类:com.itheima.test.MybatisTest
(1)读取主的配置文件(主配置里面包含映射配置)
InputStream in = Resources.getResourceAsStream(“SqlMapConfig.xml”);
(2)创建SqlSessionFactory工厂(构建者设计模式):项目给设计者builder,builder替我们项目生成一个工厂。
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
(3)创建SqlSession对象(工厂模式):使用工厂来创建SqlSession对象。
SqlSession session = factory.openSession(); //工厂factory来生产session对象
(4)创建Dao接口的代理对象(代理模式):使用session来创建代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
(5)使用代理对象来执行dao的方法
List
(6)释放资源:session.close(); in.close();
注意:不要忘记在映射配置中告知mybatis要封装到哪个实体类中配置的方式:指定实体类的全限定类名 com.itheima.domain.User
四:Mybatis基于注解的编程
(1)可以把IUserDao.xml映射配置移除
(2)在dao接口的方法上使用@select注解,并且知道SQL语句,
(3)同时需要在主配置文件SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。(com.itheima.dao.IUserDao)
并且我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式。不管使用XML还是注解配置。但是Mybatis它是支持写dao实现类的。