java回顾:MyBatis开发、配置、标签、封装会话工具
目錄
1、Mybatis框架介紹
1.1 介紹
1.2 優(yōu)點
1.3 缺點?
1.4 官方網(wǎng)站及框架包下載
1.5??mybatis框架整體架構(gòu)
1.6? mybatis的ORM(Object Relational Mapping 對象關(guān)系映射 )方式?
2、?MyBatis老式入門開發(fā)(了解)
2.1 Mybatis框架的核心類
2.2?config.xml核心配置文件:?
2.3?mapper.xml映射文件:
2.4?log4j.properties配置文件:
2.5?測例及流程圖:
2.6?使用mybatis老式的開發(fā)模式弊端
3、mybatis的dao層動態(tài)代理(掌握)
3.1 核心步驟
3.2 測:建接口UserMapper、綁定接口和映射文件、獲取接口動態(tài)代理對象完成查詢
3.3 在3.2基礎(chǔ)上測試mybatis的dao層動態(tài)代理
3.4??mybatis的dao層動態(tài)代理查詢-原理
3.5?mybatis動態(tài)代理小結(jié)
4、mybatis核心配置
4.1 properties(屬性)定義全局變量
4.2?settings(設(shè)置)標(biāo)簽駝峰映射、延時加載
4.3?typeAliases標(biāo)簽類型別名
4.4?typeAliases標(biāo)簽內(nèi)置別名
4.5?environments?標(biāo)簽配置環(huán)境
4.6?mappers 標(biāo)簽映射器
5、myBatis增刪改測例
5.1 insert標(biāo)簽
5.2 update標(biāo)簽
5.3 delete標(biāo)簽
5.4 增刪改查標(biāo)簽
5.5 mybatis.xml核心配置文件(完整標(biāo)簽示例)
6、mybatis會話工具
1、Mybatis框架介紹
1.1 介紹
mybatis框架是對JDBC進行封裝,解決了dao層的問題。
?? ?mybatis是Apache軟件基金會下的一個開源項目,前身是iBatis框架。2010年這個項目由apache 軟件基金會遷移到google code下,改名為mybatis。2013年11月又遷移到了github(GitHub 是一個面向開源及私有 軟件項目的托管平臺)。
?? ?MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射(多表)。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集。它對 jdbc 的操作數(shù)據(jù)庫的過程進行封裝,使開發(fā)者只需要關(guān)注 SQL 本身,而不需要花費精力去處理例如注冊驅(qū)動、創(chuàng)建 connection、創(chuàng)建 statement、手動設(shè)置參數(shù)、結(jié)果集檢索等 jdbc 繁雜的過程代碼。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生類型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 對象)為數(shù)據(jù)庫中的記錄。 ?
1.2 優(yōu)點
簡單易學(xué):mybatis本身就很小且簡單。沒有任何第三方依賴,最簡單安裝只要兩個jar文件+配置幾個SQL映射文件即可。
使用靈活:Mybatis不會對應(yīng)用程序或者數(shù)據(jù)庫的現(xiàn)有設(shè)計強加任何影響。SQL語句寫在XML里,便于統(tǒng)一管理和優(yōu)化。
解除SQL與程序代碼的耦合:通過提供DAO層,將業(yè)務(wù)邏輯和數(shù)據(jù)訪問邏輯分離,使系統(tǒng)的設(shè)計更清晰,更易維護,更易進行單元測試。SQL語句和代碼的分離,提高了可維護性
1.3 缺點?
編寫SQL語句時工作量很大,尤其是字段多、關(guān)聯(lián)表多時,更是如此。
SQL語句依賴于數(shù)據(jù)庫,導(dǎo)致數(shù)據(jù)庫移植性差,不能更換數(shù)據(jù)庫。
Mybatis框架還是比較簡陋(半自動化框架),功能尚有缺失,雖然簡化了數(shù)據(jù)綁定代碼,但是整個底層數(shù)據(jù)庫查詢實際還是自己寫,工作量比較大,且不太容易適應(yīng)快速數(shù)據(jù)庫修改。
1.4 官方網(wǎng)站及框架包下載
官網(wǎng)地址:mybatis – MyBatis 3 | Introduction
1.5??mybatis框架整體架構(gòu)
1.6? mybatis的ORM(Object Relational Mapping 對象關(guān)系映射 )方式?
Mybatis有兩種映射方式:
????????1.通過XML映射;
????????2.通過注解;
2、?MyBatis老式入門開發(fā)(了解)
2.1 Mybatis框架的核心類
SqlSessionFactoryBuilder 會話工廠構(gòu)建類 主要用來構(gòu)建會話工廠的 SqlSessionFactory :會話工廠類 主要用來生產(chǎn)會話對象的; SqlSession:會話對象,底層是對Connection連接對象的封裝;數(shù)據(jù)準備
數(shù)據(jù)庫 create table user (id int primary key auto_increment,username varchar(20) not null,birthday date,sex char(1) default '男',address varchar(50) ); insert into user values (null, '大猩猩','1980-10-24','男','湘北高中三年'); insert into user values (null, '櫻木花道','1992-11-12','男','湘北高中一年'); insert into user values (null, '流川楓','1983-05-20','男','湘北高中一年'); insert into user values (null, '宮城良田','1995-03-22','男','湘北高中二年'); insert into user values (null, '三井壽','1980-10-24','男','湘北高中三年'); insert into user values (null, '井上彩子','1995-03-22','女','湘北高中二年'); insert into user values (null, '赤木晴子','1995-03-22','女','湘北高中一年'); 用戶類 public class User {private Integer id;private String username;private Date birthday;private String sex;private String address; }2.2?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ù)據(jù)庫環(huán)境--><environment id="development"><transactionManager type="JDBC"/><!--數(shù)據(jù)源--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/test0908"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!--引入映射文件--><mappers><mapper resource="mapper/UserMapper.xml"/></mappers> </configuration>2.3?mapper.xml映射文件:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="hhy.UserMapper"><!--命名空間--><!--resultType結(jié)果類型:寫實體類路徑(將查詢出的數(shù)據(jù)轉(zhuǎn)換為User對象)--><!--執(zhí)行語句時使用:命名空間名.id,如hhy.UserMapper.findUserById--><select id="findUserById" resultType="hhy.pojo.User">select * from user where id = #{id}</select> </mapper>2.4?log4j.properties配置文件:
可將詳細信息輸出到控制臺,例:sql語句、參數(shù)、JDBC連接、autocommit事務(wù)狀態(tài)等。
### 設(shè)置Logger輸出級別和輸出目的地 ### log4j.rootLogger=debug, stdout ### 把日志信息輸出到控制臺 ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout2.5?測例及流程圖:
//myBatis查詢@Testpublic void t10() throws SQLException, IOException {//加載核心配置文件,構(gòu)建會話工廠String resource="mybatis-config.xml";//路徑名字正確可以直接點擊進入xmlInputStream rs = Resources.getResourceAsStream(resource);SqlSessionFactory build = new SqlSessionFactoryBuilder().build(rs);//獲取會話對象SqlSession sqlSession = build.openSession();//調(diào)用查詢api//第一個參數(shù)為mapper.xml中的命名空間名.sql的id,第二個參數(shù)為想要查詢的數(shù)據(jù)庫中數(shù)據(jù)idUser user = sqlSession.selectOne("hhy.UserMapper.findUserById",1);System.out.println("user = " + user);sqlSession.close();rs.close();}?2.6?使用mybatis老式的開發(fā)模式弊端
1)要使用指定的sql必須使用命名空間.id進行字符串拼接,維護性比較差; 2)并且這個sql用多少次,就拼接多少次,維護性比較差;3、mybatis的dao層動態(tài)代理(掌握)
?3.1 核心步驟
Mybatis存在2種開發(fā)方式: 1)舊版本mybatis執(zhí)行的方式(了解即可); 2)動態(tài)代理實現(xiàn)操縱數(shù)據(jù)庫(掌握);核心步驟 1)接口與xml映射文件綁定;接口名稱與xml映射文件命名空間要一致;接口方法與xml中crud標(biāo)簽ID要一致; 2)通過SqlSession獲取代理對象;eg:sqlSession.getMapper(接口);3.2 測:建接口UserMapper、綁定接口和映射文件、獲取接口動態(tài)代理對象完成查詢
推薦idea安裝插件MyBatisX小鳥,可以在接口和映射文件間跳轉(zhuǎn)?
?1)新建接口 UserMapper
public interface UserMapper {/*** 根據(jù)用戶id查詢用戶信息* @param id*/User findUserById(Integer id); }2)將接口和映射文件綁定,在映射文件中書寫SQL語句
命名空間:此處為UserMapper接口的全限定名,路徑正確可以跳轉(zhuǎn)
此處id要與UserMapper接口中對應(yīng)方法名一致,MyBatisX可以直接跳轉(zhuǎn)
resultType結(jié)果類型:寫實體類路徑(將查詢出的數(shù)據(jù)轉(zhuǎn)換為User對象)
?3.3 在3.2基礎(chǔ)上測試mybatis的dao層動態(tài)代理
//myBatis的dao層動態(tài)代理查詢@Testpublic void t2() throws SQLException, IOException {//加載核心配置文件,構(gòu)建會話工廠String resource="mybatis-config.xml";//路徑名字正確可以直接點擊進入xmlInputStream rs = Resources.getResourceAsStream(resource);SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(rs);//獲取會話對象SqlSession sqlSession = ssf.openSession();//獲取接口代理對象UserMapper mapper = sqlSession.getMapper(UserMapper.class);//調(diào)用方法根據(jù)id查詢單個數(shù)據(jù)User user = mapper.findUserById(1);System.out.println("user = " + user);sqlSession.close();rs.close();}3.4??mybatis的dao層動態(tài)代理查詢-原理
?3.5?mybatis動態(tài)代理小結(jié)
1)導(dǎo)入依賴的jar mybatis.jar jdbc驅(qū)動包 log4j.jar 2)定義pojo類型; 3)定義操縱pojo類的接口 4)定義xml映射文件,然后與接口進行綁定4.1 xml的命名空間與接口的全限定名稱要一致;4.2 xml中的crud的標(biāo)簽id與接口中的方法名稱要一致; 5)配置核心配置文件 (1.配置數(shù)據(jù)源 2.加載xml映射文件) 6)通過SqlSessionFactoryBuilder類加載核心配置文件,構(gòu)建會話工廠; 7)通過會話工廠獲取會話對象; 8)通過會話對象調(diào)用getMapper(接口.class)獲取代理對象(正常使用接口完成數(shù)據(jù)庫的操作) 9)釋放資源,關(guān)閉連接(session.close())4、mybatis核心配置
????????mybatis-config.xml,是MyBatis的全局配置文件,包含全局配置信息,如數(shù)據(jù)庫連接參數(shù)、插件等。整個框架中只需要一個即可。 ?
參考:https://mybatis.org/mybatis-3/zh/configuration.html
?說明:上述標(biāo)簽在實際使用過程中,要嚴格遵循使用順訊,否則報錯;
4.1 properties(屬性)定義全局變量
1、通過子標(biāo)簽property設(shè)置屬性,內(nèi)部定義(不推薦);
2、加載外部的java資源文件(properties文件),外部引用(掌握);
?1)兩種使用<properties>標(biāo)簽的方式
方式1(了解即可): 1、通過properties的子標(biāo)簽設(shè)置屬性; 2、使用${key}獲取設(shè)置的屬性值;方式2(掌握): 1.通過properties標(biāo)簽 resource屬性引入加載外部properties文件?2)練習(xí)
方式1配置mayBatis-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><properties><!--此處name對應(yīng)dataSource標(biāo)簽中的value,使用${}獲取值--><property name="driverClass" value="com.mysql.jdbc.Driver"/><property name="dburl" value="jdbc:mysql://127.0.0.1:3306/test0908"/><property name="username" value="root"/><property name="passwd" value="123456"/></properties><environments default="development"><!--配置數(shù)據(jù)庫環(huán)境--><environment id="development"><transactionManager type="JDBC"/><!--數(shù)據(jù)源--><dataSource type="POOLED"><property name="driver" value="${driverClass}"/><property name="url" value="${dburl}"/><property name="username" value="${username}"/><property name="password" value="${passwd}"/></dataSource></environment></environments><!--引入映射文件--><mappers><mapper resource="hhy/mapper/UserMapper.xml"/></mappers> </configuration>方式2配置mayBatis-config.xml(掌握)
創(chuàng)建jdbc.properties文件
##配置參數(shù) jdbc.driverClass=com.mysql.jdbc.Driver jdbc.dburl=jdbc:mysql://127.0.0.1:3306/test0908 jdbc.userName=root jdbc.password=123456?引入jdbc.properties文件,直接取其中的值。
<?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><!-- 引入外部的properties文件 --><properties resource="jdbc.properties"/><environments default="development"><!--配置數(shù)據(jù)庫環(huán)境--><environment id="development"><transactionManager type="JDBC"/><!--數(shù)據(jù)源--><dataSource type="POOLED"><!--加載引入外部的properties文件的value值--><property name="driver" value="${jdbc.driverClass}"/><property name="url" value="${jdbc.dburl}"/><property name="username" value="${jdbc.userName}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!--引入映射文件--><mappers><mapper resource="hhy/mapper/UserMapper.xml"/></mappers> </configuration>4.2?settings(設(shè)置)標(biāo)簽駝峰映射、延時加載
settinngs是 MyBatis 中極為重要的調(diào)整設(shè)置,它們會改變 MyBatis 的運行時行為。
????????settings參數(shù)有很多,先測試駝峰匹配mapUnderscoreToCamelCase,就是映射下劃線到駝峰式命名。
數(shù)據(jù)準備:修改數(shù)據(jù)庫username字段名稱為user_name,并建立與pojo映射關(guān)系,配置駝峰映射,若不配置就拿不到相應(yīng)字段值。
-- 修改字段sql alter table user change username user_name varchar(30); public class User {//表:user_name --->類:userName/usernameprivate String username;...; }開啟駝峰映射,且settings標(biāo)簽要在properties標(biāo)簽后不然報錯。
<?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><!-- 引入外部的properties文件 --><properties resource="jdbc.properties"/><!--開啟駝峰映射--><settings><!--作用:表:user_name 類:userName/username 自動映射--><setting name="mapUnderscoreToCamelCase" value="true"/></settings><environments default="development">...</environments><!--引入映射文件--><mappers><mapper resource="hhy/mapper/UserMapper.xml"/></mappers> </configuration>4.3?typeAliases標(biāo)簽類型別名
????????類型別名是給類的全限定名稱(包名.類名) 取一個短名稱。存在的意義僅在于用來減少類完全限定名的冗余。
?可以通過設(shè)置一些短名來代替全限定名,有兩種方式:
但是使用typeAliases標(biāo)簽會和有些idea插件沖突,導(dǎo)致mapper.xml及mapper.java中的某部分爆紅,能運行但是比較惡心,想解決需卸載free mab...插件。
例:
mybatis.xml
省略... <configuration><!-- 引入外部的properties文件 --><properties resource="jdbc.properties"/><!--開啟駝峰映射--><settings><!--作用:表:user_name 類:userName/username 自動映射--><setting name="mapUnderscoreToCamelCase" value="true"/></settings><typeAliases><!--方式1:取別名,逐個取別名--> <!-- <typeAlias type="hhy.pojo.User" alias="user"/>--><!--如果有其他類,繼續(xù)書寫,比較麻煩--><!--方式2:package name指定要取別名的包名,為包下所有類自動取別名--><package name="hhy.pojo"/></typeAliases><environments default="development">省略...</environments><!--引入映射文件--><mappers><mapper resource="hhy/mapper/UserMapper.xml"/></mappers> </configuration>mapper.xml:
<mapper namespace="hhy.mapper.UserMapper"><!--此處id要與UserMapper接口中對應(yīng)方法名一致,MyBatisX可以直接跳轉(zhuǎn)--><!--resultType結(jié)果類型:寫實體類路徑(將查詢出的數(shù)據(jù)轉(zhuǎn)換為User對象)--><select id="findUserById" resultType="User"><!--結(jié)果類型自動生成,user/User都均可-->select id,user_name,birthday,sex,address from user where id = #{id}</select> </mapper>4.4?typeAliases標(biāo)簽內(nèi)置別名
????????常見的 Java 類型內(nèi)建的相應(yīng)的類型別名。均不區(qū)分大小寫,注意對基本類型名稱重復(fù)采取的特殊命名風(fēng)格。
????????基本類型別名是_基本類型名稱(不加_也可以),包裝類型別名時包裝類首字母小寫(大寫也可以);
| _byte | byte |
| _long | long |
| _short | short |
| _int | int |
| _integer | int |
| _double | double |
| _float | float |
| _boolean | boolean |
| string | String |
| byte | Byte |
| long | Long |
| short | Short |
| int | Integer |
| integer | Integer |
| double | Double |
| float | Float |
| boolean | Boolean |
| date | Date |
| decimal | BigDecimal |
| bigdecimal | BigDecimal |
| object | Object |
| map | Map |
| hashmap | HashMap |
| list | List |
| arraylist | ArrayList |
| collection | Collection |
| iterator | Iterator |
測例:根據(jù)id查詢用戶姓名返回String類型、根據(jù)name查詢用戶id返回int類型。
mapper.xml:
省略... <mapper namespace="hhy.mapper.UserMapper"><!--resultType結(jié)果類型:包裝類首字母小寫--><select id="getNameById" resultType="String"><!--string、String均可-->select user_name from user where id = #{id}</select><!--resultType結(jié)果類型:基本類型加‘_’--><select id="getIdByName" resultType="int"><!--_int、int、Int均可-->select id from user where user_name = #{userName}</select> </mapper> @Testpublic void t3() throws SQLException, IOException {//加載核心配置文件,構(gòu)建會話工廠InputStream rs = Resources.getResourceAsStream("mybatis03.xml");SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(rs);//獲取會話對象SqlSession sqlSession = ssf.openSession();//獲取接口代理對象UserMapper mapper = sqlSession.getMapper(UserMapper.class);//調(diào)用方法根據(jù)id查詢單個數(shù)據(jù)System.out.println("name = " + mapper.getNameById(1));System.out.println("櫻木花道 = " + mapper.getIdByName("櫻木花道"));sqlSession.close();rs.close();}4.5?environments?標(biāo)簽配置環(huán)境
MyBatis 可以配置成適應(yīng)多種環(huán)境,如開發(fā)、測試和生產(chǎn)環(huán)境需要有不同的配置; 但每個 SqlSessionFactory 實例只能選擇其一,需進行選擇。實際使用場景下,更多的是選擇使用spring來管理數(shù)據(jù)源,來做到環(huán)境的分離。 父標(biāo)簽: environments(環(huán)境配置)子標(biāo)簽:environment(環(huán)境變量)transactionManager(事務(wù)管理器)dataSource(數(shù)據(jù)源)例:
xml配置多環(huán)境數(shù)據(jù)源,指定development為默認環(huán)境運行,在SqlSessionFactoryBuilder的build方法下指定要切換數(shù)據(jù)源的標(biāo)識,覆蓋默認配置build(rs, "test"),選用test環(huán)境。
省略... <configuration><!-- 引入外部的properties文件 --><properties resource="jdbc.properties"/><!--開啟駝峰映射--><settings><!--作用:表:user_name 類:userName/username 自動映射--><setting name="mapUnderscoreToCamelCase" value="true"/></settings><typeAliases><!--方式2:package name指定要取別名的包名,為包下所有類自動取別名--><package name="hhy.pojo"/></typeAliases><!--現(xiàn)有三個環(huán)境,默認development--><environments default="development"><!--配置數(shù)據(jù)庫環(huán)境--><environment id="development">省略...</environment><environment id="test"><transactionManager type="JDBC"/><!--數(shù)據(jù)源--><dataSource type="POOLED"><!--加載引入外部的properties文件的value值--><property name="driver" value="${jdbc.driverClass}"/><property name="url" value="${jdbc.dburl}"/><property name="username" value="${jdbc.userName}"/><property name="password" value="${jdbc.password}"/></dataSource></environment><environment id="online">省略...</environment></environments>省略... </configuration>代碼:
@Testpublic void t3() throws SQLException, IOException {//加載核心配置文件,構(gòu)建會話工廠String resource = "mybatis04.xml";//路徑名字正確可以直接點擊進入xmlInputStream rs = Resources.getResourceAsStream(resource);//不指定就走默認數(shù)據(jù)源 // SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(rs);//在build方法下指定要切換數(shù)據(jù)源的標(biāo)識,覆蓋默認配置SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(rs, "test");//獲取會話對象SqlSession sqlSession = ssf.openSession();//獲取接口代理對象UserMapper mapper = sqlSession.getMapper(UserMapper.class);//調(diào)用方法final int 櫻木花道 = mapper.getIdByName("櫻木花道");System.out.println("櫻木花道 = " + 櫻木花道);sqlSession.close();rs.close();}4.6?mappers 標(biāo)簽映射器
mappers(映射器):UserMapper.xml====>UserMapper.java接口關(guān)聯(lián)。
作用:維護接口和映射文件之間的關(guān)系.使用方式: 1、加載XML映射文件,關(guān)聯(lián)UserMapper.java接口 【1】<mapper resource="UserMapper.xml"/> 從src下加載映射文件; 【2】<mapper url=""/> 從本地磁盤中加載映射文件,但是需要添加file:///協(xié)議 說明:如果項目采用基于xml的開發(fā)模式,建議使用方式1開發(fā);2、加載接口,關(guān)聯(lián)映射文件 條件:1、接口名和映射文件名保持一致;2、路徑保持一致; 【3】class:加載單獨的接口:<mapper class="hhy.mapper.UserMapper"/> 【4】批量加載class:<package name="hhy.mapper"/> 說明:如果基于注解開發(fā)的開發(fā)的話,推薦使用方式4開發(fā)推薦:
<mappers><!--通過resource屬性加載工程下相對路徑下的映射文件--><mapper resource="mapper/UserMapper.xml"/></mappers><!--package表示通過掃包加載接口,然后獲取接口名稱,就獲取了xml映射文件名稱name屬性指定接口的路徑--><package name="hhy.mapper"/>前提條件: 1.接口與映射文件名稱必須相同; 2.接口與映射文件路徑必須相同; 3.映射文件中的namespace必須與接口的全限定名稱一致;5、myBatis增刪改測例
5.1 insert標(biāo)簽
| id | 這條SQL語句的唯一標(biāo)識,和接口的方法名一致 | 是 |
說明:#{username},#{birthday},#{sex},#{address} 大括號里面的值必須和pojo的實體類User類中的屬性名一致,否則會報錯。
注意事項:Mybatis默認事務(wù)手動提交,可設(shè)置事務(wù)自動提交:
SqlSession sqlSession = sqlSessionFactory.openSession(true);
5.2 update標(biāo)簽
| id | SQL語句的唯一標(biāo)識,和接口的方法名一致 | 是 |
5.3 delete標(biāo)簽
| id | SQL語句的唯一標(biāo)識,和接口的方法名一致 | 是 |
5.4 增刪改查標(biāo)簽
1.select<select id="對應(yīng)接口中的方法名" resultType="pojo名默認首字符小寫/_基本類型/jdk對象類型小寫">select * from table where id=#{任意變量}</select> 2.insert<insert id="xx">insert into table values(null,#{對應(yīng)pojo中屬性名稱},....)</insert> 3.update<update id="xxx">update table set 字段1=#{對應(yīng)pojo中屬性名稱},.... where id=#{id}</update> 4.delete<delete id="xxx">delete from table where id=#{id}</delete>5.5 mybatis.xml核心配置文件(完整標(biāo)簽示例)
<?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><!-- 引入外部的properties文件 --><properties resource="jdbc.properties"/><!--開啟駝峰映射--><settings><!--作用:表:user_name 類:userName/username 自動映射--><setting name="mapUnderscoreToCamelCase" value="true"/></settings><typeAliases><!--方式1:取別名,逐個取別名--> <!-- <typeAlias type="hhy.pojo.User" alias="user"/>--><!--如果有其他類,繼續(xù)書寫--><!--方式2:package name指定要取別名的包名,為包下所有類自動取別名--><package name="hhy.pojo"/></typeAliases><!--現(xiàn)有三個環(huán)境,默認development--><environments default="development"><!--配置數(shù)據(jù)庫環(huán)境--><environment id="development"><transactionManager type="JDBC"/><!--數(shù)據(jù)源--><dataSource type="POOLED"><!--省略...--></dataSource></environment><environment id="test"><transactionManager type="JDBC"/><dataSource type="POOLED"><!--加載引入外部的properties文件的value值--><property name="driver" value="${jdbc.driverClass}"/><property name="url" value="${jdbc.dburl}"/><property name="username" value="${jdbc.userName}"/><property name="password" value="${jdbc.password}"/></dataSource></environment><environment id="online"><transactionManager type="JDBC"/><dataSource type="POOLED"><!--省略...--></dataSource></environment></environments><!--引入映射文件--><mappers><mapper resource="hhy/mapper/UserMapper.xml"/></mappers> </configuration>6、mybatis會話工具
public class MyBatisUtil {//全局維護一個會話工廠private static SqlSessionFactory ssf;private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<>();//在靜態(tài)代碼塊中加載mybatis核心配置文件,初始化SqlSessionFactorystatic {String resource = "mybatis03.xml";InputStream inputStream = null;try {inputStream = Resources.getResourceAsStream(resource);} catch (IOException e) {e.printStackTrace();}ssf = new SqlSessionFactoryBuilder().build(inputStream);}//封裝獲取動態(tài)代理對象的方法public static <T>T getMapper(Class<T> tClass) {//獲取會話對象SqlSession sqlSession = getSqlSession();//獲取接口代理對象T mapper = sqlSession.getMapper(tClass);return mapper;}//獲取sqlSession對象public static SqlSession getSqlSession() {SqlSession sqlSession = threadLocal.get();if (sqlSession==null){sqlSession = ssf.openSession();//放回線程中 通過threadLocal為每一個線程都維護一個私有的會話對象,防止出現(xiàn)并發(fā)問題threadLocal.set(sqlSession);}return sqlSession;}//關(guān)閉資源public static void close() {//關(guān)閉會話對象SqlSession sqlSession = threadLocal.get();if (sqlSession!=null){sqlSession.close();}}//事務(wù)提交public static void commit() {SqlSession sqlSession = threadLocal.get();if (sqlSession!=null){sqlSession.commit();}}//事務(wù)回滾public static void rollback(){SqlSession sqlSession = threadLocal.get();if(sqlSession!=null){sqlSession.rollback();}} }總結(jié)
以上是生活随笔為你收集整理的java回顾:MyBatis开发、配置、标签、封装会话工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用爬虫在网站上无限制的批量爬取图片
- 下一篇: 基于msf与badusb的笔记本电脑渗透