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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql生成uui mybatis_mybatis----基础

發布時間:2024/9/15 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql生成uui mybatis_mybatis----基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基礎知識

安裝

org.mybatis

mybatis

x.x.x

對原生態jdbc程序中問題總結

環境

java環境:jdk

jdbc程序

使用jdbc查詢mysql數據庫中用戶表的記錄

問題總結

數據庫連接、使用時創建、不使用時就立即釋放,對數據庫進行頻繁連接開啟和關閉,造成數據庫資源浪費,影響數據庫性能(使用連接池管理數據庫來連接進行優化)

將sql語句硬編碼到Java代碼中,如果sql語句修改,需要重新編譯代碼,不利于系統維護(將sql語句配置在xml配置文件中,即使sql變化,也不需要對java代碼進行重新編譯)

向preparedStatement中設置參數,對占位符號位置和設置參數值,硬編碼在Java代碼中,不利于系統維護(將sql語句及占位符號和參數全部配置在xml中)

從resultSet中遍歷結果集數據時,存在硬編碼,將獲取表的字段進行硬編碼,不利于系統維護(將查詢的結果集,自動映射成java對象。)

mybatis是什么

mybatis是一個持久層框架,是apache下的頂級項目。

mybatis是讓程序員將主要精力放在sql上,通過mybatis提供的映射方式,自由靈活的生成(半自動化,大部分需要程序員編寫sql)滿足需要的sql語句

mybatis可以將向preparedStatement中的輸入參數自動進行輸入映射,將查詢結果集靈活映射成java對象(輸出映射)

mybatis框架

SqlMapConfig.xml 是mybatis的全局配置文件,配置了數據源、事務等mybatis運行環境(第三方軟件進行配置)

mybatis自己還需要配置映射文件(mapper.xml、mapper.xml、mapper.xml……【映射文件】)也就是配置sql語句

SqlSessionFactory(會話工廠),根據配置文件創建工廠

作用:創建SqlSession

SqlSession(會話),是一個接口,面向用戶(程序員)的接口

作用:操作數據庫(發出增、刪、改、查)

Executor(執行器),也是一個接口(基本執行器、緩存執行器)

作用:操作數據庫(發出增、刪、改、查)

mapped statement(底層封裝對象)

作用:對操作數據庫存儲封裝,包括sql語句,輸入參數、輸出結果類型

入門程序

編寫log4j.properties進行日志輸出

# Global logging configuration

#在開發環境下日志級別要設置成DEBUG,生成環境設置成info或ERROR

log4j.rootLogger=DEBUG, stdout

# MyBatis logging configuration...

log4j.logger.org.mybatis.example.BlogMapper=TRACE

# 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

編寫全局配置SqlMapConfig.xml

映射文件

映射文件命名

User.xml(原始mybatis命名),mapper代理開發映射文件叫xxxMapper.xml,比如:UserMapper.xml

在映射文件中配置sql語句

image.png

image.png

#{}與${}

#{} 表示一個占位符,#{}接受輸入參數,類型可以是簡單的類型,pojo、hashmap。

如果接受簡單類型,#{}中可以寫成value或其他名稱

#{}接受pojo對象值,通過OGNL讀取對象中的屬性值,通過屬性。屬性。屬性……的方式獲取對象屬性值

${} 表示一個拼接符號,會引起sql注入,所以不建議使用

${}接受輸入參數,類型可以是簡單的類型,pojo、hashmap。

如果接受簡單類型,${}中只可以寫成value

parameterType、resuletType

parameterType : 指定輸入參數的類型

resuletType : 指定輸出參數的類型

自增主鍵返回

mysql自增主鍵,執行insert提交之前自動生成一個自增主鍵。

通過mysql函數獲取到剛插入記錄的自增主鍵:

LAST_INSERT_ID()

是在insert之后調用此函數,需要修改UserInsert的定義

SELECT LAST_INSERT_ID()

INSERT into user(username,password,address) value(#{username},#{password},#{address})

非自增主鍵返回(使用uuid)

使用mysql的uuid()函數生成主鍵,需要修改表中id字段類型為string,長度設置成35位

執行思路:

先通過uuid()查詢到主鍵,將主鍵輸入到sql語句中

執行uuid()語句順序相對于insert語句之前執行

SELECT uuid()

INSERT into user(id,username,password,address) value(#{id},#{username},#{password},#{address})

mybatis開發dao的方法

sqlSession使用范圍

sqlSessionFactoryBuilder

通過sqlSessionFactoryBuilder創建會話工廠sqlSessionFactory

sqlSessionFactory

通過sqlSessionFactory創建sqlSession,通過單例模式管理sqlSessionFactory(工廠一旦創建,一直使用一個實例)

sqlSession

是一個面向用戶的接口(程序員)的接口

sqlSession中提供了很多操作數據庫的方法:例如:selectOne(返回單個對象)selectList(返回單個或多個對象)

sqlSession是線程不安全的,在sqlSession實現類中除了有接口中的方法(操作數據庫的方法)還有數據域屬性

sqlSession最佳應用場合在方法體內,定義為局部變量使用

原始dao開發方法(程序員需要寫dao接口和dao實現類)

思路:

程序員需要寫dao接口和dao實現類。

需要向dao實現類中注入sqlSessionFactory(會話工廠),在方法體內通過工廠(sqlSessionFactory)創建sqlSession

總結原始開發dao的問題

1.dao的接口實現類方法中存在大量模板方法,設想能否將這些代碼提取出來

2.調用sqlSession方法時將statement的id硬編碼了

3.調用sqlSession方法時傳入的變量,由于sqlSession方法使用泛型,即使變量類型傳入錯誤,在編譯階段也不報錯,只有在運行時報錯,不利于程序開發

mapper代理方法(程序員只需要mapper接口(相當于dao接口))

思路

1.程序員只需要mapper接口(相當于dao接口),需要遵循一些開發規范,mybatis可以自動生成mapper接口實現類的代理對象

2.程序員還需要編寫mapper.xml映射文件

開發規范:

1.在mapper.xml中namespace等于mapper接口地址

image.png

2.mapper.java接口中的方法名和mapper.xml中statement的id一致

3.mapper.java接口中的方法輸入參數類型和mapper.xml中statement的parameterType指定的類型一致

4.mapper.java接口中的方法返回值類型和mapper.xml中statement的resultType指定的類型一致

image.png

image.png

總結

以上開發規范主要是對下邊的代碼進行統一的生成:

image.png

SqlMapConfig.xml

properties(屬性)

需求:

將數據庫連接的參數單獨配置在db.properties中,只需要在sqlMapConfig.xml中加載db.properties的屬性值

在SqlMapConfig.xml中就不需要對數據庫連接參數硬編碼

將數據庫連接參數只配置在db.properties中,原因:方便對參數進行統一的管理,其他xml可以引用該db.properties

db.properties的文件

image.png

sqlMapConfig.xml加載屬性名稱

image.png

image.png

建議:

不要在properties元素體內添加任何屬性值,只將屬性值定義在properties文件中

setting(全局配置參數)需要時設置,不需要就不要設置(會影響mybatis的運行)

mybatis框架在運行時可以調整一些運行參數

比如:開啟二級緩存、開啟延時加載……

全局參數將會影響mybatis的運行行為

typeAliases(類型別名)

單個定義別名

image.png

批量定義別名

image.png

在dao.xml中的返回值類型填實體類的名稱,首字母大寫小寫都可以

typeHandles(類型處理器)

在mybatis中通過typeHandles完成jdbc類型和java類型的轉換

objectFactory(對象工廠)

plugins(插件)

environments(環境集合屬性對象)

environment(環境子屬性對象)

transactionManager(事務管理)

dataSource(數據源)

mappers(映射器)

通過resource加載單個映射文件

image.png

通過mapper接口加載

加載單個映射文件

image.png

批量加載映射文件(建議使用)

image.png

動態sql

什么是動態sql

mybatis核心就是對sql語句進行靈活的操作,通過表達式進行判斷,對sql進行靈活拼接、組裝

需求:

用戶信息總和查詢列表和用戶信息查詢列表總數這兩個statement的定義使用動態sql

對查詢條件進行判斷,如果輸入參數不為空才能進行查詢條件拼接;例如:

select * from user

and user.username = #{userCustom.username}

and user.sex = #{userCustom.sex}

sql片段

需求:

將上邊實現的動態sql判斷代碼塊抽取出來,組成一個sql片段。其他的statement中就可以引用sql片段

定義sql片段

and user.username = #{userCustom.username}

and user.sex = #{userCustom.sex}

應用sql片段

select * from user

/*應用sql片段*/

/*在這里還會引用其他的sql片段*/

foreach

向sql傳遞數組或list,mybatis使用foreach解析

需求

在用戶查詢列表和查詢總數的statement中增加多個id輸入查詢

sql語句如下:

select * from user where id=1 or id=10 or id=16或select * from user where id in(1,10,16)

在輸入參數類型中添加List傳入多個id

private List ids傳入多個id

mapper.xml的配置

在查詢條件中,查詢條件定義成一個sql片段,需要修改sql片段

/*每次遍歷需要拼接的串*/

id=#{user_id}

select * from user where id in(1,10,16)的foreach查詢方法

image.png

總結

以上是生活随笔為你收集整理的mysql生成uui mybatis_mybatis----基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。