• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • MyBatis01:第一個程序

    標簽: MyBatis  java

    在這里插入圖片描述
    轉載自:狂神說MyBatis01:第一個程序

    起意

    最近在學習MyBatis,看了狂神的教程,感覺簡單易懂。
    這篇文章在狂神的文章上,加了一點自己的認識。
    希望之后可以慢慢養成寫博客的習慣。

    什么是MyBatis?

    • MyBatis 是一款優秀的持久層框架

    • MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集的過程(和jdbc比較)

    • MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 實體類 【Plain Old Java Objects,普通的 Java對象】映射成數據庫中的記錄。

    • MyBatis 本是apache的一個開源項目ibatis, 2010年這個項目由apache 遷移到了google code,并且改名為MyBatis 。

    • 2013年11月遷移到Github .

    • Mybatis官方文檔 : 官方文檔(文檔可以仔細看看)

    • GitHub : github

    為什么用MyBatis?

    • Mybatis就是幫助程序猿將數據存入數據庫中 , 和從數據庫中取數據 .

    • 傳統的jdbc操作 , 有很多重復代碼塊 .比如 : 數據取出時的封裝 , 數據庫的建立連接等等… , 通過框架可以減少重復代碼,提高開發效率 .

    • MyBatis 是一個半自動化的ORM框架 (Object Relationship Mapping) -->對象關系映射

    • 所有的事情,不用Mybatis依舊可以做到,只是用了它,所有實現會更加簡單!技術沒有高低之分,只有使用這個技術的人有高低之別

    • MyBatis的優點

      • 簡單易學:本身就很小且簡單。沒有任何第三方依賴,最簡單安裝只要兩個jar文件+配置幾個sql映射文件就可以了,易于學習,易于使用,通過文檔和源代碼,可以比較完全的掌握它的設計思路和實現。

      • 靈活:mybatis不會對應用程序或者數據庫的現有設計強加任何影響。sql寫在xml里,便于統一管理和優化。通過sql語句可以滿足操作數據庫的所有需求。

      • 解除sql與程序代碼的耦合:通過提供DAO層,將業務邏輯和數據訪問邏輯分離,使系統的設計更清晰,更易維護,更易單元測試。sql和代碼的分離,提高了可維護性。

      • 提供xml標簽,支持編寫動態sql。

    最重要的一點,使用的人多!公司需要!

    MyBatis和JDBC的比較

    在這里插入圖片描述
    上面代碼的問題總結:

    1、數據庫連接,使用時就創建,不使用立即釋放,對數據庫進行頻繁連接開啟和關閉,造成數據庫資源浪費,影響數據庫性能。

    解決方案:使用數據庫連接池管理數據庫連接。

    2、將sql語句硬編碼到java代碼中,如果sql 語句修改,需要重新編譯java代碼,不利于系統維護。

    解決方案:將sql語句配置在xml配置文件中,即使sql變化,不需要對java代碼進行重新編譯。

    3、向preparedStatement中設置參數,對占位符號位置和設置參數值,硬編碼在java代碼中,不利于系統維護。

    解決方案:將sql語句及占位符號和參數全部配置在xml中。

    4、從resutSet中遍歷結果集數據時,存在硬編碼,將獲取表的字段進行硬編碼,,不利于系統維護。

    解決方案:將查詢的結果集,自動映射成java對象。

    MyBatish和hibernate比較

    • hibernate:是一個標準ORM框架(對象關系映射),入門門檻較高的,不需要程序寫sql,sql語句自動生成了,對sql語句進行優化、修改比較困難的。

      應用場景:

      適用與需求變化不多的中小型項目,比如:后臺管理系統,erp、orm、oa。。

    • mybatis:專注是sql本身,需要程序員自己編寫sql語句,sql修改、優化比較方便。mybatis是一個不完全 的ORM框架,雖然程序員自己寫sql,mybatis 也可以實現映射(輸入映射、輸出映射)。

      應用場景:

      適用與需求變化較多的項目,比如:互聯網項目。

    第一個MyBatis程序

    • 入門程序環境說明

      • jdk8
      • MySql 8.0.16
      • maven 3.6.3
      • IDEA
    • IDEA項目結構
      在這里插入圖片描述

    1. 數據庫搭建
    CREATE DATABASE `mybatis`;
    
    USE `mybatis`;
    
    DROP TABLE IF EXISTS `user`;
    
    CREATE TABLE `user` (
    `id` int(20) NOT NULL,
    `name` varchar(30) DEFAULT NULL,
    `pwd` varchar(30) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    insert  into `user`(`id`,`name`,`pwd`) values (1,'狂神','123456'),(2,'張三','abcdef'),(3,'李四','987654');
    

    2.導入MyBatis相關jar包

    <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
       <version>3.5.2</version>
    </dependency>
    <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>5.1.47</version>
    </dependency>
    

    3.編寫MyBaits工具類—從 XML 中構建 SqlSessionFactory

    • 參考官方文檔入門
    package com.mao.utils;
    
    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;
    
    public class MybatisUtils {
    
        private static SqlSessionFactory sqlSessionFactory;
    
        static {
            try {
                String resource = "mybatis-config.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        //獲取SqlSession連接
        public static SqlSession getSession(){
            return sqlSessionFactory.openSession();
        }
    
    }
    

    4.編寫MyBatis核心配置文件

    <?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>
        <!--核心配置文件-->
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123"/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper resource="com/mao/dao/userMapper.xml"/>
    
        </mappers>
    
    </configuration>
    

    5.創建實體類

    package com.mao.pojo;
    
    public class User {
        private int id;
        private String name;
        private String pwd;
    
        public User() {
        }
    
        public User(int id, String name, String pwd) {
            this.id = id;
            this.name = name;
            this.pwd = pwd;
        }
    
        public int getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    
        public String getPwd() {
            return pwd;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", pwd='" + pwd + '\'' +
                    '}';
        }
    }
    
    

    6.編寫Mapper接口類

    package com.mao.Dao;
    
    import com.mao.pojo.User;
    import org.apache.ibatis.annotations.Param;
    
    import java.util.List;
    import java.util.Map;
    
    public interface userMapper {
        //查詢所有用戶
        List<User> getUserList();
    }
    
    

    7.編寫Mapper.xml配置文件

    <?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">
    <mapper namespace="com.mao.Dao.userMapper">
        <select id="getUserList" resultType="com.mao.pojo.User">
            select * from mybatis.user;
        </select>
    </mapper>
    

    8。編寫測試類

    • Junit測試包
    package com.mao.Dao;
    
    import com.mao.pojo.User;
    import com.mao.utils.MybatisUtils;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class UserMapperTest {
        //查詢所有用戶
        @Test
        public void getUserList(){
            //第一步,獲取SqlSesion對象
            SqlSession sqlSession = MybatisUtils.getSession();
            //第二步,執行SQL
            userMapper userDao = sqlSession.getMapper(userMapper.class);
            List<User> userList = userDao.getUserList();
            for(User user:userList){
                System.out.println(user);
            }
            //關閉sqlSession
            sqlSession.close();
    
        }
    }
    
    

    9.測試成功
    在這里插入圖片描述

    問題說明

    可能出現問題說明:Maven靜態資源過濾問題

    <resources>
       <resource>
           <directory>src/main/java</directory>
           <includes>
               <include>**/*.properties</include>
               <include>**/*.xml</include>
           </includes>
           <filtering>false</filtering>
       </resource>
       <resource>
           <directory>src/main/resources</directory>
           <includes>
               <include>**/*.properties</include>
               <include>**/*.xml</include>
           </includes>
           <filtering>false</filtering>
       </resource>
    </resources>
    

    MyBatis使用步驟總結

    1. 導入jar包,配置pom.xml
    2. 配置mybatis-config.xml 核心配置文件 (1、數據源,2、外部的mapper)
    3. 編寫MyBaits工具類—從 XML 中構建 SqlSessionFactory,SqlSession
    4. 創建實體類
    5. 編寫Mapper接口類
    6. 編寫Mapper.xml配置文件
    7. 使用,通過SqlSession操作數據庫 CRUD
    8. 調用session.commit()提交事務(增刪改)
    9. 調用session.close()關閉會話
    版權聲明:本文為Leo_Yizhe原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/Leo_Yizhe/article/details/106443582

    智能推薦

    第一個MyBatis程序

    MyBatis 要多對官方文檔進行學習 https://mybatis.org/mybatis-3/zh/index.html 簡介 MyBatis 持久層框架 Dao Access Objects 定制化sql,存儲過程,高級映射 避免了所有JDBC代碼,設置參數,獲取結果集,都不用自己手寫 可以使用XML或注解,來配置和映射原生類型、接口和java的POJO為數據庫記錄 POJO(Plain ...

    第一個mybatis程序

    搭建環境 1,搭建數據庫 2,創建Maven項目 導入mysql驅動,mybatis,與junit等依賴 3,編寫SqlSession工廠類 注意,工廠類需要使用到mybatis-config.xml文件:即mybatis核心配置文件 作用: 構建SqlSessionFactory:意為SqlSession工廠 返回SqlSession 4,編寫一個mybatis核心配置文件 5,編寫User實體...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    猜你喜歡

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    styled-components —— React 中的 CSS 最佳實踐

    https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

    精品国产乱码久久久久久蜜桃不卡