1,什么是Mybatis?
MyBatis是一款优秀的持久层框架
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或者注解来配置和映射原生类型,接口和Java的POJO(Plain Old Java Objects,普通老式Java对象)为数据库中的记录。
什么是持久层
持久化就是数据在瞬时撞=状态和持久状态之间转化的一个过程
内存:断电即失。我们无法用技术层面来保存内存不断电,将内存中的数据持久化的存储;磁盘,硬盘等
持久层对应我们代码架构的那一层:--Dao层
dao层,专注于处理数据库的操作,但是我们写一大堆JDBC的重复代码。
我们应该专注sql语句的编写,获取sql的返回值即可
持久层为啥不能叫持久化模块
我们的系统中,应该有一个单独的层面来处理这个数据库连接问题。
解耦,这个层面就应该有较为清晰的逻辑边界;
面试题:hibernate和mybatis的区别
hibernate是全自动的ORM框架,不用编写sql语句,黑箱操作
mybatis半自动的ORM框架,我们可以自定义sql语句,更加灵活,白箱操作
MyBatis的优点
- 不用再去编写一些JDBC代码
- 简单易学,不依赖第三方的程序或者框架。官方文档强大,开源,我们可以随时分析源码;
- 实现解耦,低耦合,高内聚
- ORM;脆响关系映射
- 提供XML标签
2.第一个Mybatis程序
1搭建实验环境
在数据库中添加一个数据库
1 CREATE DATABASE /*!32312 IF NOT EXISTS*/`mybatis` /*!40100 DEFAULT CHARACTER SET utf8 */; 2 3 USE `mybatis`; 4 5 DROP TABLE IF EXISTS `user`; 6 7 CREATE TABLE `user` ( 8 `id` INT(20) NOT NULL, 9 `name` VARCHAR(30) DEFAULT NULL, 10 `pwd` VARCHAR(30) DEFAULT NULL, 11 PRIMARY KEY (`id`) 12 ) ENGINE=INNODB DEFAULT CHARSET=utf8; 13 14 INSERT INTO `user`(`id`,`name`,`pwd`) VALUES (1,'狂神','123456'),(2,'张三','abcdef'),(3,'李四','987654');
2,创建项目
创建一个普通的maven项目
修改pom.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.like</groupId> 8 <artifactId>20190723mybatisstudy</artifactId> 9 <packaging>pom</packaging> 10 <version>1.0-SNAPSHOT</version> 11 <dependencies> 12 <!--单元测试--> 13 <dependency> 14 <groupId>junit</groupId> 15 <artifactId>junit</artifactId> 16 <version>4.11</version> 17 </dependency> 18 19 <!--mybatis的包--> 20 <dependency> 21 <groupId>org.mybatis</groupId> 22 <artifactId>mybatis</artifactId> 23 <version>3.5.1</version> 24 </dependency> 25 <!--连接数据库的驱动包--> 26 <dependency> 27 <groupId>mysql</groupId> 28 <artifactId>mysql-connector-java</artifactId> 29 <version>5.1.47</version> 30 </dependency> 31 </dependencies> 32 <build> 33 <!--希望maven在导出项目的时候,能够将我们的配置及资源导出--> 34 <resources> 35 <resource> 36 <directory>src/main/java</directory> 37 <includes> 38 <include>**/*.properties</include> 39 <include>**/*.xml</include> 40 </includes> 41 <filtering>false</filtering> 42 </resource> 43 <resource> 44 <directory>src/main/resources</directory> 45 <includes> 46 <include>**/*.properties</include> 47 <include>**/*.xml</include> 48 </includes> 49 <filtering>false</filtering> 50 </resource> 51 </resources> 52 </build>
3.删除src目录,创建一个maven项目
3.1创建一个poji实体类
1 package pojo; 2 3 public class User { 4 private int id; 5 private String name; 6 private String pwd; 7 8 public User() { 9 } 10 11 public User(int id, String name, String pwd) { 12 this.id = id; 13 this.name = name; 14 this.pwd = pwd; 15 } 16 17 public int getId() { 18 return id; 19 } 20 21 public void setId(int id) { 22 this.id = id; 23 } 24 25 public String getName() { 26 return name; 27 } 28 29 public void setName(String name) { 30 this.name = name; 31 } 32 33 public String getPwd() { 34 return pwd; 35 } 36 37 public void setPwd(String pwd) { 38 this.pwd = pwd; 39 } 40 41 @Override 42 public String toString() { 43 return "User{" + 44 "id=" + id + 45 ", name='" + name + '\'' + 46 ", pwd='" + pwd + '\'' + 47 '}'; 48 } 49 }
3.2编写mybatis配置文件
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!--配置环境,这里可以有多套环境 default代表默认的是那一套--> 7 <environments default="development"> 8 <!--配置一套环境 id .环境的名字--> 9 <environment id="development"> 10 <!--transactionManager:事务管理,type:jdbc--> 11 <transactionManager type="JDBC"/> 12 <!--dataSource 数据源--> 13 <dataSource type="POOLED"> 14 <property name="driver" value="com.mysql.jdbc.Driver"/> 15 <!--xml中不允许&符号直接出现,我们需要使用 & 代替--> 16 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&charsetEncoding=UTF-8"/> 17 <property name="username" value="root"/> 18 <property name="password" value="123456"/> 19 20 </dataSource> 21 </environment> 22 </environments> 23 </configuration>
3.3,创建工具类
目的,获的SqlSessionFactory
1 package utils; 2 import org.apache.ibatis.io.Resources; 3 import org.apache.ibatis.session.SqlSessionFactory; 4 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 5 import java.io.IOException; 6 import java.io.InputStream; 7 8 //mybatis的工具类,重复的代码的提纯 9 public class MyBatisUtils { 10 //类变量不需要设置默认值; 11 private static SqlSessionFactory sqlSessionFactory; 12 static { 13 14 //在maven中,所有的资源文件一般都放在resources目录下,我们可以直接拿到。 15 try { 16 String resource = "mybatis-config.xml"; 17 InputStream inputStream = Resources.getResourceAsStream(resource); 18 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 19 } catch (IOException e) { 20 e.printStackTrace(); 21 } 22 } 23 //设置SqlSessionFactory公共的方法 24 public static SqlSessionFactory getSqlSessionFactory(){ 25 return sqlSessionFactory; 26 } 27 }
3.4,映射文件的接口,对应原来的dao接口 增删改查数据库只需修改3.4,3.5
1 package dao; 2 import pojo.User; 3 import java.util.List; 4 5 public interface UserMapper { 6 //获取全部的用户 7 List<User> selectUser(); 8 //增加用户 9 int addUser (User user); 10 //删除用户 11 int delUser (int id); 12 //修改 13 int UpdetUser (User user); 14 }
3.5,编写对应的mapper映射文件
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <!--mapper标签的namespace对应Mapper接口的类--> 6 <mapper namespace="dao.UserMapper"> 7 <!--select标签的id对应映射接口的方法名字 resultType:返回结果的类型 中间就编写sql语句--> 8 <select id="selectUser" resultType="pojo.User"> 9 select * from user 10 </select> 11 <insert id="addUser" parameterType="pojo.User"> 12 insert into user(id,name,pwd)value (#{id},#{name},#{pwd}); 13 </insert> 14 <insert id="delUser"> 15 delete from user where id #{id} 16 </insert> 17 <update id="UpdateUser" parameterType="pojo.User"> 18 update user set name =#{name},pwd=#{pwd} where id=#{id} 19 </update> 20 21 </mapper>
3.6,在mybatis配置文件中绑定编写映射文件
在3.2后加上映射文件
</environments>
<!--关联映射文件-->
<mappers>
<mapper resource="dao/userMapper.xml"/>
</mappers>
</configuration>
4测试一下
在maven的test文件夹下编写对应的测试类
1 import dao.UserMapper; 2 import org.apache.ibatis.session.SqlSession; 3 import org.apache.ibatis.session.SqlSessionFactory; 4 import org.junit.Test; 5 import pojo.User; 6 import utils.MyBatisUtils; 7 import java.util.List; 8 public class UserMapperTest { 9 @Test 10 public void selectUser(){ 11 //1.拿到sqlSessionFactory对象 12 SqlSessionFactory sqlSessionFactory = MyBatisUtils.getSqlSessionFactory(); 13 //2.通过sqlSessionFactory对象openSession()创建一个sqlSession。 14 SqlSession sqlSession = sqlSessionFactory.openSession(); 15 //3.通过sqlSession获得mapper对象 , 参数为映射文件对应的接口类的class对象 16 UserMapper mapper = sqlSession.getMapper(UserMapper.class); 17 //4.通过mapper对象来执行操作; 18 List<User> users = mapper.selectUser(); 19 20 //获得结果集 21 for (User user : users) { 22 System.out.println(user); 23 } 24 } 25 }
5,结果展示
6,项目结构