• <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概念及環境搭建

    標簽: mybatis  java  

    1.Mybatis概念

    1.Mybatis特點

    ? 1.屬于持久層框架 持久化(將內存中的對象數據轉移到數據庫的過程稱為持久化)

    ? Mybatis Hibernate Spring-Data-Jpa

    ? 2.半自動化 ORM 框架

    ? ORM:對象關系映射思想

    ? 面向對象OOP 關系型數據庫

    ? 類(User) t_user

    ? 成員變量 字段

    ? 類對象 記錄

    ? 半自動化 VS 自動化

    ? Mybatis-半自動化:

    ? 1.表需要手動進行設計

    ? 主表 從表

    ? 2.應用程序提供sql -基本功(以查詢為主

    ? 單表查詢-(條件過濾 排序 分組 子查詢 聚合查詢-聚合函數)

    ? 多表連接查詢

    ? )

    ? 3.依賴數據庫平臺

    ? 優點:上手簡單(基于原生的JDBC封裝) 優化比較靈活 適合做互聯網項目

    ? Hibernate-自動化ORM 框架

    ? 1.表可以通過框架自動化創建

    ? 2.省掉基本的sql (基本的添加 查詢 更新 刪除)

    ? 3.不依賴數據庫平臺

    ? 缺陷:學習成本較高 優化難度較大 適用于傳統的軟件( OA | 圖書館管理系統 | ERP。。 ) 不適合大型的互聯網項目(電商 金融項目)

    2.什么是 MyBatis?

    ? MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生類型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對象)為數據庫中的記錄。

    ? 1.支持定制化sql (程序員編寫sql)

    ? 2.支持存儲過程調用(數據庫端腳本)

    ? 3.映射處理(結果映射)

    屏蔽原生的jdbc 代碼( Connection PS ResultSet 資源關閉 )

    XML 配置 | 注解配置

    2.Mybatis環境搭建

    目錄圖:

    mybatis1.PNG

    表的結構圖:

    Mybatis2.PNG

    1.構建Maven普通工程:maven-archetype-quickstart

    2.pom.xml 添加依賴坐標

    <!-- mybatis jar 包依賴 -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.4.1</version>
        </dependency>
        <!-- 數據庫驅動 -->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.39</version>
        </dependency>
        <!-- log4j 日志打印 -->
        <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.16</version>
        </dependency>
    
    <build>
        <!--
            Maven 項目
            如果源代碼(src/main/java)存在xml  properties  tld 等文件  maven 默認不會自動編譯該文件到輸出目錄
            如果要編譯源代碼中xml properties tld 等文件  需要顯式配置resources 標簽
         -->
        <resources>
          <resource>
            <directory>src/main/resources</directory>
          </resource>
          <resource>
            <directory>src/main/java</directory>
            <includes>
              <include>**/*.xml</include>
              <include>**/*.properties</include>
              <include>**/*.tld</include>
            </includes>
            <filtering>false</filtering>
          </resource>
        </resources>
      </build>
    

    3.resources文件夾中添加日志文件 log4j.properties

    # Global logging configuration
    log4j.rootLogger=DEBUG, stdout
    # Console output...
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t]-%m%n
    

    4.resources文件夾中添加配置文件 jdbc.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
    jdbc.user=root
    jdbc.password=root
    

    5.數據庫表

    CREATE TABLE `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `user_name` varchar(255) NOT NULL,
      `user_pwd` varchar(255) DEFAULT NULL,
      `flag` varchar(255) DEFAULT NULL,
      `create_time` date DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8;
    

    6.添加User對象實體類

    public class User {
        private Integer id;
        private String userName;
        private String userPwd;
        private String flag;
        private Date createtime;
    }
    

    7.在 java目錄下新建一個 mappers 包添加Sql映射文件 UserMapper.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">
    <!--
    1.命名空間配置 namespace: 值全局唯一 包名+文件名(不包含后綴如:.xml),格式:com.mage.mappers.UserMapper
    2.配置 Mapped Statement
    3.查詢標簽:select 又稱為statement statement 配置
    id 值聲明 statement 唯一標識,同一命名空間(同一文件)下不可重復
    parameterType 輸入參數即占位符的數據類型 類型可以是 基本數據類型,字符串,javabean ,map,list,數組 等
    resultType 輸出結果 類型可以是基本數據類型,字符串,javabean,map等
    標簽體:statement 描述 即待執行的 sql語句
    #{id} 占位符 變量名為 id/value 均可 ${value} 變量名必須為 value 如果是字符串拼接形式 無法避免sql注入
    -->
    <mapper namespace="com.mage.mappers.UserMapper">
        <select id="queryUserById" parameterType="int" resultType="com.mage.vo.User">
            select id,user_name as userName,user_pwd as userPwd from user where id=#{id}
        </select>
    </mapper>
    

    8.resources文件夾中添加全局配置文件mybatis.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!-- mybatis 框架頭文件聲明,類似 spring 環境,均需要加入頭文件 -->
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <!-- 添加數據庫連接相關配置信息 -->
    <configuration>
         <!--引入外部配置文件-->
        <properties resource="jdbc.properties"/>
        
        <environments default="development">
            <environment id="development">
                <!-- 加入事務控制 -->
                <transactionManager type="jdbc" />
                <!-- 配置數據庫連接信息 -->
                <dataSource type="pooled">
                   <property name="driver" value="${jdbc.driver}"/>
                    <property name="url" value="${jdbc.url}"/>
                    <property name="username" value="${jdbc.user}"/>
                    <property name="password" value="${jdbc.password}"/>
                </dataSource>
            </environment>
        </environments>
        <!-- mapper 加載指定Sql映射配置文件 文件數量可配置多個-->
        <mappers>
            <!--resource:包路徑 格式:xxx/xxx/xxx/xxxMapper.xml-->
            <mapper resource="com/mage/mappers/UserMapper.xml" />
        </mappers>
    </configuration>
    

    9.添加測試代碼

    @Test
    public void test01() throws IOException {
        /*步驟:
         * 1.加載全局配置文件 構建sqlSessionFactory
         * 2.獲取會話sqlSession
         * 3.調用方法執行查詢
         * 4.關閉查詢
         */   
    
        /*加載配置到內存 注意:org.apache.ibatis.io.Resources*/
        InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
        /*
    	*創建SqlSessionFactory對象hibernate也是如此,必須先獲取SqlSessionFactory實例化對象
    	*/
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        /*
     	*打開會話
     	*/
        SqlSession sqlSession = sqlSessionFactory.openSession();
        /**獲取session以便操作數據庫
    	* 參數一:指定UserMapper.xml映射文件id必須加入命名空間
    	* 參數二:指定輸入參數
    	* 參數statment對應:namespace.statementId
        */
        User user = sqlSession.selectOne("com.mage.mappers.UserMapper.queryUserById", 75);
        System.out.println(user);
        /*
    	*操作完數據庫關閉session
    	*/
        sqlSession.close();
    }
    

    10.啟動測試

    3.mybatis中的Mapper.xml中sql入參,結果參數配置

    • 入參: 基本類型(包裝類型)、String、Date、JavaBean、Map、List、數組
    • 結果參數:基本類型(4類8種) String Date JavaBean List Map List

    1.Mybatis映射sql 入參配置

    基本類型
    <!--使用sql標簽,將sql語句中頻繁使用的字段統一管理和使用,直接通過id屬性來調用--> 
    <sql id="user_columns">
        id,user_name as userName,user_pwd as userPwd,flag,create_time as createTime
    </sql>
    
    <select id="queryUserById" parameterType="int" resultType="com.mage.vo.User">
        select <include refid="user_columns"/>
        from user
        where id=#{userId}
    </select>
    
    String 類型
    <select id="queryUserByUserName" parameterType="string" resultType="com.mage.vo.User">
        select  <include refid="user_columns"/>  
        from user 
        where user_name=#{userName}
    </select>
    
    JavaBean 類型
    <select id="queryUserByUserNameAndUserPwd" parameterType="com.mage.query.UserQuery" resultType="com.mage.vo.User">
        <!--
                   userName,userPwd  為 UserQuery 類成員變量名
         -->
        select  <include refid="user_columns"/>  
        from user 
        where user_name=#{userName} and user_pwd=#{userPwd}
    </select>
    
    Map 類型
    <select id="queryUserByUserNameAndUserPwdMap" parameterType="map" resultType="com.mage.vo.User">
        <!--
                   uname  map 中key 的名稱
                   password map 中key 的名稱
         -->
        select  <include refid="user_columns"/>  
        from user 
        where user_name=#{uname} and user_pwd =#{password}
    </select>
    
    數組類型
    <!--
    collection  值  array|list  當數組放在map 中傳入時collection值此時為key的名稱!!! 
    -->
    <update id="updateUserPasswordByIds" >
        update user set user_pwd="111111" where id in
        <foreach collection="array" item="item"  open="(" separator="," close=")">
            #{item}
        </foreach>
    </update>
    

    2.Mybatis映射sql 結果參數配置

    結果參數:基本類型(4類8種)  String Date JavaBean  List  Map  List<Map>
    resultType:String Date JavaBean  map
    resultMap:屬于一個標簽id 值 為另一個resultMap 標簽的id 
    
    基本類型
    <select id="countUser" resultType="int">
        select count(1) 
        from user
    </select>
    
    日期類型
    <select id="queryUserCreateTimeByUserId" parameterType="int" resultType="date">
        select create_time 
        from user 
        where  id=#{userId}
    </select>
    
    JavaBean
    <sql id="user_columns">
        id,user_name as userName,user_pwd as userPwd,flag,create_time as createTime
    </sql> 
    <select id="queryUserByUserName" parameterType="string" resultType="com.mgae.vo.User">
        select <include refid="user_columns"/>  
        from user 
        where user_name=#{userName}
    </select>
    
    Map
    <select id="queryUsersByUserNameLikeMap" parameterType="string" resultType="map">
        select <include refid="user_columns"/> 
        from user 
        where user_name like concat('%',#{userName},'%')
    </select>
    
    List
    <select id="queryUsersByUserNameLike" parameterType="int" resultType="com.mgae.vo.User">
        select <include refid="user_columns"/> 
        from user 
        where user_name like concat('%',#{userName},'%')
    </select>    
    
    ResultMap 接收結果
     <!--
           當前文件 id 唯一且不可重復
     -->
    <resultMap id="user_map" type="User">
        <!--
               column:返回的列名
               property:User 對象成員變量
            -->
        <result column="id" property="id"></result>
        <result column="user_name" property="userName"></result>
        <result column="user_pwd" property="userPwd"></result>
        <result column="flag" property="flag"></result>
        <result column="create_time" property="createTime"></result>
    </resultMap>
    <select id="queryUserById02" parameterType="int" resultMap="user_map">
        select id, user_name, user_pwd, flag, create_time
        from user
        where id=#{userId}
    </select>
    

    4.Mybatis的xml配置文件中常見元素配置

    (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)
    

    1.properties標簽

    1.給某些外部屬性賦值且可以動態替換

    <property name="driver" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.password}"/>
    

    2.加載外部配置文件

     <!--引入外部配置文件-->
    <properties resource="jdbc.properties"/>
    

    2.typeAlias標簽

    1.類型別名是為 Java 類型設置一個短的名字,它只和 XML 配置有關,存在的意義僅在于用來減少類完全限定名的冗余,書寫方便

    <typeAliases>
        <!--配置1:指定具體類取別名-->
        <typeAlias type="com.mage.vo.User" alias="user"/>
        <typeAlias type="com.mage.query.UserQuery" alias="userquery"/>
        <!--配置2:指定某個包路徑下的所有類取別名,別名默認是類名(推薦使用)-->
        <package name="com.mage.vo"/>
        <package name="com.mage.query"/>
    </typeAliases>
    

    對應mybatis項目中的java目錄下的Mapper.xml映射文件中sql入參和結果參數配置可以做出相應的書寫改變

    <!--使用sql標簽,將sql語句中頻繁使用的字段統一管理和使用,直接通過id屬性來調用--> 
    <sql id="user_columns">
        id,user_name as userName,user_pwd as userPwd,flag,create_time as createTime
    </sql>
    <!--在mybatis.xml中添加別名標簽,sql映射文件中入參和結果參數可以用類名代替,不必寫包名+類名-->
    <select id="queryUserById" parameterType="int" resultType="User">
        select <include refid="user_columns"/>
        from user
        where id=#{userId}
    </select>
    <select id="queryUserByUserNameAndUserPwd" parameterType="UserQuery" resultType="User">
        <!--
                   userName,userPwd  為 UserQuery 類成員變量名
         -->
        select  <include refid="user_columns"/>  
        from user 
        where user_name=#{userName} and user_pwd=#{userPwd}
    </select>
    

    3.mappers標簽

    mappers 映射器(四種配置):精確定位我們配置的sql映射文件的所在位置,進行后續的CRUD操作!

    <!— sqlmapper 配置文件路徑 -->
    <mappers>
        <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
        <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
        <mapper resource="org/mybatis/builder/PostMapper.xml"/>
    </mappers>
    <!—url 絕對路徑形式-->
    <mappers>
        <mapper url="file:///var/mappers/AuthorMapper.xml"/>
        <mapper url="file:///var/mappers/BlogMapper.xml"/>
        <mapper url="file:///var/mappers/PostMapper.xml"/>
    </mappers>
    <!—接口 列表配置形式 注解 sql-->
    <mappers>
        <mapper class="org.mybatis.builder.AuthorMapper"/>
        <mapper class="org.mybatis.builder.BlogMapper"/>
        <mapper class="org.mybatis.builder.PostMapper"/>
    </mappers>
    <!—映射包下所有接口-->
    <mappers>
        <package name="org.mybatis.builder"/>
    </mappers>
    

    4.settings標簽

    <settings>
        <!--
                數據庫字段(帶有_字符的字段) 自動轉換為駝峰命名
         -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    

    本次分享就到這里,如果文章有小問題,歡迎評論區留言,如果文章對你有幫助,請各位收藏并給我點個贊,如果你想學習更多,請關注我!謝謝!

    版權聲明:本文為QZP51ZX原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/QZP51ZX/article/details/105893137

    智能推薦

    MyBatis01:第一個程序

    轉載自:狂神說MyBatis01:第一個程序 起意 最近在學習MyBatis,看了狂神的教程,感覺簡單易懂。 這篇文章在狂神的文章上,加了一點自己的認識。 希望之后可以慢慢養成寫博客的習慣。 什么是MyBatis? MyBatis 是一款優秀的持久層框架 MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集的過程(和jdbc比較) MyBatis 可以使用簡單的 XML 或...

    Mybatis 01 環境搭建和基本使用

    1.導包 2.配置文件 3.創建實體類 4.創建Mapper文件 5.注冊 6.測試類 7.結果集 補充: 目錄結構...

    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 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

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