




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1 第1章 Mybatis入門框架程序設(shè)計(Java)2學(xué)習(xí)目標認識數(shù)據(jù)庫編程框架mybatis1搭建第一個使用mybatis框架的程序2理解mybatis框架的運行流程3為mybatis框架配置日志41.認識mybatisMyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。4 1.認識mybat
2、is最早:iBATIS=“internet”+“abatis”的組合,本是apache的一個開源項目然后:跳槽到谷歌,從iBatis變成了MyBatis現(xiàn)在:從google code到Github目前提供了三種語言實現(xiàn)的版本,包括:Java、.NET以及Ruby5 1.認識mybatis框架的好處1、高重用MyBatis相當靈活,不會對應(yīng)用程序或者數(shù)據(jù)庫的現(xiàn)有設(shè)計強加任何影響,SQL寫在XML里,從程序代碼中徹底分離,降低耦合度,便于統(tǒng)一管理和優(yōu)化,并可重用2、高效率小巧并且簡單易學(xué),減少了50%以上的代碼量。3、高性能MyBatis 支持數(shù)據(jù)庫連接池,消除了為每一個請求創(chuàng)建一個數(shù)據(jù)庫連接的開
3、銷。MyBatis 提供了內(nèi)建的緩存機制,在 SqlSession 級別提供了對 SQL 查詢結(jié)果的緩存。 6 1.認識mybatis-特點1、開源的優(yōu)秀持久層框架2、SQL語句與代碼分離3、面向配置的編程4、良好支持復(fù)雜數(shù)據(jù)映射5、動態(tài)SQL7 2.回顧jdbc編程-簡單查詢 創(chuàng)建student表結(jié)構(gòu)并初始數(shù)據(jù):8 回顧jdbc編程實施步驟加入驅(qū)動程序mysql-connector-java-5.1.7-bin.jar在java的測試類的main方法中寫入關(guān)鍵代碼/第0步,準備連接參數(shù)String URL = jdbc:mysql:/localhost:3306/mydb;/數(shù)據(jù)庫連接的地址
4、String LOGIN = root;/登錄數(shù)據(jù)庫的用戶名String PASSWORD = root;/登錄數(shù)據(jù)庫的密碼String DRIVERNAME=com.mysql.jdbc.Driver;/數(shù)據(jù)庫驅(qū)動名/第一步,加載驅(qū)動程序Class.forName(DRIVERNAME);/第二步,連接數(shù)據(jù)庫Connection conn = DriverManager.getConnection(URL,LOGIN,PASSWORD);/第三步,創(chuàng)建用于執(zhí)行sql語句的對象Statement st = conn.createStatement();/第4步:執(zhí)行sql語句String sq
5、l=select * from user;/第4.1步:編寫sql語句ResultSet rs = st.executeQuery(sql);/第4.2步:運行sql語句while (rs.next() /第4.3步,處理執(zhí)行結(jié)果String stuId=rs.getString(stuId);String stuName=rs.getString(stuName);System.out.println(id:+stuId+ name:+stuName);/第五步:關(guān)閉數(shù)據(jù)庫conn.close();9 分析jdbc程序該程序在某些情況下是有缺陷的,造成維護困難數(shù)據(jù)庫連接參數(shù)經(jīng)常發(fā)生變化編寫復(fù)
6、雜,效率不高sql語句經(jīng)常發(fā)生變化程序性能不高怎么解決呢?引入框架2第一個MyBatis程序-任務(wù)描述例子2:對上述程序引入框架進行改造10 2第一個MyBatis程序-導(dǎo)包下載/mybatis/mybatis-3/releases122搭建mybatis程序-運行環(huán)境搭建加入相關(guān)的jar包mybatis框架:mybatis-xxx.jarmysql數(shù)據(jù)庫:mysql-connector-java-xxx-bin.jar建立表并導(dǎo)入樣本數(shù)據(jù)CREATE TABLE student ( stuId int(10) NOT NULL AUTO_INCREMENT, stuName varchar(
7、50) DEFAULT NULL, PRIMARY KEY (stuId) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;INSERT INTO student VALUES (1, zhangsan);INSERT INTO student VALUES (2, lisi);INSERT INTO student VALUES (3, wangwu);maven依賴 org.mybatis mybatis 3.5.0 mysql mysql-connector-java 5.1.30 132搭建mybatis程序-xml文件編寫sql
8、語句配置文件StudentMapper.xml(在com/test/mapper中)文件頭142搭建mybatis程序-xml文件編寫sql語句配置文件StudentMapper.xml (在com/test/mapper中)文件體SELECT * FROM student 152搭建mybatis程序-xml文件編寫在類路徑下配置基本配置文件mybatis-config.xml文件頭162搭建mybatis程序-xml文件編寫基本配置文件mybatis-config.xml(在src目錄中)172搭建mybatis程序-java代碼編寫在app.Test類的main方法中加入如下代碼/1.得
9、到數(shù)據(jù)庫連接InputStream inputStream = Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);/2.得到執(zhí)行sql的對象SqlSession sqlSession = sqlSessionFactory.openSession();/3.執(zhí)行sql語句List list = sqlSession.selectList(selectStudent);/4
10、.輸出結(jié)果for (Map map : list) System.out.println(map);/5.關(guān)閉數(shù)據(jù)庫sqlSession.close();18 3mybatis框架運行后的反思0. sqlSession?類似 JDBC生成的Connection對象的SqlSession對象,這樣才能與數(shù)據(jù)庫開啟“溝通”,通過SqlSession可以實現(xiàn)增刪改查。1.得到數(shù)據(jù)庫連接sqlSession1.1加載基本配置文件mybatis-config.xml同時關(guān)聯(lián)加載StudentMapper.xml映射器1.2創(chuàng)建數(shù)據(jù)庫連接對象sqlSessionFactory2.得到執(zhí)行sql的對象sql
11、Session3.使用sqlSession合適的方法傳入ID(selectStudent)執(zhí)行已經(jīng)加載了的sql映射配置文件StudentMapper.xml中指定的sql語句(selectStudent)4.執(zhí)行結(jié)果映射(List)處理5.關(guān)閉數(shù)據(jù)庫連接對象sqlSession204為mybatis框架配置日志-理由為什么要配置日志記錄系統(tǒng)運行狀況便于控制程序的輸出(DEBUG,INFO,WARN,ERROR,FATAL)mybatis支持日志系統(tǒng)Log4jSLF4JApache Commons Logging Log4j2 JDK logging 214為mybatis框架配置日志-Log
12、4J引入日志的jar包在mybatis/lib里或/log4j-1.2.17.jarmaven依賴 log4j log4j 1.2.17 224為mybatis框架配置日志-Log4J在src目錄中添加perties文件在文件中加入以下代碼(在控制臺打印出mybatis執(zhí)行的sql信息)log4j.rootLogger=DEBUG, Console#Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout
13、 log4j.appender.Console.layout.ConversionPattern=%d %t %-5p %c - %m%n #靈活控制日志的輸出#.apache=DEBUG 234為mybatis框架配置日志-用法Logger logger = Logger.getLogger(Test.class);(Object message);/輸出日志24255進階作業(yè)搭建第一個Maven 方式mybatis程序,查詢信息表user所有記錄。表名user(信息表)字段2個id 學(xué)號 int 自動增長主鍵name 姓名 字符串 8位 非空要求用mybatis框架,
14、mysql數(shù)據(jù)庫,查詢該表的所有記錄并輸出,同時在控制臺打印出日志信息和log4j輸出數(shù)據(jù)。6小結(jié)這本套課程中我們學(xué)習(xí)了MyBatis。你應(yīng)當掌握了以下知識能力:MyBatis是什么?有什么用最簡單的MyBatis應(yīng)用mybatis的運行流程是怎么樣的配置日志有啥用?如何配置26附:maven環(huán)境方式pom.xml 4.0.0 com.test mybatisdemo 0.0.1-SNAPSHOT jar mybatisdemo UTF-8 junit junit 3.8.1 test org.mybatis mybatis 3.5.0 mysql mysql-connector-java 5
15、.1.30 log4j log4j 1.2.17 第2章 Mybatis基礎(chǔ)操作28框架程序設(shè)計(Java)學(xué)習(xí)目標29mybatis的簡單查詢2配置mybatis1mybatis映射器21.配置mybatis-配置方式MyBatis的XML配置文件包含了影響MyBatis行為甚深的設(shè)置和屬性信息.1.使用XML方式配置MyBatis(如: mybatis-config.xml )2.使用Java API方式配置MyBatis配置mybatis- MyBatis配置文件結(jié)構(gòu)MyBatis配置文件中,在標簽configuration下有多個子標簽,其層次結(jié)構(gòu)如下:configuration| p
16、roperties(屬性)| settings(全局配置參數(shù))| typeAliases(類型別名)| typeHandlers(類型處理器)| environments(環(huán)境集合屬性對象)| |environment(環(huán)境配置)| | | transactionManager(事務(wù)管理)| | |dataSource(數(shù)據(jù)源)| mappers(映射器)| objectFactory(對象工廠)| plugins(插件)配置mybatis-屬性properties屬性配置元素可以將配置值具體化到一個屬性文件中,并且使用屬性文件的name名作為占位符。如:我們將數(shù)據(jù)庫連接屬性具體化到文件中pe
17、rties之后就可以在mybatis-config.xml文件中為屬性使用perties文件中定義的占位符和使用配置了的屬性:jdbc.driver = com.mysql.jdbc.Driverjdbc.url = jdbc:mysql:/mydb?characterEncoding=utf8jdbc.username = rootjdbc.password = root2.mybatis映射器-配置方式MyBatis真正強大之處就在它的映射語句上,如果比較SQL映射配置與JDBC代碼,可以發(fā)現(xiàn),使用SQL映射配置可以節(jié)省很大的代碼量。MyBatis映射配置主要被用來創(chuàng)建SQL語句,但又給自
18、己的實現(xiàn)預(yù)留有極大的空間。在代碼里直接嵌套SQL語句是很差的編碼實踐,并且維護起來也比較困難。MyBaits使用了映射器配置文件或注解來配置SQL語句,使SQL語句和代碼分離,極大地提高了代碼的后期可維護性。映射文件配置MyBatis的配置文件mybatis-config.xml在包含了節(jié)點,是MyBatis映射器。 MyBatis映射器分為三類:1、純xml映射器,利用SqlSession的各種方法實現(xiàn)增刪改查。2、xml映射器+接口映射器的混合類型。3、注解+接口映射器的混合形式。2mybatis映射器-配置標簽SQL映射XML文件MyBatis提供了一些基本的配置標簽。 cache在特定
19、的命名空間配置緩存。 cache-ref引用另外一個命名空間配置的緩存。 resultMap最復(fù)雜也是最強大的元素,用來描述如何從數(shù)據(jù)庫結(jié)果集里加載對象。 SQL能夠被其他語句重用的SQL塊。 insertinsert映射語句。 updateupdate映射語句。 deletedeleete映射語句。 selectselect映射語句。3.mybatis的簡單查詢-標簽標簽配置屬性解釋(教材P45)屬性名描述id 在這個命名空間下唯一的標識符,可被其它語句引用parameterType 傳給此語句的參數(shù)的完整類名或別名(MyBatis已經(jīng)映射了的type參照教材P19)(string,hash
20、map,自定義)resultType 語句返回值類型的完整類名或別名。注意,如果返回的是集合(collections),那么應(yīng)該是集合所包含的具體子類型,而不是集合本身。 resultType 與resultMap 不能同時使用(MyBatis已經(jīng)映射了的type參照教材P19) )(hashmap,自定義)resultMap 引用的外部定義的resultMap。結(jié)果集映射是MyBatis 中最強大的特性,同時又非常好理解。許多復(fù)雜的映射都可以輕松解決。(resultMap03MyBatis復(fù)雜查詢-關(guān)聯(lián)查詢.ppt) resultType 與resultMap不能同時使用mybatis的簡單
21、查詢-帶一個參數(shù)查詢例子2:查詢用戶信息表user中用戶名為“zhangsan”的記錄表名user(用戶信息表)字段3個Id AUTO_INCREMENT主鍵username 用戶名 字符串 10位 password 密碼 字符串 6位 非空要求用mybatis框架編程,mysql數(shù)據(jù)庫,查詢該表用戶名為zhangsan的記錄并輸出,其中數(shù)據(jù)庫的連接信息放在單獨的屬性文件properties中36mybatis的簡單查詢-帶一個參數(shù)查詢在sql語句配置文件UserMapper.xml中加入一個新的帶參數(shù)的sql語句配置:SELECT * FROM user where username=#xx
22、x說明加入一個select標簽,與前面例子并列屬性parameterType=“String” 表示sql語句有參數(shù),類型為字符串username=#xxx表示用戶名的值是來自一個變量xxx,這個變量值直接從java代碼中傳入,變量名任意命名37mybatis的簡單查詢-帶一個參數(shù)查詢在測試類中修改執(zhí)行sql語句的代碼/3.執(zhí)行sql語句List list = sqlSession.selectList(findUserByUsername,“zhangsan);說明:第一個參數(shù)對應(yīng)上頁sql配置中的id,第二個參數(shù)對應(yīng)sql語句中的參數(shù)xxx,直接傳值給xxx然后運行調(diào)試,得到一條zhang
23、san的記錄。38mybatis的簡單查詢-帶多個參數(shù)查詢例子2:查詢用戶信息表user中用戶名為“zhangsan”、密碼為“111”的記錄表名user(用戶信息表)字段3個Id AUTO_INCREMENT主鍵username 用戶名 字符串 10位 password 密碼 字符串 6位 非空要求用mybatis框架編程,mysql數(shù)據(jù)庫,查詢該表用戶名為zhangsan ,密碼為111的記錄并輸出,其中數(shù)據(jù)庫的連接信息放在單獨的屬性文件properties中.39mybatis的簡單查詢-帶一個參數(shù)查詢多參數(shù)查詢的兩種處理方式:使用map傳遞參數(shù)使用自定義實體類傳遞參數(shù)40mybatis
24、的簡單查詢-使用map傳遞參數(shù)在sql語句配置文件UserMapper.xml中加入一個新的帶參數(shù)的sql語句配置:SELECT * FROM user where username=#username and password=#password說明加入一個select標簽,與前面例子并列屬性parameterType=“hashmap” 表示sql語句有參數(shù),參數(shù)類型為hashmapusername=#username表示用戶名的值是來自map中的username鍵對應(yīng)的值password=#password與username類似41mybatis的簡單查詢-使用map傳遞參數(shù)在測試類中修
25、改執(zhí)行sql語句的代碼/3.執(zhí)行sql語句Map cnd=new HashMap();cnd.put(username, “zhangsan);cnd.put(password, “111);List list = sqlSession.selectList(findUserByMap,cnd);說明:第一個參數(shù)對應(yīng)上頁sql配置中的id,第二個參數(shù)對應(yīng)sql語句中的參數(shù)map然后運行調(diào)試,得到一條zhangsan的記錄。42mybatis簡單查詢-自定義實體類傳遞參數(shù)在sql語句配置文件UserMapper.xml中加入一個新的帶參數(shù)的sql語句配置:SELECT * FROM user w
26、here username=#username and password=#password說明加入一個select標簽,與前面例子并列屬性parameterType=“domain.User” 表示sql語句有參數(shù),類型為一個存放在domain包中的User類username=#username表示用戶名的值是來自User類中的username屬性,從java代碼中傳入的是User類的對象,然后通過對象的get方法得到對應(yīng)的username的值, password=#password與username類似43mybatis簡單查詢-自定義實體類傳遞參數(shù)在domain包下創(chuàng)建一個用戶信息類Us
27、er(每一個屬性都要有g(shù)et、set方法):public class User String username;/用戶名String password;/密碼public String getUsername() return username;public void setUsername(String username) this.username = username;public String getPassword() return password;public void setPassword(String password) this.password = password;4
28、4mybatis簡單查詢-自定義實體類傳遞參數(shù)在測試類中修改執(zhí)行sql語句的代碼/3.執(zhí)行sql語句User user=new User();user.setUsername(“zhangsan);user.setPassword(111);List list = sqlSession.selectList(findUserByUsernameAndPassword,user);說明:第一個參數(shù)對應(yīng)上頁sql配置中的id,第二個參數(shù)對應(yīng)sql語句中的參數(shù)User然后運行調(diào)試,得到一條zhangsan的記錄。45mybatis簡單查詢-自定義查詢結(jié)果例子3:查詢用戶信息表user中用戶名為“張三
29、”、密碼為“111”的記錄返回List類型,而不是hashmap類型。要求用mybatis框架編程,mysql數(shù)據(jù)庫,查詢該表所有數(shù)據(jù)集合把查詢出來的用戶名輸出,其中數(shù)據(jù)庫的連接信息放在單獨的屬性文件properties中。并且用log4j把信息輸出到文件(大于10K時換文件輸出)里面去。46mybatis簡單查詢-自定義查詢結(jié)果在sql語句配置文件UserMapper.xml中加入一個新的帶參數(shù)的sql語句配置:SELECT * FROM user 說明加入一個select標簽,與前面例子并列resultType=“domain.User”表示返回不再是默認的hashmap,而是把數(shù)據(jù)封裝到
30、domain.User類的對象中47mybatis簡單查詢-自定義查詢結(jié)果在測試類中修改執(zhí)行sql語句的代碼/3.執(zhí)行sql語句User user=new User();user.setUsername(張三);user.setPassword(111);List list = sqlSession.selectList(findNameByUserinfo,user);/4.輸出結(jié)果for (User user2 : list) System.out.println(user2.getUsername();說明:返回不再是map而是User,則可以使用對應(yīng)的get方法得到用戶名,查詢過程中結(jié)
31、果集List對象中的User是系統(tǒng)自動封裝(調(diào)用User類的set方法,若沒有set方法則會報錯)運行調(diào)試,得到記錄。48mybatis簡單查詢-查詢一條結(jié)果在測試類中修改執(zhí)行sql語句的代碼/3.執(zhí)行sql語句User user=new User();user.setUsername(張三);user.setPassword(111);/List list = sqlSession.selectList(findNameByUserinfo,user);User user2= sqlSession.selectOne(“findNameByUserinfo,user);/4.輸出結(jié)果/for
32、 (User user2 : list) System.out.println(user2.getUsername();/說明: sqlSession.selectOne是查詢一條記錄,當然程序員必須確定查詢結(jié)果最多一條。運行調(diào)試:結(jié)果應(yīng)該完全一樣49運行反思及存在的問題數(shù)據(jù)庫信息單獨抽???select id=selectStudent項目太大時重復(fù)?resultType或parameterType名稱過長問題?類型別名typeAliases類型別名是Java類型的簡稱,即Java對象的簡稱,它只是關(guān)聯(lián)到sqlMapper配置,配置完該別名后sqlMapper中就不必寫完整的Java對象名稱了
33、。為完全限定名起一個別名:批量導(dǎo)入:使用方式進階作業(yè) 新建任意一張具有5個字段以上的表,傳入多個查詢條件,查詢出多條符合條件的記錄,并用log4j debug方式逐條輸出到文件(當文件大小大于10K時換文件輸出)。要求數(shù)據(jù)庫的連接信息放在單獨的屬性文件properties中。52小結(jié)本次課程中我們學(xué)習(xí)了MyBatis的簡單查詢。你應(yīng)當掌握了以下知識/能力:1、配置mybatis1、映射器2、帶一個參數(shù)的查詢3、帶多個參數(shù)的查詢4、自定義查詢結(jié)果的數(shù)據(jù)類型(不用默認的hashmap)53第3章 Mybatis基礎(chǔ)操作54框架程序設(shè)計(Java)學(xué)習(xí)目標55數(shù)據(jù)庫事務(wù)及mybatis的事務(wù)管理1m
34、ybatis的增加、刪除、修改操作21.1 數(shù)據(jù)庫的事務(wù)在數(shù)據(jù)庫中事務(wù)是工作的邏輯單元,一個事務(wù)是由一個或多個完成一組的相關(guān)行為的SQL語句組成,通過事務(wù)機制確保這一組SQL語句所作的操作要么都成功執(zhí)行,完成整個工作單元操作,要么一個也不執(zhí)行。四大特性( ACID)原子性(Atomicity)一致性(Consistency)隔離性(Isolation)持久性 (Durability) 1.2 mybatis進行事務(wù)管理-配置回顧前面例子中mybatis-config.xml文件關(guān)鍵內(nèi)容說明紅色的部分就是mybatis的事務(wù)管理配置其中type屬性有兩個取值,JDBC表示由JDBC來進行事務(wù)管理
35、, MANAGED表示由第三方插件來管理比如以后要學(xué)習(xí)的spring框架1.3 mybatis進行事務(wù)管理-JDBC法使用JDBC的事務(wù)管理機制:利用java.sql.Connection對象完成對事務(wù)的提交、回滾、關(guān)閉。sqlSmit();sqlSession.rollback();sqlSession.close();2.1 mybatis的增、刪、改-insert 標簽(P47)屬性名描述id 在這個命名空間下唯一的標識符,可被其它語句引用。parameterType 傳給此語句的參數(shù)的完整類名或別名。useGeneratedKeys (僅限insert 語句時使用)告訴MyBatis
36、使用JDBC 的 getGeneratedKeys 方法來獲取數(shù)據(jù)庫自動生成主鍵(如: MySQL、 SQLSERVER 等關(guān)系型數(shù)據(jù)庫會有自增的字段)。默認: falsekeyProperty (僅限insert 語句時使用)設(shè)置自動生成主鍵的字段,這個字段的值由getGeneratedKeys 方法返回,或者由insert 元素的selectKey 子元素返回。默認不設(shè)置3.1 mybatis的增、刪、改-insert例子1:在用戶信息表user中插入一條記錄表名user(用戶信息表)字段2個username 用戶名 字符串 10位 主鍵password 密碼 字符串 6位 非空要求用my
37、batis框架編程,mysql數(shù)據(jù)庫,在該表中插入用戶名為 李四,密碼為 444 的記錄框架程序設(shè)計java603.1mybatis的增、刪、改-insert在sql語句配置文件UserMapper.xml中加入一個新的帶參數(shù)的sql語句配置:insert into user(username,password) values(#username,#password)說明加入一個insert(插入)標簽,與前面select標簽并列parameterType=“domain.User”表示傳入的參數(shù)不是一個簡單類型,而是把數(shù)據(jù)封裝到domain.User類的對象中#username表示用戶名的值
38、來自User類中的username屬性,從java代碼中傳入的是User類對象,然后通過username的get方法得到值,#password類似框架程序設(shè)計java613.1mybatis的增、刪、改-insert在測試類中修改執(zhí)行sql語句的代碼/3.執(zhí)行sql語句User user=new User();user.setUsername(李四);user.setPassword(444);int i=sqlSession.insert(insertUser, user);/4.結(jié)果輸出 注釋掉說明:sqlSession.insert(“insertUser”, user);是插入一條id
39、為insertUser的sql語句,傳入的插入?yún)?shù)為user對象調(diào)試執(zhí)行,發(fā)現(xiàn)數(shù)據(jù)庫中未成功增加一條數(shù)據(jù),重復(fù)執(zhí)行呢?框架程序設(shè)計java623.1mybatis的增、刪、改-insert在測試類中修改執(zhí)行sql語句的代碼sqlSmit();說明:sqlSession默認為手動提交(sqlSmit();)。調(diào)試執(zhí)行,發(fā)現(xiàn)數(shù)據(jù)庫中成功增加一條數(shù)據(jù),再重復(fù)執(zhí)行呢?框架程序設(shè)計java633.2mybatis的增、刪、改-update 標簽屬性名描述id 在這個命名空間下唯一的標識符,可被其它語句引用。parameterType 傳給此語句的參數(shù)的完整類名或別名。3.2mybatis的增、刪、改-u
40、pdate例子2:在用戶信息表user中修改一條記錄表名user(用戶信息表)字段2個username 用戶名 字符串 10位 主鍵password 密碼 字符串 6位 非空要求用mybatis框架編程,mysql數(shù)據(jù)庫,在該表中修改用戶名為李四的記錄,把密碼444修改為666框架程序設(shè)計java653.2mybatis的增、刪、改-update在sql語句配置文件UserMapper.xml中加入一個新的帶參數(shù)的sql語句配置:UPDATE user SETpassword=#passwordWHERE username = #username說明加入一個update(修改)標簽,與前面的i
41、nsert標簽并列parameterType=“domain.User”表示傳入的參數(shù)不是一個簡單類型,而是把數(shù)據(jù)封裝到domain.User類的對象中#username表示用戶名的值來自User類中的username屬性,從java代碼中傳入的是User類對象,然后通過username的get方法得到值,#password類似框架程序設(shè)計java663.2mybatis的增、刪、改-update在測試類中修改執(zhí)行sql語句的代碼/3.執(zhí)行sql語句User user=new User();user.setUsername(李四);user.setPassword(“666);int i=sq
42、lSession.update(updateUser, user);sqlSmit();說明: sqlSession.update(“updateUser”, user);是修改一條id為updateUser的sql語句,傳入的插入?yún)?shù)為user對象調(diào)試執(zhí)行,發(fā)現(xiàn)數(shù)據(jù)庫中修改成功框架程序設(shè)計java673.3mybatis的增、刪、改-delete 標簽屬性名描述id 在這個命名空間下唯一的標識符,可被其它語句引用。parameterType 傳給此語句的參數(shù)的完整類名或別名。3.3mybatis的增、刪、改-delete例子3:在用戶信息表user中刪除一條記錄表名user(用戶信息表)字段
43、2個username 用戶名 字符串 10位 主鍵password 密碼 字符串 6位 非空要求用mybatis框架編程,mysql數(shù)據(jù)庫,在該表中刪除用戶名為李四的記錄框架程序設(shè)計java693.3mybatis的增、刪、改-delete在sql語句配置文件UserMapper.xml中加入一個新的帶參數(shù)的sql語句配置:delete from user where username=#xxx說明加入一個delete(修改)標簽,與前面的update標簽并列parameterType=“string”表示傳入的參數(shù)是java中的字符串String類型,其中首字母s大小寫是一樣的#xxx表示傳
44、入的參數(shù),這里參數(shù)名只是一個形式,可任意命名框架程序設(shè)計java703.3mybatis的增、刪、改-delete在測試類中修改執(zhí)行sql語句的代碼/3.執(zhí)行sql語句/User user=new User();/user.setUsername(李四);/user.setPassword(“666);sqlSession.delete(“deleteUser”, “李四”);sqlSmit();說明: sqlSession.delete(“deleteUser”, “李四”);是刪除一條id為deleteUser的sql語句,傳入刪除的username為李四調(diào)試執(zhí)行,發(fā)現(xiàn)數(shù)據(jù)庫中刪除李四這條
45、記錄成功框架程序設(shè)計java713.4運行反思在測試類中修改執(zhí)行sql語句的代碼(標準寫法)對于一個事務(wù)里commit(),rollback(),close();都必須要用到嗎?代碼位置怎么放最合理?insert時能自動生成主鍵?框架程序設(shè)計java723.5作業(yè)用mybatis對任一張表作CRUD操作框架程序設(shè)計java733.6小結(jié)本課中我們學(xué)習(xí)了MyBatis基礎(chǔ)操作。你應(yīng)當掌握了以下知識:MyBatis增刪改操作標記、 (全換成select標簽也可以) MyBatis事務(wù)處理框架程序設(shè)計java74框架程序設(shè)計java75第4章 Mybatis復(fù)雜查詢76框架程序設(shè)計(Java)學(xué)習(xí)目
46、標77mybatis的關(guān)聯(lián)查詢2命名空間和接口綁定3自定義映射關(guān)系11自定義映射關(guān)系 標簽標簽配置屬性解釋(教材P45)屬性名描述id 在這個命名空間下唯一的標識符,可被其它語句引用parameterType 傳給此語句的參數(shù)的完整類名或別名(MyBatis已經(jīng)映射了的type參照教材P19)(string,hashmap,自定義)resultType 語句返回值類型的完整類名或別名。注意,如果返回的是集合(collections),那么應(yīng)該是集合所包含的具體子類型,而不是集合本身。 resultType 與resultMap 不能同時使用(MyBatis已經(jīng)映射了的type參照教材P19)
47、)(hashmap,自定義)resultMap 引用的外部定義的resultMap。結(jié)果集映射是MyBatis 中最強大的特性,同時又非常好理解。許多復(fù)雜的映射都可以輕松解決。(自定義resultMap) resultType 與resultMap不能同時使用1自定義映射關(guān)系-resultType回顧自定義結(jié)果集相關(guān)知識點SELECT * FROM student where stuname=#stuName and stuid=#stuId79思考:商業(yè)項目的開發(fā)中Student類由誰在什么時候生成?1自定義映射關(guān)系-resultType假設(shè)Student類結(jié)構(gòu)如下:public class
48、 Student String id;String name;public String getId() return id;public void setId(String id) this.id = id;public String getName() return name;public void setName(String name) = name;80思考:數(shù)據(jù)庫庫字段名稱與Student類中的屬性名稱不同,mybatis還能自動映射嗎?1自定義映射關(guān)系-resultType方式使用select語法:將列名取一個別名SELECT stuName as name,stuId as i
49、d FROM student where stuname=#stuName and stuid=#stuId思考:試一試設(shè)想SQL如果像Student一樣也是事先已經(jīng)寫好?811自定義映射關(guān)系-resultType方式resultType方式反思? 修改java代碼?行不通X 修改SQL?行不通X 想辦法:resultresultTyperesultMap1自定義映射關(guān)系-resultMap使用resultMap自定義映射關(guān)系 The most complicated and powerful element that describes how to load your objects fr
50、om the database result setsresultMap是Mybatis最復(fù)雜最強大的元素,它可以完成復(fù)雜的數(shù)據(jù)映射:它可以解決列名和屬性名不匹配問題;將查詢到的復(fù)雜數(shù)據(jù)(比如查詢到幾個表中數(shù)據(jù))映射到一個結(jié)果集當中。831自定義映射關(guān)系-resultMap resultMap定義 84嘗試理解:type、id、column、property、result 1自定義映射關(guān)系-resultMapresultMap標簽resultMap 屬性:id為其唯一的標識,type為需要映射的自定義實體類resultMap 子標簽:Id是作為唯一標識的,也就是主鍵column表示數(shù)據(jù)庫列名,
51、property為自定義實體類中對應(yīng)的屬性result都是用于映射單列值到一個簡單數(shù)據(jù)類型的屬性column表示數(shù)據(jù)庫列名,property為自定義實體類中對應(yīng)的屬性1自定義映射關(guān)系-resultMap resultMap使用SELECT stuId,stuName FROM student where stuname=#stuName and stuid=#stuId86課堂練習(xí)-resultMap 把user(userId,userName)表映射到User(id,name)類,使用resultMap進行結(jié)果映射1890002 2resultMap聯(lián)合查詢-目錄關(guān)聯(lián)關(guān)系1、一對一2、一對多
52、3、多對多89思考:一對多和一對一本質(zhì)關(guān)系? 多對多和一對多的本質(zhì)關(guān)系?一對一查詢實現(xiàn)-業(yè)務(wù)場景例子:查詢一學(xué)生的學(xué)籍信息,查學(xué)籍同時查出學(xué)生信息。1、表結(jié)構(gòu)分析(關(guān)聯(lián)放學(xué)生上還是學(xué)籍上?)2、實體怎么定義(一個?兩個?定義方式)(Student和SchoolRoll)public class Student .public class SchoolRoll .Student student;一對一查詢實現(xiàn)(P57)1、簡單方式(圓點記法) (/) (SQL用xx left/right (outer) join xx on 形式來關(guān)聯(lián)出數(shù)據(jù))2、嵌套resultMap () (SQL用xx l
53、eft/right (outer) join xx on 形式來關(guān)聯(lián)出數(shù)據(jù))3、嵌套查詢語句 () (SQL做兩次單表查詢) 一對多查詢實現(xiàn)-業(yè)務(wù)場景例子:查詢一學(xué)生的書籍信息,查書籍同時查出學(xué)生信息。1、表結(jié)構(gòu)分析(關(guān)聯(lián)放學(xué)生上還是書籍上?)2、實體怎么定義(一個?兩個?定義方式)(Student和Book)public class Student .List books;public class Book . Student student;一對多查詢實現(xiàn)(P63)1、簡單方式(圓點記法,多方人手,相當于1對1) () (SQL用xx left/right (outer) join xx
54、on 形式來關(guān)聯(lián)出數(shù)據(jù))2、嵌套resultMap(一方入手,連接多方為準) () (SQL用xx left/right (outer) join xx on 形式來關(guān)聯(lián)出數(shù)據(jù),多方為準)3、嵌套查詢語句 () (SQL做兩次單表查詢)SQL塊語句這個元素用來定義能夠被其它語句引用的可重用SQL語句塊:,可以使用$var讀變量使用:,可以用property為變量賦值MyBatis緩存介紹1.一級緩存: 基于PerpetualCache 的 HashMap本地緩存,其存儲作用域為 Session,當 Session flush 或 close 之后,該Session中的所有 Cache 就將清空
55、sqlSession.clearCache()手動清除MyBatis緩存介紹2. 二級緩存與一級緩存其機制相同,默認也是采用 PerpetualCache,HashMap存儲,不同在于其存儲作用域為 Mapper(Namespace),并且可自定義存儲源,如 Ehcache。(1)需要在mapper.xml里手動開啟,cache-ref引用另外一個命名空間緩存(2)實體類必須implements Serializable(3)sqlSmit();必須先提交對于緩存數(shù)據(jù)更新機制,當某一個作用域(一級緩存Session/二級緩存Namespaces)的進行了 C/U/D 操作后,默認該作用域下所有
56、 select 中的緩存將被clear。命名空間(namespace)在大型項目中,可能存在大量的sql語句,這時候為每一個sql語句起一個唯一的標識ID就變得并不容易了,為了解決這個問題,在mybatis中,可以為每一個映射文件mapper.xml起一個唯一的命名空間,這樣定義在這個映射文件中的每個sql語句就成了定義在這個命名空間中的一個id。只要我們能夠保證每個明明空間中這個id是唯一的,即使在不同映射文件中的語句id相同,也不會再產(chǎn)生沖突了。規(guī)范:包名/文件夾+文件名(規(guī)避重復(fù))接口映射綁定selectXXX(”)方法來執(zhí)行映射文件中相應(yīng)的SQL語句時問題:1、參數(shù)名稱較長2、字符串沒
57、法驗證3、第二個參數(shù)是Object類型4、返回值使用了泛型 接口式編程,我們可以簡單的理解為Mybatis為映射文件定義了一個代理接口,以后全部通過這個接口來和映射文件交互,而不再是使用以前方法.MyBatis使用Java的動態(tài)代理可以直接通過接口來調(diào)用相應(yīng)的方法,不需要提供接口的實現(xiàn)類,也不需要在實現(xiàn)類中使用SqlSession以通過命名空間間接調(diào)用.接口映射綁定映射文件配置:1. 2.需要com.test下聲明一個StudentMapper接口類,當傳遞多參數(shù)時可用Student對象的類型方式,也可用Param(stuId) String stuId方式進行參數(shù)命名。調(diào)用方式:3.Stud
58、entMapper mapper = session.getMapper(StudentMapper.class);mapper.selectStudent(xxx);作業(yè)用resultMap嵌套方式映射班級和學(xué)生表的關(guān)聯(lián)數(shù)據(jù)查詢結(jié)果。最好用接口綁定的方式做查詢。第5章 Mybatis動態(tài)sql102框架程序設(shè)計(Java)學(xué)習(xí)目標103if、choose標簽1where、set和trim標簽2foreach標簽3動態(tài)SQL(Dynamic SQL)P68MyBatis 的強大特性之一便是它的動態(tài) SQL,即拼接SQL字符串。使用JDBC動態(tài)拼接SQL時的痛點:1、動態(tài)查詢條件where2、空
59、格3、列名后逗號 利用動態(tài) SQL 這一特性可以徹底擺脫這種痛苦Dynamic SQL if choose (when, otherwise) trim (where, set) foreach ifif就是簡單的條件判斷,利用if語句我們可以實現(xiàn)某些簡單的條件選擇.使用方法:SELECT * from student s where s.stuid=#stuid and s.stuname=#stuname 如果條件一未空?wherewhere:在多條件查詢時,如果某個條件有值,它就插入一個where,它有以下作用:1、智能輸出where2、自動忽略and和or3、不需要考慮空格的問題使用方
60、法:.choose (when, otherwise)有時候我們不想應(yīng)用所有的條件,而是想從多個選項中選擇一個。與java 中的switch語句相似, MyBatis提供了一個choose 元素 and username=#username and sex=#sex trimtrim標記是一個格式化的標記,可以完成set或者是where標記的功能,trim元素的主要功能是可以在自己包含的內(nèi)容前加上某些前綴,也可以在其后加上某些后綴,利用trim來代替where元素的功能prefix:前綴prefixoverride:去掉第一個關(guān)鍵字suffix:后綴suffixoverride:去掉最后一個關(guān)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度航空航天用高溫合金委托生產(chǎn)協(xié)議
- 二零二五年度智能共享單車無償使用合同范本
- 2025年度門診部護士長聘任與管理服務(wù)合同
- 職業(yè)插畫師插畫設(shè)計服務(wù)合同
- 房地產(chǎn)經(jīng)紀人獨家代理合同書
- 產(chǎn)品創(chuàng)意與策劃流程手冊
- 歷史文物保護與遺址發(fā)掘試題及答案
- 人工智能輔助的智能環(huán)境保護監(jiān)測系統(tǒng)開發(fā)協(xié)議
- 大健康產(chǎn)業(yè)數(shù)字化健康服務(wù)平臺建設(shè)
- 關(guān)于辦公室搬遷的往來文書通知函
- 消防水箱安裝施工方案
- GB/T 24804-2023提高在用電梯安全性的規(guī)范
- 人教版PEP五年級英語上冊全冊課件
- 【重慶長安汽車公司績效管理現(xiàn)狀、問題及優(yōu)化對策(7600字論文)】
- 家鄉(xiāng)-延安課件
- Codesys中文編程手冊
- 教育系統(tǒng)后備干部筆試試題及參考答案
- 無人機導(dǎo)航與通信技術(shù)PPT完整全套教學(xué)課件
- 六年級奧數(shù)(學(xué)生版)
- 鋼結(jié)構(gòu)設(shè)計原理全套PPT完整教學(xué)課件
- 《植物學(xué)教學(xué)資料》第2章細胞與組織2馬煒梁版
評論
0/150
提交評論