![[尚硅谷]_張曉飛_Mybatis_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-5/27/b6325c2d-8dda-4400-bd3c-3d845d528932/b6325c2d-8dda-4400-bd3c-3d845d5289321.gif)
![[尚硅谷]_張曉飛_Mybatis_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-5/27/b6325c2d-8dda-4400-bd3c-3d845d528932/b6325c2d-8dda-4400-bd3c-3d845d5289322.gif)
![[尚硅谷]_張曉飛_Mybatis_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-5/27/b6325c2d-8dda-4400-bd3c-3d845d528932/b6325c2d-8dda-4400-bd3c-3d845d5289323.gif)
![[尚硅谷]_張曉飛_Mybatis_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-5/27/b6325c2d-8dda-4400-bd3c-3d845d528932/b6325c2d-8dda-4400-bd3c-3d845d5289324.gif)
![[尚硅谷]_張曉飛_Mybatis_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-5/27/b6325c2d-8dda-4400-bd3c-3d845d528932/b6325c2d-8dda-4400-bd3c-3d845d5289325.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、尚硅谷_張曉飛_MybatisMybatis1. Mybatis介紹MyBatis是支持普通SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及對結(jié)果集的檢索封裝。MyBatis可以使用簡單的XML或注解用于配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成數(shù)據(jù)庫中的記錄.JDBC-dbutils(自動封裝)-MyBatis-Hibernatexml2. mybatis快速入門編寫第一個基于mybaits的測試?yán)?2.1. 添加jar包【mybatis】mybatis-
2、3.1.1.jar【MYSQL驅(qū)動包】mysql-connector-java-5.1.7-bin.jar2.2. 建庫+表create database mybatis;use mybatis;CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);INSERT INTO users(NAME, age) VALUES(Tom, 12);INSERT INTO users(NAME, age) VALUES(Jack, 11);2.3. 添加Mybatis的配置文件conf.xml2.4
3、. 定義表所對應(yīng)的實體類public class User private int id;private String name;private int age; /get,set方法2.5. 定義操作users表的sql映射文件userMapper.xml select * from users where id=#id2.6. 在conf.xml文件中注冊userMapper.xml文件2.7. 編寫測試代碼:執(zhí)行定義的select語句public class Test public static void main(String args) throws IOException Stri
4、ng resource = conf.xml; /加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件)Reader reader = Resources.getResourceAsReader(resource); /構(gòu)建sqlSession的工廠SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);/創(chuàng)建能執(zhí)行映射文件中sql的sqlSessionSqlSession session = sessionFactory.openSession();/映射sql的標(biāo)識字符串String s
5、tatement = com.atguigu.mybatis.bean.userMapper+.selectUser;/執(zhí)行查詢返回一個唯一user對象的sqlUser user = session.selectOne(statement, 1);System.out.println(user);3. 操作users表的CRUD3.1. XML的實現(xiàn)1). 定義sql映射xml文件:insert into users(name, age) values(#name, #age);delete from users where id=#idupdate users set name=#name,
6、age=#age where id=#idselect * from users where id=#idselect * from users2). 在config.xml中注冊這個映射文件3). 在dao中調(diào)用:public User getUserById(int id) SqlSession session = sessionFactory.openSession();User user = session.selectOne(URI+.selectUser, id);return user;3.2. 注解的實現(xiàn)1). 定義sql映射的接口public interface UserMa
7、pper Insert(insert into users(name, age) values(#name, #age)public int insertUser(User user);Delete(delete from users where id=#id)public int deleteUserById(int id);Update(update users set name=#name,age=#age where id=#id)public int updateUser(User user);Select(select * from users where id=#id)publi
8、c User getUserById(int id);Select(select * from users)public List getAllUser();2). 在config中注冊這個映射接口3). 在dao類中調(diào)用public User getUserById(int id) SqlSession session = sessionFactory.openSession();UserMapper mapper = session.getMapper(UserMapper.class);User user = mapper.getUserById(id);return user;4. 幾
9、個可以優(yōu)化的地方4.1. 連接數(shù)據(jù)庫的配置單獨放在一個properties文件中# perties4.2. 為實體類定義別名,簡化sql映射xml文件中的引用4.3. 可以在src下加入log4j的配置文件,打印日志信息1. 添加jar: log4j-1.2.16.jar2.1. perties(方式一)perties,log4j.rootLogger=DEBUG, Console#Consolelog4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Consol
10、e.layout=org.apache.log4j.PatternLayoutlog4j.appender.Console.layout.ConversionPattern=%d %t %-5p %c - %m%nlog4j.logger.java.sql.ResultSet=INFO.apache=INFOlog4j.logger.java.sql.Connection=DEBUGlog4j.logger.java.sql.Statement=DEBUGlog4j.logger.java.sql.PreparedStatement=DEBUG2.2. log4
11、j.xml(方式二)5. 解決字段名與實體類屬性名不相同的沖突5.1. 準(zhǔn)備表和數(shù)據(jù):CREATE TABLE orders(order_id INT PRIMARY KEY AUTO_INCREMENT,order_no VARCHAR(20), order_price FLOAT);INSERT INTO orders(order_no, order_price) VALUES(aaaa, 23);INSERT INTO orders(order_no, order_price) VALUES(bbbb, 33);INSERT INTO orders(order_no, order_pri
12、ce) VALUES(cccc, 22);5.2. 定義實體類:public class Order private int id;private String orderNo;private float price;5.3. 實現(xiàn)getOrderById(id)的查詢:方式一: 通過在sql語句中定義別名select order_id id, order_no orderNo,order_price price from orders where order_id=#id方式二: 通過select * from orders where order_id=#id6.實現(xiàn)關(guān)聯(lián)表查詢6.1. 一
13、對一關(guān)聯(lián)1). 提出需求根據(jù)班級id查詢班級信息(帶老師的信息)2). 創(chuàng)建表和數(shù)據(jù)CREATE TABLE teacher(t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20);CREATE TABLE class(c_id INT PRIMARY KEY AUTO_INCREMENT, c_name VARCHAR(20), teacher_id INT);ALTER TABLE class ADD CONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id) REFERENCES teache
14、r(t_id);INSERT INTO teacher(t_name) VALUES(LS1);INSERT INTO teacher(t_name) VALUES(LS2);INSERT INTO class(c_name, teacher_id) VALUES(bj_a, 1);INSERT INTO class(c_name, teacher_id) VALUES(bj_b, 2);3). 定義實體類:public class Teacher private int id;private String name;public class Classes private int id;pr
15、ivate String name;private Teacher teacher;4). 定義sql映射文件ClassMapper.xmlselect * from class c, teacher t where c.teacher_id=t.t_id and c.c_id=#id select * from class where c_id=#id SELECT t_id id, t_name name FROM teacher WHERE t_id=#id 5). 測試Testpublic void testOO() SqlSession sqlSession = factory.op
16、enSession();Classes c = sqlSession.selectOne(com.atguigu.day03_mybatis.test5.OOMapper.getClass, 1);System.out.println(c);Testpublic void testOO2() SqlSession sqlSession = factory.openSession();Classes c = sqlSession.selectOne(com.atguigu.day03_mybatis.test5.OOMapper.getClass2, 1);System.out.println(
17、c);6.2. 一對多關(guān)聯(lián)1). 提出需求根據(jù)classId查詢對應(yīng)的班級信息,包括學(xué)生,老師2). 創(chuàng)建表和數(shù)據(jù):CREATE TABLE student(s_id INT PRIMARY KEY AUTO_INCREMENT, s_name VARCHAR(20), class_id INT);INSERT INTO student(s_name, class_id) VALUES(xs_A, 1);INSERT INTO student(s_name, class_id) VALUES(xs_B, 1);INSERT INTO student(s_name, class_id) VALU
18、ES(xs_C, 1);INSERT INTO student(s_name, class_id) VALUES(xs_D, 2);INSERT INTO student(s_name, class_id) VALUES(xs_E, 2);INSERT INTO student(s_name, class_id) VALUES(xs_F, 2);3). 定義實體類:public class Student private int id;private String name;public class Classes private int id;private String name;priv
19、ate Teacher teacher;private List students;4). 定義sql映射文件ClassMapper.xmlselect * from class c, teacher t,student s where c.teacher_id=t.t_id and c.C_id=s.class_id and c.c_id=#id select * from class where c_id=#id SELECT t_id id, t_name name FROM teacher WHERE t_id=#id SELECT s_id id, s_name name FROM
20、student WHERE class_id=#id 5). 測試:Testpublic void testOM() SqlSession sqlSession = factory.openSession();Classes c = sqlSession.selectOne(com.atguigu.day03_mybatis.test5.OOMapper.getClass3, 1);System.out.println(c);Testpublic void testOM2() SqlSession sqlSession = factory.openSession();Classes c = s
21、qlSession.selectOne(com.atguigu.day03_mybatis.test5.OOMapper.getClass4, 1);System.out.println(c);7. 動態(tài)SQL與模糊查詢7.1. 提出需求: 實現(xiàn)多條件查詢用戶(姓名模糊匹配, 年齡在指定的最小值到最大值之間)7.2. 準(zhǔn)備數(shù)據(jù)表和數(shù)據(jù):create table d_user( id int primary key auto_increment, name varchar(10),age int(3); insert into d_user(name,age) values(Tom,12); i
22、nsert into d_user(name,age) values(Bob,13); insert into d_user(name,age) values(Jack,18);7.3. ConditionUser(查詢條件實體類)private String name;private int minAge;private int maxAge;7.4. User(表實體類)private int id;private String name;private int age;7.5. userMapper.xml(映射文件) select * from d_user where age=#mi
23、nAge and age<=#maxAgeand name like #name7.6. UserTest(測試)public class UserTest public static void main(String args) throws IOException Reader reader = Resources.getResourceAsReader(conf.xml);SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);SqlSession sqlSession = se
24、ssionFactory.openSession();String statement = com.atguigu.day03_mybatis.test6.userMapper.getUser;List list = sqlSession.selectList(statement, new ConditionUser(%a%, 1, 12);System.out.println(list);MyBatis中可用的動態(tài)SQL標(biāo)簽8.調(diào)用存儲過程8.1. 提出需求:查詢得到男性或女性的數(shù)量, 如果傳入的是0就女性否則是男性8.2. 準(zhǔn)備數(shù)據(jù)庫表和存儲過程:create table p_user(
25、id int primary key auto_increment, name varchar(10),sex char(2); insert into p_user(name,sex) values(A,男); insert into p_user(name,sex) values(B,女); insert into p_user(name,sex) values(C,男); #創(chuàng)建存儲過程(查詢得到男性或女性的數(shù)量, 如果傳入的是0就女性否則是男性)DELIMITER $CREATE PROCEDURE mybatis.ges_user_count(IN sex_id INT, OUT u
26、ser_count INT)BEGIN IF sex_id=0 THENSELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex=女 INTO user_count;ELSESELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex=男 INTO user_count;END IF;END $#調(diào)用存儲過程DELIMITER ;SET user_count = 0;CALL mybatis.ges_user_count(1, user_count);SELECT user_count;8.3. 創(chuàng)建表
27、的實體類public class User private String id;private String name;private String sex;8.4. userMapper.xml call mybatis.get_user_count(?,?) 8.5. 測試調(diào)用:Map paramMap = new HashMap();paramMap.put(sex_id, 0);session.selectOne(statement, paramMap);Integer userCount = paramMap.get(user_count);System.out.println(us
28、erCount);9. Mybatis緩存9.1. 理解MyBatis緩存正如大多數(shù)持久層框架一樣,MyBatis 同樣提供了一級緩存和二級緩存的支持1. 一級緩存: 基于PerpetualCache 的 HashMap本地緩存,其存儲作用域為 Session,當(dāng) Session flush 或 close 之后,該Session中的所有 Cache 就將清空。2. 二級緩存與一級緩存其機(jī)制相同,默認(rèn)也是采用 PerpetualCache,HashMap存儲,不同在于其存儲作用域為 Mapper(Namespace),并且可自定義存儲源,如 Ehcache。3. 對于緩存數(shù)據(jù)更新機(jī)制,當(dāng)某一個
29、作用域(一級緩存Session/二級緩存Namespaces)的進(jìn)行了 C/U/D 操作后,默認(rèn)該作用域下所有 select 中的緩存將被clear。9.2. Mybatis一級緩存1) 提出需求:根據(jù)id查詢對應(yīng)的用戶記錄對象2). 準(zhǔn)備數(shù)據(jù)庫表和數(shù)據(jù)CREATE TABLE c_user(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);INSERT INTO c_user(NAME, age) VALUES(Tom, 12);INSERT INTO c_user(NAME, age) VALUES(Jack, 11
30、);3). 創(chuàng)建表的實體類public class User implements Serializableprivate int id;private String name;private int age;4). userMapper.xmlselect * from c_user where id=#idupdate c_user setname=#name, age=#age where id=#id5). 測試:/* * 一級緩存: 也就Session級的緩存(默認(rèn)開啟) */Testpublic void testCache1() SqlSession session = Myba
31、tisUtils.getSession();String statement = com.atguigu.mybatis.test8.userMapper.getUser;User user = session.selectOne(statement, 1);System.out.println(user);/* * 一級緩存默認(rèn)就會被使用 */*user = session.selectOne(statement, 1);System.out.println(user);*/* 1. 必須是同一個Session,如果session對象已經(jīng)close()過了就不可能用了 */*session
32、= MybatisUtils.getSession();user = session.selectOne(statement, 1);System.out.println(user);*/* 2. 查詢條件是一樣的 */*user = session.selectOne(statement, 2);System.out.println(user);*/* 3. 沒有執(zhí)行過session.clearCache()清理緩存 */*session.clearCache(); user = session.selectOne(statement, 2);System.out.println(user)
33、;*/* 4. 沒有執(zhí)行過增刪改的操作(這些操作都會清理緩存) */*session.update(com.atguigu.mybatis.test8.userMapper.updateUser,new User(2, user, 23);user = session.selectOne(statement, 2);System.out.println(user);*/9.3. Mybatis二級緩存1). 添加一個在userMapper.xml中2). 測試/* * 測試二級緩存 */Testpublic void testCache2() String statement = com.atguigu.mybatis.test8.userMapper.getUser;SqlSession session = MybatisUtils.getSession();User user = session.selectOne(statement, 1);mit();System.out.println(user=+user);SqlSession session2 = MybatisUtils.getSession();user = session2.selectOne(statement, 1);mit
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年企業(yè)知識產(chǎn)權(quán)抵押貸款合同
- 2025年勞動合同解除與補(bǔ)償協(xié)議范本
- 2025年全球海運(yùn)代理業(yè)務(wù)合同范本
- 2025年公園綠化養(yǎng)護(hù)工程協(xié)議
- 2025年交通建設(shè)策劃內(nèi)部協(xié)同發(fā)展協(xié)議
- 2025年企業(yè)股份出讓意向性協(xié)議
- 2025年信息技術(shù)產(chǎn)品銷售與技術(shù)支持協(xié)議
- 2025年旅游聯(lián)盟策劃商業(yè)協(xié)作框架協(xié)議
- 2025兼職員工試用期合同書模板
- 2025年業(yè)務(wù)聯(lián)營合同范本
- 2025年電力鐵塔市場分析現(xiàn)狀
- GB 12158-2024防止靜電事故通用要求
- 《教育強(qiáng)國建設(shè)規(guī)劃綱要(2024-2035年)》全文
- 山東省濱州市2024-2025學(xué)年高二上學(xué)期期末地理試題( 含答案)
- 體育老師籃球說課
- 化學(xué)-江蘇省蘇州市2024-2025學(xué)年2025屆高三第一學(xué)期學(xué)業(yè)期末質(zhì)量陽光指標(biāo)調(diào)研卷試題和答案
- 蛋雞生產(chǎn)飼養(yǎng)養(yǎng)殖培訓(xùn)課件
- 運(yùn)用PDCA降低住院患者跌倒-墜床發(fā)生率
- 海底撈員工手冊
- 2024CSCO小細(xì)胞肺癌診療指南解讀
- 立春氣象與生活影響模板
評論
0/150
提交評論