MyBatis框架學習一

1,什麼是Mybatis?

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和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中不容許&符號直接出現,咱們須要使用 &amp; 代替-->
16                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;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,項目結構

相關文章
相關標籤/搜索