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 }