MyBatis是一款优秀的持久层框架java
MyBatis避免了几乎全部的JDBC代码和手动设置参数以及获取结果集。MyBatis可使用简单的XML或者注解来配置和映射原生类型,接口和Java的POJO(Plain Old Java Objects,普通老式Java对象)为数据库中的记录。mysql
持久化就是数据在瞬时撞=状态和持久状态之间转化的一个过程面试
内存:断电即失。咱们没法用技术层面来保存内存不断电,将内存中的数据持久化的存储;磁盘,硬盘等sql
持久层对应咱们代码架构的那一层:--Dao层数据库
dao层,专一于处理数据库的操做,可是咱们写一大堆JDBC的重复代码。apache
咱们应该专一sql语句的编写,获取sql的返回值便可session
持久层为啥不能叫持久化模块mybatis
咱们的系统中,应该有一个单独的层面来处理这个数据库链接问题。架构
解耦,这个层面就应该有较为清晰的逻辑边界;app
hibernate是全自动的ORM框架,不用编写sql语句,黑箱操做
mybatis半自动的ORM框架,咱们能够自定义sql语句,更加灵活,白箱操做
在数据库中添加一个数据库
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');
建立一个普通的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.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,
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,
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,
</environments> <!--关联映射文件--> <mappers> <mapper resource="dao/userMapper.xml"/> </mappers> </configuration>
在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 }