日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MyBatis【钢镚核恒】

發(fā)布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis【钢镚核恒】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

MyBatis

簡介

  • MyBatis是優(yōu)秀的持久層框架, 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。
  • MyBatis使用XML將SQL與程序解耦,便于維護
  • MyBatis學(xué)習(xí)簡單,執(zhí)行高效,是JDBC的延伸

拓展:

持久化:即把數(shù)據(jù)(如內(nèi)存中的對象)保存到可永久保存的存儲設(shè)備中(如磁盤)。

持久層:完成持久化工作的代碼塊 . ----> dao層 【DAO (Data Access Object) 數(shù)據(jù)訪問對象】

官方文檔:https://mybatis.org/mybatis-3/zh/index.html

入門

  • 依賴
  • <!-- mybatis --> <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version> </dependency>
  • mybatis-config.xml
  • <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><environments default="development"><!--設(shè)置id配置不同的環(huán)境--><environment id="development"><!--采用JDBC方式,對數(shù)據(jù)庫事務(wù)進行提交,回滾--><transactionManager type="JDBC"/><!--采用連接池方式,管理數(shù)據(jù)庫連接--><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/learn?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment><environment id="product"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/learn?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!--配置Mapper映射文件位置--><mappers><mapper resource="mapper/UserMapper.xml"/></mappers> </configuration>
  • MybatisUtils.class
  • package com.gan;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 = null;static {try {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}public static SqlSession getSqlSession() {return sqlSessionFactory.openSession();} }
  • 創(chuàng)建實體(Entity)類,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"> <mapper namespace=""></mapper>
  • 進行測試
  • SqlSessionFactory

    • SqlSessionFactory是MyBatis的核心對象
    • 用于初始化MyBatis,創(chuàng)建SqlSession對象
    • 保證SqlSessionFactory在應(yīng)用中全局唯一

    SqlSession

    • SqlSession是MyBatis操作數(shù)據(jù)庫的核心對象
    • SqlSession使用JDBC方式與數(shù)據(jù)庫交互
    • SqlSession對象提供了數(shù)據(jù)表CRUD對應(yīng)方法

    配置

    • properties(屬性)
    • settings(設(shè)置)
    • typeAliases(類型別名)
    • typeHandlers(類型處理器)
    • objectFactory(對象工廠)
    • plugins(插件)
    • environments(環(huán)境配置)
      • environment(環(huán)境變量)
        • transactionManager(事務(wù)管理器)
        • dataSource(數(shù)據(jù)源)
    • databaseIdProvider(數(shù)據(jù)庫廠商標識)
    • mappers(映射器)

    映射文件

    頂級元素

    • cache – 該命名空間的緩存配置。
    • cache-ref – 引用其它命名空間的緩存配置。
    • resultMap – 描述如何從數(shù)據(jù)庫結(jié)果集中加載對象,是最復(fù)雜也是最強大的元素。
    • parameterMap – 老式風格的參數(shù)映射。此元素已被廢棄,并可能在將來被移除!請使用行內(nèi)參數(shù)映射。文檔中不會介紹此元素。
    • sql – 可被其它語句引用的可重用語句塊。
    • insert – 映射插入語句。
    • update – 映射更新語句。
    • delete – 映射刪除語句。
    • select – 映射查詢語句。

    Select 元素的屬性

    <selectid="selectPerson"parameterType="int"parameterMap="deprecated"resultType="hashmap"resultMap="personResultMap"flushCache="false"useCache="true"timeout="10"fetchSize="256"statementType="PREPARED"resultSetType="FORWARD_ONLY">

    Insert, Update, Delete 元素的屬性

    <insertid="insertAuthor"parameterType="domain.blog.Author"flushCache="true"statementType="PREPARED"keyProperty=""keyColumn=""useGeneratedKeys=""timeout="20"><updateid="updateAuthor"parameterType="domain.blog.Author"flushCache="true"statementType="PREPARED"timeout="20"><deleteid="deleteAuthor"parameterType="domain.blog.Author"flushCache="true"statementType="PREPARED"timeout="20">

    sql片段:這個元素可以用來定義可重用的 SQL 代碼片段

    <sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>

    結(jié)果映射:給數(shù)據(jù)庫屬性取別名

    <resultMap id="userResultMap" type="User"><id property="id" column="user_id" /><result property="username" column="user_name"/><result property="password" column="hashed_password"/> </resultMap> <select id="selectUsers" resultMap="userResultMap">select user_id, user_name, hashed_passwordfrom some_tablewhere id = #{id} </select>

    兩種傳值方式

    • ${} 文本替換,未經(jīng)任何處理對SQL文本替換
    • #{} 預(yù)編譯傳值,使用預(yù)編譯傳值可以預(yù)防SQL注入

    工作流程圖

    日志

    • 日志文件是用于記錄系統(tǒng)操作事件的記錄文件或文件集合
    • 日志保存歷史數(shù)據(jù),是診斷問題以及理解系統(tǒng)活動的重要依據(jù)

  • 依賴
  • <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
  • logback.xml
  • <?xml version="1.0" encoding="utf-8" ?><configuration> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="console" /> </root> <!-- 日志輸出級別(優(yōu)先級高到低): error:錯誤-系統(tǒng)的故障日志 warn:警告-存在風險或使用不當?shù)娜罩? info:一般性消息 debug:程序內(nèi)部用于調(diào)試信息 trace:程序運行的跟蹤信息 --></configuration>

    動態(tài) SQL

    動態(tài) SQL 是 MyBatis 的強大特性之一。

    • if
    • choose (when, otherwise)
    • trim (where, set)
    • foreach
    <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG <where> <if test="state != null">state = #{state}</if> </where></select><trim prefix="SET" suffixOverrides=","> ...</trim><update id="updateAuthorIfNecessary"> update Author <set> <if test="username != null">username=#{username},</if> <if test="password != null">password=#{password},</if> <if test="email != null">email=#{email},</if> <if test="bio != null">bio=#{bio}</if> </set> where id=#{id}</update>

    緩存

    • —級緩存默認開啟,緩存范圍SqISession會話
    • 二級緩存手動開啟,屬于范圍Mapper Namespace

    二級緩存運行規(guī)則:

    • 二級開啟后默認所有查詢操作均使用緩存
    • 寫操作commit提交時對該namespace緩存強制清空
    • 配置useCache=false可以不用緩存
    • 配置flushCache=true代表強制清空緩存

    開啟二級緩存:

    <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>

    ResultMap

    一對多對象關(guān)聯(lián)查詢

    <resultMap id="rm" type="User"><id column="id" property="id"></id><!-- collection說明 :property 為User下的一對多對象, select 調(diào)用接口的方法進行查詢,column="id" 是傳入查詢的參數(shù)--><collection property="dogs" select="dogDao.getDog" column="id"></collection> </resultMap> <select id="oneToMany" resultMap="rm">select * from user </select>

    多對一對象關(guān)聯(lián)查詢

    <resultMap id="rm" type="Dog"><id column="uid" property="uid"></id><!-- association :property 為Dog下的多對一對象 --><association property="user" select="userDao.queryUser" column="uid"></association> </resultMap> <select id="manyToOne" resultMap="rm">select * from dog </select>

    PageHelper

    • maven引入PageHelper與jsqlparser
    • mybatis-config.xml增加Plugin配置
    • 代碼中使用PageHelper.startPage() 自動分頁
  • 依賴
  • <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version> </dependency>
  • 使用
  • public void test() {SqlSession sqlSession = MybatisUtils.getSqlSession();PageHelper.startPage(0, 3);List<User> users = sqlSession.selectList("userDao.oneToMany");PageInfo pageInfo = new PageInfo(users);List<User> list = pageInfo.getList();for (User u:list) {System.out.println(u.toString());} }

    常用注解

    • @lnsert
    • @Update
    • @Delete
    • @Select
    • @Result,對應(yīng)<id> <result>,字段映射
    • @Results, 對應(yīng)<resultMap>,結(jié)果映射
    • @Param,參數(shù)映射

    Mybatis-plus

    • MyBatis-Plus(簡稱MP)是一個MyBatis的增強工具
    • 自動實現(xiàn)Mapper CRUD操作,極致提高數(shù)據(jù)庫開發(fā)效率
    • MP在MyBatis的基礎(chǔ)上只做增強不做改變

    整合三部曲:

  • pom引入mybatis-plus依賴
  • <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.4.3</version> </dependency>
  • Spring XML更改配置SqlSessionFactory實現(xiàn)類
  • <!-- SqlSessionFactory Config --> <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:mapper/*.xml"/><property name="configLocation" value="classpath:mybatis-config.xml"/> </bean>
  • mybatis-config.xml增加MP分頁插件
  • <plugins><plugin interceptor="com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor"></plugin> </plugins>

    核心注解

    • @TableName -將實體類與表名映射
    • @Tableld -說明對應(yīng)屬性是表的主鍵
    • @TableField -設(shè)置屬性與列名的對應(yīng)關(guān)系

    總結(jié)

    以上是生活随笔為你收集整理的MyBatis【钢镚核恒】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。