MyBatis次日課上筆記

[今日課程大綱]
<settings>標籤經常使用屬性介紹
MyBatis 對Log4J 的支持
Log4J 複習
parameterType 屬性(對象,map,基本類型,#{},${}等)
<typeAliases>兩種別名配置及內置別名
MyBatis 實現新增及MyBatis 事務
MyBatis 實現刪除
MyBatis 實現修改
[知識點詳解]
一.註解
1.註解存在的意義:簡化xml 文件的開發.
2.註解在servlet 3.0 規範以後大力推廣的.
3.註解前面的@XXX,表示引用一個@interface
3.1 @interface 表示註解聲明
4.註解能夠有屬性,由於註解其實就是一個接口(類)
4.1 每次使用註解都須要導包
5.註解語法: @XXXX(屬性名= 值)
6.值的分類
6.1 若是值是基本數據類型或字符串: 屬性名=值
6.2 若是值是數組類型: 屬性名={值,值}
6.2.1 若是隻有一個值能夠省略大括號
6.3 若是值是類類型,屬性名=@名稱
7.若是註解只須要給一個屬性賦值,且這個屬性是默認屬性,能夠省略
屬性名
二. 路徑
1. 編寫路徑爲了告訴編譯器如何找到其餘資源.
2. 路徑分類
2.1 相對路徑: 從當前資源出發找到其餘資源的過程
2.2 絕對路徑: 從根目錄(服務器根目錄或項目根目錄)出發找到其
他資源的過程
2.2.1 標誌: 只要以/開頭的都是絕對路徑
3. 絕對路徑:
3.1 若是是請求轉發/ 表示項目根目錄(WebContent)
3.2 其餘重定向,<img/> <script/>,<style/>,location.href 等/都表示
服務器根目錄(tomcat/webapps 文件夾)
4. 若是客戶端請求的控制器,控制器轉發到JSP 後,jsp 中若是使用相對
路徑,須要按照控制器的路徑去找其餘資源.
4.1 保險辦法:使用絕對路徑,能夠防止上面的問題.
三. Log4J
1. 由apache 推出的開源免費日誌處理的類庫.
2. 爲何須要日誌:
2.1 在項目中編寫System.out.println();輸出到控制檯,當項目發佈
到tomcat 後,沒有控制檯(在命令行界面能看見.),不容易觀察一些
輸出結果.
2.2 log4j 做用,不只能把內容輸出到控制檯,還能把內容輸出到文件
中.便於觀察結果.
3. 使用步驟:
3.1 導入log4j-xxx.jar
3.2 在src 下新建log4j.properties(路徑和名稱都不容許改變)
3.2.1 ConversionPattern :寫表達式
3.2.2 log4j.appender.LOGFILE.File 文件位置及名稱(日
志文件擴展名.log)
log4j.rootCategory=DEBUG, CONSOLE ,LOGFILE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppend
er
log4j.appender.CONSOLE.layout=org.apache.log4j.Patter
nLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%C %d{
YYYY-MM-dd hh:mm:ss} %m %n
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=E:/my.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.Patter
nLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%C %m
%L %n
4. log4j 輸出級別
4.1 fatal(致命錯誤) > error (錯誤) > warn (警告) > info(普通訊
息) > debug(調試信息)
4.2 在log4j.properties 的第一行中控制輸出級別
5. log4j 輸出目的地
5.1 在一行控制輸出目的地
6. pattern 中經常使用幾個表達式
6.1 %C 包名+類名
6.2%d{YYYY-MM-dd HH:mm:ss} 時間
6.3%L 行號
6.4%m 信息
6.5%n 換行
四. <settings>標籤
1.在mybatis 全局配置文件中經過<settings>標籤控制mybatis 全局開

2.在mybatis.xml 中開啓log4j
2.1 必須保證有log4j.jar
2.2 在src 下有log4j.properties
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
3.log4j 中能夠輸出指定內容的日誌(控制某個局部內容的日誌級別)
3.1 命名級別(包級別): <mapper>namespace 屬性中除了最後一個
類名
例如namespace=」com.bjsxt.mapper.PeopleMapper」 其中包級別爲
com.bjsxt.mapper ,須要在log4j.propeties 中
3.1.1 先在整體級別調成Error 不輸出無用信息
3.1.2 在設置某個指定位置級別爲DEBUG
3.2 類級別
3.2.1 namespace 屬性值,namespace 類名
3.3 方法級別
3.3.2 使用namespace 屬性值+標籤id 屬性值
五parameterType 屬性
1. 在XXXMapper.xml 中<select><delete>等標籤的parameterType 能夠
控制參數類型
2. SqlSession 的selectList()和selectOne()的第二個參數和selectMap()
的第三個參數都表示方法的參數.
2.1 示例,
People p = session.selectOne("a.b.selById",1);
System.out.println(p);
2.2 在Mapper.xml 中能夠經過#{}獲取參數
2.2.1 parameterType 控制參數類型
2.2.2 #{}獲取參數內容
2.2.2.1 使用索引,從0 開始#{0}表示第一個參數
2.2.2.2 也可使用#{param1}第一個參數
2.2.2.3 若是隻有一個參數(基本數據類型或String),mybatis
對#{}裏面內容沒有要求只要寫內容便可.
2.2.2.4 若是參數是對象#{屬性名}
2.2.2.5 若是參數是map 寫成#{key}
<select id="selById"
resultType="com.bjsxt.pojo.People"
parameterType="int">
select * from people where id=#{0}
</select>
3. #{} 和${} 的區別
3.1 #{} 獲取參數的內容支持索引獲取,param1 獲取指定位置參數,
而且SQL 使用?佔位符
3.2 ${} 字符串拼接不使用?,默認找${內容}內容的get/set 方法,如
果寫數字,就是一個數字
4. 若是在xml 文件中出現「<」 , 「>」 ,雙引號等特殊字符時可使用
XML 文件轉義標籤(XML 自身的)
4.1 <![CDATA[ 內容]]>
5. mybatis 中實現mysql 分頁寫法
5.1 ?不容許在關鍵字先後進行數學運算,須要在代碼中計算完成
後傳遞到mapper.xml 中
5.2 在java 代碼中計算
//顯示幾個
int pageSize = 2;
//第幾頁
int pageNumber = 2;
//若是但願傳遞多個參數,可使用對象或map
Map<String,Object> map = new HashMap<>();
map.put("pageSize", pageSize);
map.put("pageStart", pageSize*(pageNumber-1));
List<People> p =
session.selectList("a.b.page",map);
5.3 在mapper.xml 中代碼
<select id="page" resultType="com.bjsxt.pojo.People"
parameterType="map">
select * from people limit #{pageStart},#{pageSize}
</select>
六. typeAliases 別名
1.系統內置別名: 把類型全小寫
2.給某個類起別名
2.1 alias=」自定義」
<typeAliases>
<typeAlias type="com.bjsxt.pojo.People"
alias="peo"/>
</typeAliases>
2.2 mapper.xml 中peo 引用People 類
<select id="page" resultType="peo"
parameterType="map">
select * from people limit #{pageStart},#{pageSize}
</select>
3.直接給某個包下全部類起別名,別名爲類名,不區分大小寫
3.1 mybatis.xml 中配置
<typeAliases>
<package name="com.bjsxt.pojo" />
</typeAliases>
3.2 mapper.xml 中經過類名引用
<select id="page" resultType="People"
parameterType="map">
select * from people limit #{pageStart},#{pageSize}
</select>
七.MyBatis 實現新增
1. 概念複習
1.1 功能:從應用程序角度出發,軟件具備哪些功能.
1.2 業務:完成功能時的邏輯.對應Service 中一個方法
1.3 事務:從數據庫角度出發,完成業務時須要執行的SQL 集合,統
稱一個事務.
1.3.1 事務回滾.若是在一個事務中某個SQL 執行事務,但願回
歸到事務的原點,保證數據庫數據的完整性.
2. 在mybatis 中默認是關閉了JDBC 的自動提交功能
2.1 每個SqlSession 默認都是不自動提交事務.
2.2 session.commit()提交事務.
2.3 openSession(true);自動提交.setAutoCommit(true);
3. mybatis 底層是對JDBC 的封裝.
3.1 JDBC 中executeUpdate()執行新增,刪除,修改的SQL.返回值int,
表示受影響的行數.
3.2 mybatis 中<insert> <delete> <update>標籤沒有resultType 屬性,
認爲返回值都是int
4. 在openSession() 時Mybatis 會建立SqlSession 時同時建立一個
Transaction(事務對象),同時autoCommit 都爲false
4.1 若是出現異常,應該session.rollback()回滾事務.
5. 實現新增的步驟
5.1 在mapper.xml 中提供<insert>標籤,標籤沒有返回值類型
<insert id="ins" parameterType="People">
insert into people values(default,#{name},#{age})
</insert>
5.2 經過session.insert()調用新增方法
int index1 = session.insert("a.b.ins", p);
if(index1>0){
System.out.println("成功");
}else{
System.out.println("失敗");
}
八.MyBatis 實現修改
1. 在mapper.xml 中提供<update>標籤
<update id="upd" parameterType="People">
update people set name = #{name} where id = #{id}
</update>
2. 編寫代碼
People peo = new People();
peo.setId(3);
peo.setName("王五");
int index = session.update("a.b.upd", peo);
if(index>0){
System.out.println("成功");
}else{
System.out.println("失敗");
}
session.commit();
九.mybatis 實現刪除
1. 在mapper.xml 提供<delete>標籤
<delete id="del" parameterType="int">
delete from people where id = #{0}
</delete>
2. 編寫代碼
int del = session.delete("a.b.del",3);
if(del>0){
System.out.println("成功");
}else{
System.out.println("失敗");
}
session.commit();java

相關文章
相關標籤/搜索