![java微技術(shù)javaee企業(yè)級(jí)分布式高級(jí)架構(gòu)師二期專(zhuān)題詳解mybatis講義_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b1.gif)
![java微技術(shù)javaee企業(yè)級(jí)分布式高級(jí)架構(gòu)師二期專(zhuān)題詳解mybatis講義_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b2.gif)
![java微技術(shù)javaee企業(yè)級(jí)分布式高級(jí)架構(gòu)師二期專(zhuān)題詳解mybatis講義_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b3.gif)
![java微技術(shù)javaee企業(yè)級(jí)分布式高級(jí)架構(gòu)師二期專(zhuān)題詳解mybatis講義_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b4.gif)
![java微技術(shù)javaee企業(yè)級(jí)分布式高級(jí)架構(gòu)師二期專(zhuān)題詳解mybatis講義_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b/68d5e36a-3b73-4434-97ae-c4d4e36ffb7b5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 學(xué)習(xí)目標(biāo)l 理論知識(shí)(去和別人說(shuō)明白這個(gè)技術(shù)是個(gè)什么東西,解決的是什么問(wèn)題)l 會(huì)用l 深入了解底層原理l 會(huì)安裝2 Mybatis 需要關(guān)注的文件l POJO 類(lèi)(DTO、VO、PO 等)l Mapper 接口(就是 dao 接口)l Mapper文件l 全局配置文件3 框架概述什么是框架,它為構(gòu)件復(fù)用提供了上下文(Context)。因此構(gòu)件庫(kù)的大規(guī)模重用也需要框架。協(xié)作構(gòu)件之間的依賴(lài)、責(zé)任分配和流程,表現(xiàn)為一組抽象類(lèi)以及其實(shí)例之間協(xié)作的可以說(shuō),一個(gè)框架是一個(gè)可復(fù)用的設(shè)計(jì)構(gòu)件,它規(guī)定了應(yīng)用的體系結(jié)構(gòu),闡明了整個(gè)設(shè)計(jì)、為什么使用框架開(kāi)發(fā)的三層結(jié)構(gòu)我們用三層結(jié)構(gòu)主要是使項(xiàng)目結(jié)構(gòu)更清楚,分工更
2、明確,有利于后期的維護(hù)和升級(jí)三層結(jié)構(gòu)包含:表現(xiàn)層,業(yè)務(wù)層,持久層題太多。* 在某些方面使用別人成熟的框架,就相當(dāng)于讓別人幫你完成一些基礎(chǔ)工作,你只需要集中精力完成系統(tǒng)的業(yè)務(wù)邏輯設(shè)計(jì)。* 而且框架是成熟,穩(wěn)健的,它可以處理系統(tǒng)很多細(xì)節(jié)問(wèn)題,比如,事務(wù)處理,安全性, 數(shù)據(jù)流等問(wèn)題。* 還有框架都經(jīng)過(guò)很多人使用,所以結(jié)構(gòu)很好,所以擴(kuò)展性也很好,而且它是不斷升級(jí)的,你可以直接享受別人升級(jí)代碼帶來(lái)的好處。* 因?yàn)橄到y(tǒng)發(fā)展到已經(jīng)很復(fù)雜了,特別是服務(wù)器端,涉及到的知識(shí),內(nèi)容,問(wèn)4 Mybatis什么是 mybatismybatis 參考:l Mybatis 是什么?l Mybatis 的由來(lái)?* MyBat
3、is 本是 apache 的一個(gè)開(kāi)源項(xiàng)目 iBatis* MyBatis 是一個(gè)優(yōu)秀的持久層框架,它是一個(gè)半自動(dòng)化的 ORM 框架* 它對(duì)使用操作數(shù)據(jù)庫(kù)的過(guò)程進(jìn)行 ,使開(kāi)發(fā)者只需要關(guān)注 SQL 本身,而不需要花費(fèi)精力去處理例如 驅(qū)動(dòng)、創(chuàng)建 connection、創(chuàng)建 statement、手動(dòng)設(shè)置參數(shù)、結(jié)果集檢索等 繁雜的過(guò)程代碼。l Mybatis 在哪寫(xiě) SQL 語(yǔ)句?如何設(shè)置 SQL 參數(shù)和結(jié)果?示例代碼public classTest public static void main(String args) Connection connection = null;PreparedSta
4、tement preparedStatement = null; ResultSet resultSet = null;try / 加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)Class.forName(com.mysql.Driver);/ 通過(guò)驅(qū)動(dòng)管理類(lèi)獲取數(shù)據(jù)庫(kù)鏈接 connection = DriverManager connection = DriverManager.getConnection(:mysql:/localhost:3306/mybatis?characterEncoding=utf-8, root,root);/ 定義sql 語(yǔ)句 ?表示占位String sql = select * from
5、user where username = ?;/ 獲取預(yù)處理 statementpreparedStatemnt、CallableStatement)配置起來(lái)。* 并通過(guò) java 對(duì)象和 statement 中的 sql 進(jìn)行生成最終執(zhí)行的 sql 語(yǔ)句,最后由mybatis 框架執(zhí)行 sql 并將結(jié)果成 java 對(duì)象并返回。* Mybatis 通過(guò) XML 或注解的方式,將要執(zhí)行的各種 statement(statement、* 2010 年這個(gè)項(xiàng)目由 apache software foundation 遷移到了 google code,并且改名為MyBatis 。* 2013 年
6、11 月遷移到。preparedStatement = connection.prepareStatement(sql);/ 設(shè)置參數(shù),第一個(gè)參數(shù)為 sql 語(yǔ)句中參數(shù)的序號(hào)(從 1 開(kāi)始),第二個(gè)參數(shù)為設(shè)置的preparedStatement.setString(1, );/ 向數(shù)據(jù)庫(kù)發(fā)出 sql 執(zhí)行,出結(jié)果集resultSet = preparedStatement.executeQuery();/ 遍歷結(jié)果集while (resultSet.next() System.out.println(resultSet.getString(id)+ +resultSet.getString(u
7、sername); catch (Exception e) e.printStackTrace(); finally /資源if (resultSet != null) try resultSet.(); catch (SQLException e) e.printStackTrace();if (preparedStatement != null) try preparedStatement. catch (SQLException e) e.printStackTrace();if (connection != null) try ();connection.(); catch (SQLE
8、xception e) / TODO Auto-generated catch block e.printStackTrace();Mybatis 如何解決代碼中的問(wèn)題1、 創(chuàng)建數(shù)據(jù)庫(kù)連接相關(guān)操作,硬編碼a)解決方案:通過(guò) Mybatis 全局配置文件,對(duì)數(shù)據(jù)庫(kù)連接進(jìn)行配置2、 statement 相關(guān)操作,硬編碼a)解決方案:通過(guò) Mapper文件,對(duì) statement 相關(guān)處理進(jìn)行配置。3、 頻繁開(kāi)啟數(shù)據(jù)庫(kù)連接,會(huì)降低數(shù)據(jù)庫(kù)處理性能。a)解決方案:通過(guò) Mybatis 全局配置文件,配置連接池。Mybatis 架構(gòu)原理我們要找出的就是:從 XML 配置文件到數(shù)據(jù)庫(kù)的距離有多長(zhǎng)?MyBat
9、is配置文件數(shù)據(jù)庫(kù)說(shuō)明:MappedStatementExecutor輸入PojoString、Integer等基礎(chǔ)數(shù)據(jù)類(lèi)型Map輸出ListPojoString、Integer等基礎(chǔ)數(shù)據(jù)類(lèi)型MapSqlSessionSqlSessionFactoryMappern xmlMapper2 xmlMapper1.xmlSqlMapConfig.xml1、 mybatis 配置文件a)SqlMapConfig.xml,此文件作為 mybatis 的全局配置文件,配置了 mybatis 的運(yùn)行環(huán)境等。b)Mapper.xml,此文件作為 mybatis 的 sql文件,文件中配置了操作數(shù)據(jù)庫(kù)的sql
10、 語(yǔ)句。此文件需要在 SqlMapConfig.xml 中加載。2、 SqlSessionFactory通過(guò) mybatis 環(huán)境等配置構(gòu)造 SqlSessionFactory,即會(huì)話工廠。3、 sqlSession通過(guò)會(huì)話工廠創(chuàng)建 sqlSession 即會(huì)話,程序員通過(guò) sqlsession 會(huì)話接口對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查操作。4、 Executor 執(zhí)行器mybatis 底層自定義了 Executor 執(zhí)行器接口來(lái)具體操作數(shù)據(jù)庫(kù),Executor 接口有兩個(gè)實(shí)現(xiàn),一個(gè)是基本執(zhí)行器(默認(rèn))、一個(gè)是緩存執(zhí)行器,sqlsession 底層是通過(guò)executor 接口操作數(shù)據(jù)庫(kù)的。5、 Mappe
11、d Statement它也是 mybatis 一個(gè)底層對(duì)象,它包裝了 mybatis 配置及 sql等。mapper.xml 文件中一個(gè) selectinsertupdatedelete對(duì)應(yīng)一個(gè) MappedStatement 對(duì)象,selectinsertupdatedelete的 id 即是 Mapped statement的 id。a)Mapped Statement 對(duì) sql 執(zhí)行輸入?yún)?shù)進(jìn)行定義,HashMap、基本類(lèi)型、pojo,Executor 通過(guò) Mapped Statement 在執(zhí)行 sql 前將輸入的 java對(duì)象至 sql 中,輸入?yún)?shù)就是編程中對(duì) prepared
12、Statement設(shè)置參數(shù)。b)Mapped Statement 對(duì) sql 執(zhí)行輸出結(jié)果進(jìn)行定義,HashMap、基本類(lèi)型、pojo,Executor 通過(guò) Mapped Statement 在執(zhí)行 sql 后將輸出結(jié)果至 java 對(duì)象中,輸出結(jié)果過(guò)程相當(dāng)于編程中對(duì)結(jié)果的處理過(guò)程。5 Mybatis 入門(mén)需求1、根據(jù)用戶id一個(gè)用戶2、根據(jù)用戶名稱(chēng)模糊用戶列表3、添加用戶4、更新用戶5、刪除用戶Mybatis 開(kāi)發(fā)框架搭建l 創(chuàng)建 maven 工程:mybatisl POM 文件org.mybatismybatis3.4.6l SqlMapConfig.xmll UserMapper.xm
13、lmysqlmysql-connector-java5.1.35junitjunit4.12l PO 類(lèi)需求實(shí)現(xiàn)根據(jù) id用戶文件lparameterType:定義輸入到 sql 中的類(lèi)型,#id表示使用 preparedstatement 設(shè)置占位號(hào)并將輸入變量 id 傳到 sql。resultType:定義結(jié)果類(lèi)型。#:相當(dāng)于中的?占位l 測(cè)試代碼public class MybatisFirst /會(huì)話工廠private SqlSessionFactory sqlSessionFactory; select * from user where id = #idpublic class U
14、ser private int id;private String username; private Date birthday; private String sex; private String address;/gettersetterBeforepublic void createSqlSessionFactory() throws IOException / 配置文件String resource = SqlMapConfig.xml;InputStream inputStream = Resources.getResourceAsStream(resource);/ 使用Sql
15、SessionFactoryBuilder從xml配置文件中創(chuàng)建SqlSessionFactorysqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);/ 根據(jù) id用戶Testpublic void testFindUserById() / 數(shù)據(jù)庫(kù)會(huì)話實(shí)例SqlSession sqlSession = null;try / 創(chuàng)建數(shù)據(jù)庫(kù)會(huì)話實(shí)例sqlSessionsqlSession = sqlSessionFactory.openSession();/單個(gè),根據(jù)用戶id用戶User user = sqlSe
16、ssion.selectOne(test.findUserById, 10);根據(jù)用戶名模糊用戶列表文件lparameterType:定義輸入到 sql 中的類(lèi)型,$value表示輸入?yún)?shù)將$value替換,做字串的拼接。注意:如果是取簡(jiǎn)單數(shù)量類(lèi)型的參數(shù),括號(hào)中的參數(shù)名稱(chēng)必須為 valueresultType:定義結(jié)果類(lèi)型。l 測(cè)試代碼select * from user where username like %$value%/ 輸出用戶System.out.println(user); catch (Exception e) e.printStackTrace(); finally if
17、(sqlSession != null) sqlSession.();/ 根據(jù)用戶名稱(chēng)模糊用戶Testpublic void testFindUserByUsername() / 數(shù)據(jù)庫(kù)會(huì)話實(shí)例SqlSession sqlSession = null;try / 創(chuàng)建數(shù)據(jù)庫(kù)會(huì)話實(shí)例sqlSessionsqlSession = sqlSessionFactory.openSession();/單個(gè),根據(jù)用戶id用戶List list = sqlSession.selectList(test.findUserByUsername, 小明);System.out.println(list.size(
18、); catch (Exception e) e.printStackTrace(); finally if (sqlSession != null) sqlSession.();#和$區(qū)別區(qū)別 1l#:相當(dāng)于SQL 語(yǔ)句中的占位? (PreparedStatement)$: 相當(dāng)于SQL 語(yǔ)句中的連接合 + (Statement)區(qū)別 2l#: 進(jìn)行輸入的時(shí)候,會(huì)對(duì)參數(shù)進(jìn)行類(lèi)型(如果是 String 類(lèi)型,那么 SQL 語(yǔ)句會(huì)自動(dòng)加上)$:進(jìn)行輸入的時(shí)候,將參數(shù)原樣輸出到 SQL 語(yǔ)句中l(wèi) 區(qū)別 3# : 如果進(jìn)行簡(jiǎn)單類(lèi)型(String、Date、8 種基本類(lèi)型的包裝類(lèi))的輸入時(shí),#中參數(shù)名
19、稱(chēng)可以任意$: 如果進(jìn)行簡(jiǎn)單類(lèi)型(String、Date、8 種基本類(lèi)型的包裝類(lèi))的輸入時(shí),$中參數(shù)名稱(chēng)必須是 valuel$ :SQL 注入問(wèn)題 ,使用 OR 1=1 關(guān)鍵字將條件忽略添加用戶文件l insert into user(username,birthday,sex,address) values(#username,#birthday,#sex,#address)l 測(cè)試代碼/ 添加用戶Testpublic void testInsert() / 數(shù)據(jù)庫(kù)會(huì)話實(shí)例SqlSession sqlSession = null; try / 創(chuàng)建數(shù)據(jù)庫(kù)會(huì)話實(shí)例sqlSessionsqlSe
20、ssion = sqlSessionFactory.openSession();/ 添加用戶User user = new User(); user.setUsername(); user.setAddress(河南鄭州); user.setSex(1); user.setPrice(1999.9f);sqlSession.insert(test.insertUser, user);/提交事務(wù)sqlSmit(); catch (Exception e) e.printStackTrace(); finally l 主鍵返回select LAST_INSERT_ID()insert into u
21、ser(username,birthday,sex,address)values(#username,#birthday,#sex,#address);添加 selectKey實(shí)現(xiàn)主鍵返回。* keyProperty:指定返回的主鍵,在 pojo 中的哪個(gè)屬性* order:selectKey中的 sql 的執(zhí)行順序,是相對(duì)與 insert 語(yǔ)句來(lái)說(shuō)。由于 mysql 的自insert 語(yǔ)句之后主鍵生成,所以這里 selectKey 的執(zhí)行順序?yàn)閍fter。* resultType:返回的主鍵對(duì)應(yīng)的 JAVA 類(lèi)型* LAST_INSERT_ID():是 mysql 的函數(shù),返回 auto_i
22、ncrement 自增列新id 值。OGNL對(duì)象導(dǎo)航圖語(yǔ)言|-User(參數(shù)值對(duì)象)|-username-張三|-birthdayif (sqlSession != null) sqlSession.();|-sex-男|-dept - Department|-name|-noOGNL 表去獲取 Department 對(duì)象的 name 屬性:刪除用戶文件ll 測(cè)試代碼/ 根據(jù)id刪除用戶Testpublic void testDelete() / 數(shù)據(jù)庫(kù)會(huì)話實(shí)例SqlSession sqlSession = null; try / 創(chuàng)建數(shù)據(jù)庫(kù)會(huì)話實(shí)例sqlSessionsql
23、Session = sqlSessionFactory.openSession(); delete from user where id=#id修改用戶文件ll 測(cè)試代碼/ 更新用戶Testpublic void testUpdate() update user setusername=#username,birthday=#birthday,sex=#sex,address=#address where id=#id/ 刪除用戶sqlSession.delete(test.deleteUserById,18);/ 提交事務(wù)sqlSmit(); catch (Exception e) e.pr
24、intStackTrace(); finally if (sqlSession != null) sqlSession.();/ 數(shù)據(jù)庫(kù)會(huì)話實(shí)例SqlSession sqlSession = null;try / 創(chuàng)建數(shù)據(jù)庫(kù)會(huì)話實(shí)例sqlSessionsqlSession = sqlSessionFactory.openSession();/ 添加用戶User user = new User();user.setId(16);user.setUsername();user.setAddress(河南鄭州);user.setSex(1);user.setPrice(1999.9f);sqlSes
25、sion.update(test.updateUser, user);/ 提交事務(wù)sqlSmit(); catch (Exception e) e.printStackTrace(); finally if (sqlSession != null) sqlSession.();6 Mybatis 開(kāi)發(fā)Dao 層原始 dao 開(kāi)發(fā)方式說(shuō)明:該種方式來(lái)說(shuō)只會(huì)出現(xiàn)在那些從 ibatis 項(xiàng)目遷移過(guò)來(lái)的項(xiàng)目。生命周期(作用范圍)l1.sqlsession:級(jí)別2.sqlsessionFactory:全局范圍(應(yīng)用級(jí)別)3.sqlsessionFactoryBuilder:級(jí)別dao 接口和實(shí)現(xiàn)類(lèi)lpu
26、blic interface UserDao public User findUserById(int id) throws Exception;public void insertUser(User user) throws Exception;public class UserDaoImpl implements UserDao /注入SqlSessionFactorypublic UserDaoImpl(SqlSessionFactory sqlSessionFactory)this. sqlSessionFactory = sqlSessionFactory;private SqlSe
27、ssionFactory sqlSessionFactory;Overridepublic User findUserById(int id) throws Exception SqlSession session = sqlSessionFactory.openSession();User user = null;try /通過(guò)sqlsession調(diào)用selectOne獲取一條結(jié)果集/參數(shù)1:指定定義的statement的id,參數(shù)2:指定向statement中傳遞的參數(shù)user = session.selectOne(test.findUserById, id);System.out.pr
28、intln(user); finallysession.();return user;Override文件lselect * from user where id = #idPublic void insertUser(User user) throws Exception SqlSession sqlSession = sqlSessionFactory.openSession(); try sqlSession.insert(insertUser, user); sqlSmit(); finallysession.();l 測(cè)試代碼private SqlSessionFactory sql
29、SessionFactory;Beforepublic void init() throws Exception SqlSessionFactoryBuildersessionFactoryBuilder=newSqlSessionFactoryBuilder();InputStreaminputStream= Resources.getResourceAsStream(SqlMapConfig.xml);sqlSessionFactory = sessionFactoryBuilder.build(inputStream); select LAST_INSERT_ID()insert int
30、o user(username,birthday,sex,address) values(#username,#birthday,#sex,#address)mapper開(kāi)發(fā)方式(JDK 的方式)動(dòng)態(tài)分為兩種方式:基于 JDK 的動(dòng)態(tài)-有接口的類(lèi)進(jìn)行動(dòng)態(tài)基于 CGLIB 的動(dòng)態(tài)-通過(guò)子類(lèi)繼承父類(lèi)的方式去進(jìn)行。XML 方式l 使用只需要開(kāi)發(fā) Mapper 接口(dao 接口)和 Mapper 約束文件,不需要編寫(xiě)實(shí)現(xiàn)類(lèi)。l 開(kāi)發(fā)規(guī)范Mapper 接口開(kāi)發(fā)需要遵循以下規(guī)范:1、 Mapper 接口的類(lèi)路徑與 Mapper.xml 文件中的 namespace 相同。2、 Mapper 接口名稱(chēng)和
31、Mapper.xml 中定義的每個(gè) statement 的 id 相同。Testpublic void testFindUserById() UserDao userDao = new UserDaoImpl(sqlSessionFactory); User user = userDao.findUserById(22); System.out.println(user);l mapper文件l mapper 接口/* 用戶管理mapper*/public interface UserMapper /根據(jù)用戶id用戶select * from user where id = #id3、 Map
32、per 接 口的 輸 入 參 數(shù) 類(lèi) 型 和 mapper.xml 中 定 義 的 每 個(gè) sql 的parameterType 的類(lèi)型相同。4、 Mapper 接口的返回值類(lèi)型和 mapper.xml 中定義的每個(gè) sql 的 resultType 的類(lèi)型相同。l 加載文件l 測(cè)試代碼public class UserMapperTestprivate SqlSessionFactory sqlSessionFactory;Beforepublic void setUp() throws Exception /mybatis配置文件String resource = SqlMapConfig
33、.xml;InputStream inputStream = Resources.getResourceAsStream(resource);/使用SqlSessionFactoryBuilder創(chuàng)建sessionFactorysqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);Testpublic void testFindUserById() throws Exception public User findUserById(int id) throws Exception;注解方式(后續(xù)講解)7 全局
34、配置文件配置內(nèi)容SqlMapConfig.xml 中配置的內(nèi)容和順序如下:properties(屬性)settings(全局配置參數(shù))/獲取sessionSqlSession session = sqlSessionFactory.openSession();/獲取mapper接口的對(duì)象UserMapper userMapper = session.getMapper(UserMapper.class);/調(diào)用對(duì)象User user = userMapper.findUserById(1); System.out.println(user);/關(guān)閉session session.();prop
35、ertiesSqlMapConfig.xml 可以java 屬性文件中的配置。1、在 classpath 下定義 perties 文件,.driver=com.mysql.Driver.url=:mysql:/localhost:3306/ssm?characterEncoding=utf-8.username=root.password=roottypeAliases(類(lèi)型別名)typeHandlers(類(lèi)型處理器)-Java 類(lèi)型-類(lèi)型-數(shù)據(jù)庫(kù)類(lèi)型轉(zhuǎn)換objectFactory(對(duì)象工廠)plugins(插件)-可以在 Mybatis 執(zhí)行 SQL 語(yǔ)句的流程中,一腳去實(shí)現(xiàn)一些
36、功能增強(qiáng),比如 PageHelper 分頁(yè)插件,就是第實(shí)現(xiàn)的一個(gè)插件 environments(環(huán)境集合屬性對(duì)象)environment(環(huán)境子屬性對(duì)象) tranionManager(事務(wù)管理) dataSource(數(shù)據(jù)源)mappers(器)2、在 SqlMapConfig.xml 文件中,perties 中的屬性,具體如下:properties除了可以使用 resource 屬性,properties 文件中的屬性。還可以在properties內(nèi)定義 property 子來(lái)定義屬性和屬性值,具體如下:typeAlias別名的作用:就是為了簡(jiǎn)化文件中 parameterTyp
37、e 和 ResultType 中的 POJO 類(lèi)型名稱(chēng)編寫(xiě)。默認(rèn)支持別名別名的類(lèi)型_bytebyte_longlong_shortshort_intint_integerint_doubledouble_floatfloat_booleanbooleanstringString注意: MyBatis 將按照下面的順序來(lái)加載屬性:u properties 元素體內(nèi)定義的屬性。u properties 元素中 resource 或 url 加載的屬性,它會(huì)覆蓋已的同名屬性。自定義別名在 SqlMapConfig.xml 中進(jìn)行如下配置:byteBytelongLongshortShortintIn
38、tegerintegerIntegerdoubleDoublefloatFloatbooleanBooleandateDatedecimalBigDecimalbigdecimalBigDecimalmapMapmappers使用相對(duì)于類(lèi)路徑的資源如:使用絕對(duì)路徑加載資源如:使用 mapper 接口類(lèi)路徑,加載文件。如:注意:此種要求 mapper 接口名稱(chēng)和 mapper文件名稱(chēng)相同,且放在同一個(gè)目錄中。指定包下的所有 mapper 接口,來(lái)加載文件。如:注意:此種要求 mapper 接口名稱(chēng)和 mapper文件名稱(chēng)相同,且放在同一個(gè)目錄中。8 輸入和輸出parameterType(輸入類(lèi)型
39、)parameterType 屬性可以的輸入?yún)?shù)類(lèi)型有:l Map 類(lèi)型和POJO 類(lèi)型的用法類(lèi)似,本課程只講 POJO 類(lèi)型的相關(guān)配置。l List 類(lèi)型在動(dòng)態(tài) SQL 部分進(jìn)行講解。傳遞簡(jiǎn)單類(lèi)型參考入門(mén)案例中的根據(jù)用戶 ID用戶的案例。傳遞 pojo 對(duì)象l 參考入門(mén)案例中的添加用戶的案例。l 參數(shù)的獲取是通過(guò) OGNL 表進(jìn)行獲取的簡(jiǎn)單類(lèi)型、POJO 類(lèi)型、Map 類(lèi)型、List 類(lèi)型(數(shù)組)。傳遞 pojo 包裝對(duì)象l 包裝對(duì)象:pojo 類(lèi)中包含 pojo。l OGNL 表會(huì)隨著對(duì)象的嵌套而相應(yīng)的發(fā)生層級(jí)變化 需求l 在綜合的場(chǎng)景中,需要根據(jù)不同的條件進(jìn)行用戶列表的。l
40、 這些條件中,可能會(huì)用戶中的用戶名稱(chēng),還可能商品的商品名稱(chēng)。 分析1、通過(guò) mybatis 傳遞多個(gè)條件時(shí),需要使用 pojo 或者 map 來(lái)傳遞。2、通過(guò) pojo 傳遞參數(shù)的話,需要定義一個(gè)包裝對(duì)象,該對(duì)象用戶數(shù)據(jù)或者商品數(shù)據(jù)。 QueryVO定義包裝對(duì)象 QueryVOpublic class QueryVO private User user; SQL 語(yǔ)句SELECT * FROM user where username like %小明%Mapper 文件Mapper 接口測(cè)試在 UserMapp
41、erTest 測(cè)試類(lèi)中,添加以下測(cè)試代碼:Testpublic void testFindUserList() throws Exception SqlSession sqlSession = sqlSessionFactory.openSession();/* 用戶管理mapper*/public interface UserMapper /根據(jù)用戶id用戶public User findUserById(int id) throws Exception;/用戶列表public List findUserByUsername(String username) throws Exception;/添加用戶public void insertUser(User user)throws Exception;/綜合用戶列表public List findUserL
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 紅木家具的購(gòu)銷(xiāo)合同
- 貨物購(gòu)買(mǎi)合同范文
- 有按揭的房屋買(mǎi)賣(mài)合同
- 房屋抵押擔(dān)保合同
- 2025福建省勞動(dòng)合同書(shū)范本
- 2025廣東省林地承包合同
- 2025【合同協(xié)議范本】商品房買(mǎi)賣(mài)合同的補(bǔ)充協(xié)議怎么寫(xiě)范本
- 游樂(lè)場(chǎng)地租賃合同樣本
- 2025廈門(mén)金龍聯(lián)合汽車(chē)工業(yè)有限公司加工合同
- 2025奶牛配合飼料批發(fā)合同
- 2024年英語(yǔ)高考全國(guó)各地完形填空試題及解析
- 2024至2030年中國(guó)餐飲管理及無(wú)線自助點(diǎn)單系統(tǒng)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024年服裝門(mén)店批發(fā)管理系統(tǒng)軟件項(xiàng)目可行性研究報(bào)告
- 體育概論(第二版)課件第三章體育目的
- 《氓》教學(xué)設(shè)計(jì) 2023-2024學(xué)年統(tǒng)編版高中語(yǔ)文選擇性必修下冊(cè)
- 化學(xué)元素周期表注音版
- T-GDASE 0042-2024 固定式液壓升降裝置安全技術(shù)規(guī)范
- 香港朗文4B單詞及句子
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制課件第五章運(yùn)動(dòng)中的中樞控制
- 財(cái)務(wù)部規(guī)范化管理 流程圖
- 斷絕關(guān)系協(xié)議書(shū)范文參考(5篇)
評(píng)論
0/150
提交評(píng)論