java元婴期(22)----java进阶(mybatis(1)---mybatis框架概述入门程序)
1.對原生態jdbc程序中問題總結(為啥要用mybatis)
1、數據庫連接,使用時就創建,不使用立即釋放,對數據庫進行頻繁連接開啟和關閉,造成數據庫資源浪費,影響 數據庫性能。
設想:使用數據庫連接池管理數據庫連接。
?
2、將sql語句硬編碼到java代碼中,如果sql 語句修改,需要重新編譯java代碼,不利于系統維護。
設想:將sql語句配置在xml配置文件中,即使sql變化,不需要對java代碼進行重新編譯。
?
3、向preparedStatement中設置參數,對占位符號位置和設置參數值,硬編碼在java代碼中,不利于系統維護。
設想:將sql語句及占位符號和參數全部配置在xml中。
?
4、從resutSet中遍歷結果集數據時,存在硬編碼,將獲取表的字段進行硬編碼,,不利于系統維護。
設想:將查詢的結果集,自動映射成java對象。
2.mybatis框架
1.mybatis是什么?
1.mybatis是一個持久層的框架,是apache下的頂級項目。
2.mybatis托管到goolecode下,再后來托管到github下(https://github.com/mybatis/mybatis-3/releases)。
3.mybatis讓程序將主要精力放在sql上,通過mybatis提供的映射方式,自由靈活生成(半自動化,大部分需要程序員編寫sql)滿足需要sql語句。
4.mybatis可以將向 preparedStatement中的輸入參數自動進行輸入映射,將查詢結果集靈活映射成java對象。(輸出映射)
2.mybatis框架
?
?
3.入門程序
1.需求
- 根據用戶id(主鍵)查詢用戶信息
- 根據用戶名稱模糊查詢用戶信息
- 添加用戶
- 刪除 用戶
- 更新用戶
2.環境
- java環境:jdk1.7.0_72
- eclipse:indigo
- mysql:5.1
mybatis運行環境(jar包):
mybatis-3.2.7.jar:核心包
?
3.log4j.properties
4.SqlMapConfig.xml
配置mybatis的運行環境,數據源、事務等。
5.根據用戶id(主鍵)查詢用戶信息
1.創建po類
2.映射文件
映射文件命名:
User.xml(原始ibatis命名),mapper代理開發映射文件名稱叫XXXMapper.xml,比如:UserMapper.xml、ItemsMapper.xml
在映射文件中配置sql語句。
3.在SqlMapConfig.xml加載映射文件
在sqlMapConfig.xml中加載User.xml:???????
4.程序編寫
6.根據用戶名稱模糊查詢用戶信息
1.映射文件
使用User.xml,添加根據用戶名稱模糊查詢用戶信息的sql語句。
2.程序代碼
3.自增主鍵返回
mysql自增主鍵,執行insert提交之前自動生成一個自增主鍵。
通過mysql函數獲取到剛插入記錄的自增主鍵:
LAST_INSERT_ID()
是insert之后調用此函數。
修改insertUser定義:
4.非自增主鍵返回(使用uuid())
使用mysql的uuid()函數生成主鍵,需要修改表中id字段類型為string,長度設置成35位。
執行思路:
- 先通過uuid()查詢到主鍵,將主鍵輸入 到sql語句中。
- 執行uuid()語句順序相對于insert語句之前執行。
通過oracle的序列生成主鍵:
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">SELECT 序列名.nextval()</selectKey>insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})?
7.刪除用戶
1.映射文件
2.代碼
8.更新用戶
1.映射文件
2.代碼
9.總結
1.parameterType
在映射文件中通過parameterType指定輸入 參數的類型
2.resultType
在映射文件中通過resultType指定輸出結果的類型。???????
3.#{}和${}
#{}表示一個占位符號,#{}接收輸入參數,類型可以是簡單類型,pojo、hashmap。
如果接收簡單類型,#{}中可以寫成value或其它名稱。
#{}接收pojo對象值,通過OGNL讀取對象中的屬性值,通過屬性.屬性.屬性...的方式獲取對象屬性值。
${}表示一個拼接符號,會引用sql注入,所以不建議使用${}。
${}接收輸入參數,類型可以是簡單類型,pojo、hashmap。
如果接收簡單類型,${}中只能寫成value。
${}接收pojo對象值,通過OGNL讀取對象中的屬性值,通過屬性.屬性.屬性...的方式獲取對象屬性值。
4.selectOne和selectList
selectOne表示查詢出一條記錄進行映射。如果使用selectOne可以實現使用selectList也可以實現(list中只有一個對象)。
selectList表示查詢出一個列表(多條記錄)進行映射。如果使用selectList查詢多條記錄,不能使用selectOne。
如果使用selectOne報錯:
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 4
5.mybatis和hibernate本質區別和應用場景
hibernate:是一個標準ORM框架(對象關系映射)。入門門檻較高的,不需要程序寫sql,sql語句自動生成了。
對sql語句進行優化、修改比較困難的。
應用場景:
???????? 適用與需求變化不多的中小型項目,比如:后臺管理系統,erp、orm、oa。。
mybatis:專注是sql本身,需要程序員自己編寫sql語句,sql修改、優化比較方便。mybatis是一個不完全 的ORM框架,雖然程序員自己寫sql,mybatis 也可以實現映射(輸入映射、輸出映射)。
應用場景:
???????? 適用與需求變化較多的項目,比如:互聯網項目。
企業進行技術選型,以低成本 高回報作為技術選型的原則,根據項目組的技術力量進行選擇。
?
總結
以上是生活随笔為你收集整理的java元婴期(22)----java进阶(mybatis(1)---mybatis框架概述入门程序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java元婴期(21)----java进
- 下一篇: java元婴期(23)----java进