沒有修復不了漏洞,只有修不成的工具人!

來,幫我想個ID發表於2020-10-09

2020年9月10日19:29:16

一、什麼是Mybatis

1.1、什麼是mybatis

  • Mybatis是一款優秀的持久層框架
  • 他支援定製化SQL、儲存過程以及高階對映。
  • MyBatis避免了幾乎所有的JDBC程式碼和手動設定引數以及獲取結果集。
  • Mybatis可以使用簡單的XML或註解來配置和對映原生型別、介面和java的POJO(Plain Old java Objects,普通老式java物件)為資料庫中的記錄。
  • Mybatis本是apache的一個開源專案iBtis,2010年這個專案由Apache software foundation前移到了google code,並且改名為MaBatis。
  • 2013年11月遷移到GItHub。

1.2、持久化

資料持久化:就是將程式的資料在持久狀態瞬時轉化的過程。

  • 持久狀態;比如資料庫(JDBC),IO檔案持久化。

  • 瞬時狀態:比如記憶體,斷電即失。

  • 生活中冷藏也是一種持久化。

為什麼需要持久化?

  • 避免斷電丟失
  • 記憶體太貴

1.3、持久層

Dao層、Service層、Controller層

  • 王朝的那個持久化工作的程式碼塊
  • 層界線明顯

1.4、為什麼需要MyBatis?

  • 幫助程式設計師將資料庫存入到資料庫中。

  • 增加開發效率

  • 傳統JDBC程式碼太複雜了,簡化程式碼,(框架)自動化管理。

  • 易上手,易使用。(技術沒有高低之分)

    • sql與程式碼分離,提高了維護性。
    • 使程式設計清晰、易維護、易測試。
    • 將業務邏輯與資料訪問邏輯分離。
    • 靈活
    • 提供xml標籤,支援編寫動態SQL。

    重要的是:使用的人多!

二、第一次使用MyBatis程式

思路:搭建環境–>匯入MyBatis–>編寫程式碼–>測試!

2.1、搭建環境

2.1.1、搭建資料

CREATE TABLE `user`  (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `pws` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `user` VALUES (1, '悟空', '123');
INSERT INTO `user` VALUES (2, '八戒', '321');
INSERT INTO `user` VALUES (3, '沙僧', '000');

2.1.2、新建專案

  1. 新建一個maven專案
    • 獲取mybatis
      <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.5.2</version>
      </dependency>
    
  2. 刪除sre檔案
  3. 在mop.xml檔案中匯入maven依賴
<!--匯入依賴-->
<dependencies>
    <!--sql驅動-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>

    <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>

    <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
</dependencies>
<!--防止導包出問題-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>

2.2、建立.xml配置檔案

  1. 建立module。

    1. 配置mybatis-config.xml檔案

      易忘點:

      1. 驅動使在mysql包下的jdbc包裡。
      2. useUnicode=true(安全連線)
      3. useUnicode=true(Unicode編碼可以正常輸出,作用:可以使用中文)
      4. characterEncoding=UTF-8(解決了讀取資料庫產生的資料亂碼的問題,從資料庫讀資料和寫資料時MySQL的預設編碼非UTF8編碼,需要設定字符集編碼為utf8 )
<?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核心配置-->
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!-- 與&同意  Unicode編碼可以正常顯示中文   時區-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai"/>
                <property name="username" value="root"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/lyx/mapper/StuMapper.xml"/>
    </mappers>
</configuration>
  1. 編寫MyBatis工具類

package main.java.com.lyx.dao;

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 java.io.IOException;
import java.io.InputStream;

/**
 * 工具類
 * 獲取sqlSessionFactory --> sqlSession
 */

public class MybatisUtils {
    //提升作用域
    private static SqlSessionFactory  sqlSessionFactory;
    static {
        try {
            //使用MyBatis第一步: 獲取sqlSessionFactory物件
            String resource = "org/mybatis/example/mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //有了sqlSessionFactory物件,獲取到SqlSession的例項了。
    //SqlSession中包含了面向資料庫執行Sql命令的所有方法。
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

2.3、編寫程式碼

  • 實體類
    package main.java.com.lyx.pojo;
    //實體類
    public class user {
        private int id;
        private String naem;
        private String pws;
    
        public user() {
        }
    
        public user(int id, String naem, String pws) {
            this.id = id;
            this.naem = naem;
            this.pws = pws;
        }
    
        public int getId() {
            return id;
        }
    
        public String getNaem() {
            return naem;
        }
    
        public String getPws() {
            return pws;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public void setNaem(String naem) {
            this.naem = naem;
        }
    
        public void setPws(String pws) {
            this.pws = pws;
        }
    
        @Override
        public String toString() {
            return "user{" +
                    "id=" + id +
                    ", naem='" + naem + '\'' +
                    ", pws='" + pws + '\'' +
                    '}';
        }
    }
    
  • dao層mapper介面
    public interface User_dao {
        List<User> getUserList();
    }
    
  • 介面實現
    • (在mapper中)由原來的的UserDaoimp轉變為一個mapper配置檔案
    <?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:繫結一個對應的Dao/Mapper介面-->
    <mapper namespace="com.lyx.dao.User_dao">
        <!--select語句    傳參:parameter:型別Type,集合用Map-->
        <select id="getUserList" resultType="com.lyx.pojo.User">
            select * from mybatis.user
        </select>
    </mapper>
    

2.4、測試

注意點:

  • 測試類最好寫在與被測試類的路徑類似
package com.lyx;

import com.lyx.mapper.StuMapper;## 標題
import com.lyx.pojo.Stu;
import com.lyx.util.StuUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class StuTest {
    @Test
    public void  test(){
        //呼叫util中的getSession方法獲取到sqlSession方法
        SqlSession sqlSession = StuUtil.getSqlSession();
        //呼叫sqlSession方法獲取
        StuMapper mapper = sqlSession.getMapper(StuMapper.class);
        List<Stu> stu = mapper.getStu();
        System.out.println(stu);
    }
}

  • 總結:失敗的原因只有一個那就是懶性

三、CURD

1、namespace

相關文章