ORM模型 ORM(object relation Mapping):对象关系映射。这里的object是指Java实体类中的对象,relation是指数据库中的表,Mapping就是Java实体类中对象与数据库中表之间的对应关系,就像下图中所展示的那样:
接下来是传统JDBC程序的设计缺陷:1、大量配置信息硬编码;2、大量的无关业务处理的编码;3、扩展优化极为不便。
MyBatis概述 MyBatis是支持定制化SQL、存储过程以及高级映射的持久层框架。所谓的持久层其实就是能将数据保存到数据库中。
它的特点有:1、避免传统的JDBC硬编码,数据库配置信息都是通过xml文件进行配置,灵活度很高;2、使用XML配置或者注解,很大程度让我们自己书写sql语句,使得数据库优化成为可能;3、POJO对象和数据库记录直接映射, 你只需要创建数据库,而POJO对象则由MyBatis替你完成;4、完善的文档支持,MyBatis有着非常完善的文档,能帮你快速学习。
同时还有一些优点:1、简单易学,快速上手,学习成本较低;2、提供了数据库交互信息配置化;3、提供了动态SQL处理。
一般在以下场景中使用MyBatis:1、更加关注SQL优化的项目,对并发要求较为严苛;2、需求频繁更新改动的项目。
MyBatis开发环境搭建 MyBatis的官方网站点这里 ,如下图:
其实也可以去github上下载离线包,点击这里 ,目前最新版是3.5.3:
一般学习的时候下载第一个就行,第二个是源码包,第三个是另一种格式的源码包。解压这个zip文件,得到这些内容:
lib包是MyBatis在使用过程中可能会使用到的包,mybatis-3.5.3.jar
是已经封装好的jar包,如果你想使用MyBatis就可以引入这个包,mybatis-3.5.3.pdf
是官方文档
还有一种方式就是在Maven上配置MyBatis的依赖,一般在实际开发中这种方式用的比较多,点这里 :
1 2 3 4 5 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version> </dependency>
如果你是在传统项目中引入MyBatis,则需要点击这里 下载对应的包,要么作为classpath的依赖路径引入,要么作为依赖项目引入。
如果是Maven项目,按照前面介绍的配置,直接设置相关的依赖就好了:第一步,先去Maven仓库 查询maven的依赖配置;第二步,在Maven项目的pom.xml文件中添加依赖;第三步,查看项目依赖及本地仓库是否已经存在了MyBatis。
小项目实战 接下来通过一个数据查询流程来体会一下MyBatis的核心API操作流程。使用IDEA来创建一个Maven项目,注意其中的GroupId是项目名称,ArtifactId是项目中某一模块的名称,Version是版本号。
点击这里 ,获取MyBatis的配置依赖:
1 2 3 4 5 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.2</version> </dependency>
放到pom.xml文件的<dependencies>
标签中,顺便把mysql-connector-java
和junit
的依赖也添加进去:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>mb-project</groupId> <artifactId>DemoOne</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> </dependency> </dependencies> </project>
接下来在main/resource文件下面新建一个mybatis.xml
,然后去之前那个mybatis-3.5.3.pdf
文件里面找到getting started部分找到<configuration>
的配置信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <?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"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <!-- 使用数据库连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/mbdemo"/> <property name="username" value="root"/> <property name="password" value="envy123"/> </dataSource> </environment> </environments> <!-- 映射文件的配置路径 --> <mappers> <mapper resource="mapper/usersMapper.xml"/> </mappers> </configuration>
然后开始创建一个数据库mbdemo
:
1 2 3 4 5 6 7 8 9 10 11 12 13 use mbdemo; create table users( id int auto_increment primary key comment '用户编号', username varchar(50) comment '登录账号', password varchar(50) comment '登录密码', nickname varchar(20) comment '用户昵称' )engine=innodb default charset=utf8; insert into users values(1,'admin','admin','管理员'); insert into users values(2,'envy','envy','思录'); insert into users values(3,'administor','administor','超级管理员'); select * from users;
接着在java文件夹中新建一个文件夹com.test.entity
,接着在entity文件夹中新建一个实体类Users:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 package com.test.entity; public class Users { private Integer id; private String username; private String password; private String nickname; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } @Override public String toString() { return "Users{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", nickname='" + nickname + '\'' + '}'; } }
接着在resource文件夹中新建一个Mapper文件夹,里面再新建一个usersMapper.xml
文件(注意名称必须是实体类名小写+Mapper.xml不可以修改)。 还是去之前那个mybatis-3.5.3.pdf文件里面找到getting started部分找到的配置信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?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"> <!-- namespace命名空间 通常情况下命名空间的值就是当前操作实体类的全名称 --> <mapper namespace="com.test.entity.Users"> <select id="usersList" resultType="com.test.entity.Users"> select * from users; </select> </mapper>
接着在test/java文件夹下面新建一个testDemo1.java的测试文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 import com.test.entity.Users; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; public class testDemo1 { /** * 使用junit进行测试 */ @Test public void testOne() throws IOException { //初始化mybatis配置环境 String resource = "mybatis.xml"; InputStream is = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); //打开数据库之间的连接 SqlSession session = sqlSessionFactory.openSession(); List<Users> usersList = session.selectList("usersList"); for(Users user:usersList){ System.out.println(user); } session.close(); } }
运行该测试文件,输出结果:
1 2 3 Users{id=1, username='admin', password='admin', nickname='管理员'} Users{id=2, username='envy', password='envy', nickname='思录'} Users{id=3, username='administor', password='administor', nickname='超级管理员'}
Mybatis核心API操作流程 Mybatis核心的API操作流程如下图所示: