Mybatis框架概述和入门案例
- 框架的概述:
- 什么是框架:
- 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。
- 简而言之,框架其实就是某种应用的半成品,就是一组组件,是软件开发系统中的一套解决方案,使用不同的方案来解决不同的问题。
- 框架要解决的问题:
- 框架要解决的最重要的问题就是:技术整合的问题,应用自身的设计和具体的实现技术解耦。软件企业的研发将集中在应用的设计上,而不是具体的技术实现,技术实现是应用的底层支撑,它不应该直接对应用产生影响。
- 三层架构:表现层:是用于展示数据的 业务层:是处理业务需求 持久层:是和数据库交互的(为什么要使用三层架构:主要的原因就是为了实现工程中的高内聚、低耦合,将问题进行划分,从而便于控制和延展。)
- 持久层技术的解决方案:
- JDBC:存在的问题是:1、频繁的数据库连接和释放造成资源浪费,解决方式就是使用数据库连接池技术。2、就是sql语句中存在着硬编码,而实际开发中SQL语句的变动是很常见的,而这样就会造成Java代码的变动,降低程序的维护性。
- 使用Spring的JdbcTemplate(Spring中对jdbc的简单封装)或者是Apache的DBUtils:它和Spring的JdbcTemplate很像,也是对Jdbc的简单封装,这样虽然是增加了程序的开发的效率但是还是会出现上面的问题。
- 使用框架:使用配置文件或者是注解来进行配置,降低程序的耦合性。常用的持久层框架有:MyBatis 和 Hibernate
- 什么是框架:
- Mybatis框架的概述:
- 什么是Mybatis框架:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。(来自百度百科)
- Mybatis框架的优缺点和适用的场合:
- 优点:.
- 与JDBC相比,减少了50%以上的代码量。
- MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。
- 提供XML标签,支持编写动态SQL语句。
- 提供映射标签,支持对象与数据库的ORM字段关系映射。
- 缺点:
- SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
- 使用的场合:
- 对性能的要求较高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。
- 优点:.
- Mybatis框架的入门:
-
从官网中下载Mybatis框架的jar包。
-
搭建Maven开发环境:
-
首先是创建一个Maven工程 导入相关的jar包。
-
编写实体类User 和 持久层接口UserDao
-
进行Mybatis配置:
-
Mybatis中的主配置文件:SqlMapConfig.xml(叫什么名字都行 但是人们一般都是叫这个。)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- mybatis的主配置文件 Mybatis中使用的约束类型是DTD 而不是scame类型的 --> <configuration> <!-- 配置默认的环境 --> <environments default="mysql"> <!-- 配置mysql的环境--> <environment id="mysql"> <!-- 配置事务的类型--> <transactionManager type="JDBC"></transactionManager> <!-- 配置数据源(使用连接池或者是不使用) --> <dataSource type="POOLED"> <!-- 配置连接数据库的4个基本信息 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 --> <mappers> <mapper resource="com/itheima/dao/UserDao.xml"/> </mappers> </configuration>
-
创建配置映射文件:UserDao.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.itheima.dao.UserDao"> <!--配置查询所有 id 是方法的名称 不能够随便写 sql 语句的分号 一般不写--> <!--配置查询所有--> <select id="findAll" resultType="com.itheima.domain.User"> select * from user </select> </mapper>
-
-
配置信息:(现在就是了解一下 以后再详细的说)
-
SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
-
xxxMapper.xml/xxxDao.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
-
通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
-
由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
-
mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
-
Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
-
Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
-
Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
-
-
-
进行搭建环境的测试 (在tes/java 下创建一个测试类MybatisTest)
public class MybatisTest { /** * 入门案例 * @param args */ public static void main(String[] args)throws Exception { //1.读取配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2.创建SqlSessionFactory工厂 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); //3.使用工厂生产SqlSession对象 SqlSession session = factory.openSession(); //4.使用SqlSession创建Dao接口的代理对象 UserDao userDao = session.getMapper(UserDao.class); //5.使用代理对象执行方法 List<User> users = userDao.findAll(); for(User user : users){ System.out.println(user); } //6.释放资源 session.close(); in.close(); } }
-
显示结果
-
不使用UserDao.xml文件进行配置 而是使用注解的形式来进行配置:方式非常的简单
- 在UserDao接口中 findAll 方法上使用@Select 注解
-
- 注意事项
- 用户持久层接口编写的注意事项:
- Mybatis中将持久层的接口名称和映射文件也叫做 Mapper 以前都是叫的是Dao,所以UserDao和UserMapper是一样的
- 在IDEA创建directory 时不能直接创建 com.xxx.xxx 而是一级级的创建 这样创建出来的包是一级的,或者是使用com/xxx/xxx 这样的方式创建出来的是多级的
- 遵循下面的要求在开发中就不用编写dao的实现类(实现类由Mybatis代为完成)
- Mybatis映射配置文件的位置必须和dao接口的包结构相同。
- 映射配置文件的mapper标签的namespace属性必须是dao接口的全类名 (全限定类名)
- 映射配置文件的操作配置:id属性必须是dao接口的方法名
- 映射配置文件注意事项:
- mapper 标签中namespace属性 是必须的:是用于绑定Dao接口的,即面接口编程,想要找到要执行的SQL语句,属性是必须的。注解的属性就是要执行的SQL语句。
- 在主配置文件SqlMapConfig.xml中,指定的是注解的位置
<mapper class="com.itheima.dao.IUSerDao"></mapper>
进行测试,同样是能执行
- 用户持久层接口编写的注意事项: