本文讲了什么
Mybatis是什么?为什么会出现?我们怎么搭建其环境?我们如何简单的理解Mybatis的作用。
什么是框架?
它是我们软件开发中的一套解决方案,不同框架解决不同的问题。
它是一个半成品,是一组组件,别人搭的舞台,你来表演
使用框架的好处:
- 框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高开发效率
三层架构
表现层:用于展示数据
业务层:是处理业务需求
持久层:是和数据库交互的
持久层技术解决方案
JDBC技术:Connection PreparedStatement ResultSet
Spring的JdbcTemplate: Spring中对jdbc的简单封装
Apache的DBUtils:它和Spring的JdbcTemplate很像,也是对Jdbc的简单封装
以上这些都不是框架,JDBC是规范,剩下两个都只是工具类
传统JDBC很麻烦,要设置连接,执行sql,查询结果集,释放资源,很麻烦,很重复。实际上,我们最关注的只有sql
将繁琐的部分封装起来,然后让我们将更多的精力给放到业务上来
Mybatis框架概述
- mabatis是一个优秀的基于java的持久层框架,它内部封装了jdbc的很多细节,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程
- Mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成为java对象并返回
- 采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbc api底层访问细节,使得我们不用于jdbc api打交道,就可以完成对数据库的持久化操作
- ORM(object relational mapping对象关系映射):将数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就可以实现操作数据库
Mybatis入门练习
创建数据库以及表
- 并加入数据
创建maven工程,准备数据库,导入依赖坐标
就是一个普通的maven工程,并没有什么不同
打包方式用jar包
引入mybatis的依赖,通过官网来找依赖的坐标
光有mybatis可不行,还要有数据库的
然后日志log4j
然后单元测试junit
使用mybatis只要上面两个就够了
效果如图,jar包已经有了<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
搭建环境
要准备的domain和dao
dao(data access object)数据访问层
domain与数据库表一一对应的javabean(三层架构之外多出来的一层)
domain里放的是实体类(与数据库表一一对应),而dao中放的是数据库交互的方法
配置mybatis的环境
resources下创建SqlMapConfig.xml,其中要加约束和声明。
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--以上是约束,下面开始配置--> <!--mybatis的主配置文件--> <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> <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> </dataSource> </environment> </environments> <!-- 指定映射配置文件的位置,映射配置文件值的是每个dao独立的配置文件--> <mappers> <mapper resource="com/itheima/dao/IUserDao.xml"/> </mappers> </configuration>
配置dao接口(配置文件)
该配置文件存放在resources下,目录结构与dao接口文件一一对应(不然找不到)。然后其作用就是配置对应接口中的方法所使用的sql语句,从而让mybatis来帮助我们构建实现类。
<?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.IUserDao"> <!--配置查询所有--> <select id="findAll"> select * from user </select> </mapper>
环境搭建小结
第一步:创建maven工程并导入坐标
第二部:创建实体类和dao的接口
第三步:创建Mybatis的主配置文件 SqlMapConfig.xml
第四步:创建映射配置文件IUserDao.xml
环境搭建的注意事项:
创建IUserDao.xml和IUserDao.java时名称是为了和我们之前的知识保持一致。而在Mybatis中它把持久层的操作接口名称和映射文件也叫做mapper。所以IUserDao和IUserMapper是一样的(ylrc)
在idea中创建目录时,它和包是不一样的。包在创建时,如com.itheima.dao是三级结构,而directory是一级结构,所以如果要三层的话,需要逐个创建
mybatis的映射配置文件位置必须和dao接口的包结构相同。一个在main-java目录下,一个在resources目录下,二者要对应起来
映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名
当我们遵从了3,4,5点之后,我们在开发中就无需再写dao的实现类,我们在开发中就无需再写dao的实现类。mybatis帮我们去实现。(这是挺方便的,我们只需要定义接口,定义sql语句,然后就不用管了,之前我们还要自己写实现类,其实很麻烦的)