包你一看就懂Mybatis教程.docx_第1頁
包你一看就懂Mybatis教程.docx_第2頁
包你一看就懂Mybatis教程.docx_第3頁
包你一看就懂Mybatis教程.docx_第4頁
包你一看就懂Mybatis教程.docx_第5頁
已閱讀5頁,還剩86頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第一章 MyBatis概述:一、Mybatis介紹MyBatis是一個支持普通SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及對結(jié)果集的檢索封裝。MyBatis可以使用簡單的XML或注解用于配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成數(shù)據(jù)庫中的記錄。二、mybatis快速入門2.1、準(zhǔn)備開發(fā)環(huán)境1、創(chuàng)建測試項目,普通java項目或者是JavaWeb項目均可,如下圖所示:2、添加相應(yīng)的jar包【mybatis】 mybatis-3.1.1.jar【MYSQL驅(qū)動包】mysql-connector-java-5.1.7-bin.jar3、創(chuàng)建數(shù)據(jù)庫和表,針對MySQL數(shù)據(jù)庫SQL腳本如下:1 create database mybatis;2 use mybatis;3 CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);4 INSERT INTO users(NAME, age) VALUES(孤傲蒼狼, 27);5 INSERT INTO users(NAME, age) VALUES(白虎神皇, 27);將SQL腳本在MySQL數(shù)據(jù)庫中執(zhí)行,完成創(chuàng)建數(shù)據(jù)庫和表的操作,如下:到此,前期的開發(fā)環(huán)境準(zhǔn)備工作全部完成。2.2、使用MyBatis查詢表中的數(shù)據(jù)1、添加Mybatis的配置文件conf.xml在src目錄下創(chuàng)建一個conf.xml文件,如下圖所示:conf.xml文件中的內(nèi)容如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 2、定義表所對應(yīng)的實體類,如下圖所示:User類的代碼如下: 1 package me.gacl.domain; 2 3 /* 4 * author gacl 5 * users表所對應(yīng)的實體類 6 */ 7 public class User 8 9 /實體類的屬性和表的字段名稱一一對應(yīng)10 private int id;11 private String name;12 private int age;13 14 public int getId() 15 return id;16 17 18 public void setId(int id) 19 this.id = id;20 21 22 public String getName() 23 return name;24 25 26 public void setName(String name) 27 = name;28 29 30 public int getAge() 31 return age;32 33 34 public void setAge(int age) 35 this.age = age;36 37 38 Override39 public String toString() 40 return User id= + id + , name= + name + , age= + age + ;41 42 3、定義操作users表的sql映射文件userMapper.xml創(chuàng)建一個me.gacl.mapping包,專門用于存放sql映射文件,在包中創(chuàng)建一個userMapper.xml文件,如下圖所示:userMapper.xml文件的內(nèi)容如下: 1 2 3 6 7 12 15 17 select * from users where id=#id18 19 4、在conf.xml文件中注冊userMapper.xml文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 22 23 5、編寫測試代碼:執(zhí)行定義的select語句創(chuàng)建一個Test1類,編寫如下的測試代碼:package me.gacl.test;import java.io.IOException;import java.io.InputStream;import java.io.Reader;import me.gacl.domain.User;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class Test1 public static void main(String args) throws IOException /mybatis的配置文件 String resource = conf.xml; /使用類加載器加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件) InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource); /構(gòu)建sqlSession的工廠 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); /使用MyBatis提供的Resources類加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件) /Reader reader = Resources.getResourceAsReader(resource); /構(gòu)建sqlSession的工廠 /SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); /創(chuàng)建能執(zhí)行映射文件中sql的sqlSession SqlSession session = sessionFactory.openSession(); /* * 映射sql的標(biāo)識字符串, * me.gacl.mapping.userMapper是userMapper.xml文件中mapper標(biāo)簽的namespace屬性的值, * getUser是select標(biāo)簽的id屬性值,通過select標(biāo)簽的id屬性值就可以找到要執(zhí)行的SQL */ String statement = me.gacl.mapping.userMapper.getUser;/映射sql的標(biāo)識字符串 /執(zhí)行查詢返回一個唯一user對象的sql User user = session.selectOne(statement, 1); System.out.println(user); 執(zhí)行結(jié)果如下:可以看到,數(shù)據(jù)庫中的記錄已經(jīng)成功查詢出來了。第二章 使用MyBatis對表執(zhí)行CRUD操作我們講了如何使用Mybatis查詢users表中的數(shù)據(jù),算是對MyBatis有一個初步的入門了,今天講解一下如何使用MyBatis對users表執(zhí)行CRUD操作。本文中使用到的測試環(huán)境是上一篇博文中的測試環(huán)境。一、使用MyBatis對表執(zhí)行CRUD操作基于XML的實現(xiàn)1、定義sql映射xml文件userMapper.xml文件的內(nèi)容如下: 1 2 3 6 7 12 15 17 select * from users where id=#id18 19 20 21 22 insert into users(name,age) values(#name,#age)23 24 25 26 27 delete from users where id=#id28 29 30 31 32 update users set name=#name,age=#age where id=#id33 34 35 36 37 select * from users38 39 40 單元測試類代碼如下: 1 package me.gacl.test; 2 3 import java.util.List; 4 import me.gacl.domain.User; 5 import me.gacl.util.MyBatisUtil; 6 import org.apache.ibatis.session.SqlSession; 7 import org.junit.Test; 8 9 public class TestCRUDByXmlMapper 10 11 Test12 public void testAdd()13 /SqlSession sqlSession = MyBatisUtil.getSqlSession(false);14 SqlSession sqlSession = MyBatisUtil.getSqlSession(true);15 /*16 * 映射sql的標(biāo)識字符串,17 * me.gacl.mapping.userMapper是userMapper.xml文件中mapper標(biāo)簽的namespace屬性的值,18 * addUser是insert標(biāo)簽的id屬性值,通過insert標(biāo)簽的id屬性值就可以找到要執(zhí)行的SQL19 */20 String statement = me.gacl.mapping.userMapper.addUser;/映射sql的標(biāo)識字符串21 User user = new User();22 user.setName(用戶孤傲蒼狼);23 user.setAge(20);24 /執(zhí)行插入操作25 int retResult = sqlSession.insert(statement,user);26 /手動提交事務(wù)27 /sqlSmit();28 /使用SqlSession執(zhí)行完SQL之后需要關(guān)閉SqlSession29 sqlSession.close();30 System.out.println(retResult);31 32 33 Test34 public void testUpdate()35 SqlSession sqlSession = MyBatisUtil.getSqlSession(true);36 /*37 * 映射sql的標(biāo)識字符串,38 * me.gacl.mapping.userMapper是userMapper.xml文件中mapper標(biāo)簽的namespace屬性的值,39 * updateUser是update標(biāo)簽的id屬性值,通過update標(biāo)簽的id屬性值就可以找到要執(zhí)行的SQL40 */41 String statement = me.gacl.mapping.userMapper.updateUser;/映射sql的標(biāo)識字符串42 User user = new User();43 user.setId(3);44 user.setName(孤傲蒼狼);45 user.setAge(25);46 /執(zhí)行修改操作47 int retResult = sqlSession.update(statement,user);48 /使用SqlSession執(zhí)行完SQL之后需要關(guān)閉SqlSession49 sqlSession.close();50 System.out.println(retResult);51 52 53 Test54 public void testDelete()55 SqlSession sqlSession = MyBatisUtil.getSqlSession(true);56 /*57 * 映射sql的標(biāo)識字符串,58 * me.gacl.mapping.userMapper是userMapper.xml文件中mapper標(biāo)簽的namespace屬性的值,59 * deleteUser是delete標(biāo)簽的id屬性值,通過delete標(biāo)簽的id屬性值就可以找到要執(zhí)行的SQL60 */61 String statement = me.gacl.mapping.userMapper.deleteUser;/映射sql的標(biāo)識字符串62 /執(zhí)行刪除操作63 int retResult = sqlSession.delete(statement,5);64 /使用SqlSession執(zhí)行完SQL之后需要關(guān)閉SqlSession65 sqlSession.close();66 System.out.println(retResult);67 68 69 Test70 public void testGetAll()71 SqlSession sqlSession = MyBatisUtil.getSqlSession();72 /*73 * 映射sql的標(biāo)識字符串,74 * me.gacl.mapping.userMapper是userMapper.xml文件中mapper標(biāo)簽的namespace屬性的值,75 * getAllUsers是select標(biāo)簽的id屬性值,通過select標(biāo)簽的id屬性值就可以找到要執(zhí)行的SQL76 */77 String statement = me.gacl.mapping.userMapper.getAllUsers;/映射sql的標(biāo)識字符串78 /執(zhí)行查詢操作,將查詢結(jié)果自動封裝成List返回79 List lstUsers = sqlSession.selectList(statement);80 /使用SqlSession執(zhí)行完SQL之后需要關(guān)閉SqlSession81 sqlSession.close();82 System.out.println(lstUsers);83 84 二、使用MyBatis對表執(zhí)行CRUD操作基于注解的實現(xiàn)1、定義sql映射的接口UserMapperI接口的代碼如下: 1 package me.gacl.mapping; 2 3 import java.util.List; 4 import me.gacl.domain.User; 5 import org.apache.ibatis.annotations.Delete; 6 import org.apache.ibatis.annotations.Insert; 7 import org.apache.ibatis.annotations.Select; 8 import org.apache.ibatis.annotations.Update; 9 10 /*11 * author gacl12 * 定義sql映射的接口,使用注解指明方法要執(zhí)行的SQL13 */14 public interface UserMapperI 15 16 /使用Insert注解指明add方法要執(zhí)行的SQL17 Insert(insert into users(name, age) values(#name, #age)18 public int add(User user);19 20 /使用Delete注解指明deleteById方法要執(zhí)行的SQL21 Delete(delete from users where id=#id)22 public int deleteById(int id);23 24 /使用Update注解指明update方法要執(zhí)行的SQL25 Update(update users set name=#name,age=#age where id=#id)26 public int update(User user);27 28 /使用Select注解指明getById方法要執(zhí)行的SQL29 Select(select * from users where id=#id)30 public User getById(int id);31 32 /使用Select注解指明getAll方法要執(zhí)行的SQL33 Select(select * from users)34 public List getAll();35 需要說明的是,我們不需要針對UserMapperI接口去編寫具體的實現(xiàn)類代碼,這個具體的實現(xiàn)類由MyBatis幫我們動態(tài)構(gòu)建出來,我們只需要直接拿來使用即可。2、在conf.xml文件中注冊這個映射接口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 22 23 24 25 單元測試類的代碼如下: 1 package me.gacl.test; 2 3 import java.util.List; 4 import me.gacl.domain.User; 5 import me.gacl.mapping.UserMapperI; 6 import me.gacl.util.MyBatisUtil; 7 import org.apache.ibatis.session.SqlSession; 8 import org.junit.Test; 9 10 public class TestCRUDByAnnotationMapper 11 12 Test13 public void testAdd()14 SqlSession sqlSession = MyBatisUtil.getSqlSession(true);15 /得到UserMapperI接口的實現(xiàn)類對象,UserMapperI接口的實現(xiàn)類對象由sqlSession.getMapper(UserMapperI.class)動態(tài)構(gòu)建出來16 UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);17 User user = new User();18 user.setName(用戶xdp);19 user.setAge(20);20 int add = mapper.add(user);21 /使用SqlSession執(zhí)行完SQL之后需要關(guān)閉SqlSession22 sqlSession.close();23 System.out.println(add);24 25 26 Test27 public void testUpdate()28 SqlSession sqlSession = MyBatisUtil.getSqlSession(true);29 /得到UserMapperI接口的實現(xiàn)類對象,UserMapperI接口的實現(xiàn)類對象由sqlSession.getMapper(UserMapperI.class)動態(tài)構(gòu)建出來30 UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);31 User user = new User();32 user.setId(3);33 user.setName(孤傲蒼狼_xdp);34 user.setAge(26);35 /執(zhí)行修改操作36 int retResult = mapper.update(user);37 /使用SqlSession執(zhí)行完SQL之后需要關(guān)閉SqlSession38 sqlSession.close();39 System.out.println(retResult);40 41 42 Test43 public void testDelete()44 SqlSession sqlSession = MyBatisUtil.getSqlSession(true);45 /得到UserMapperI接口的實現(xiàn)類對象,UserMapperI接口的實現(xiàn)類對象由sqlSession.getMapper(UserMapperI.class)動態(tài)構(gòu)建出來46 UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);47 /執(zhí)行刪除操作48 int retResult = mapper.deleteById(7);49 /使用SqlSession執(zhí)行完SQL之后需要關(guān)閉SqlSession50 sqlSession.close();51 System.out.println(retResult);52 53 54 Test55 public void testGetUser()56 SqlSession sqlSession = MyBatisUtil.getSqlSession();57 /得到UserMapperI接口的實現(xiàn)類對象,UserMapperI接口的實現(xiàn)類對象由sqlSession.getMapper(UserMapperI.class)動態(tài)構(gòu)建出來58 UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);59 /執(zhí)行查詢操作,將查詢結(jié)果自動封裝成User返回60 User user = mapper.getById(8);61 /使用SqlSession執(zhí)行完SQL之后需要關(guān)閉SqlSession62 sqlSession.close();63 System.out.println(user);64 65 66 Test67 public void testGetAll()68 SqlSession sqlSession = MyBatisUtil.getSqlSession();69 /得到UserMapperI接口的實現(xiàn)類對象,UserMapperI接口的實現(xiàn)類對象由sqlSession.getMapper(UserMapperI.class)動態(tài)構(gòu)建出來70 UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);71 /執(zhí)行查詢操作,將查詢結(jié)果自動封裝成List返回72 List lstUsers = mapper.getAll();73 /使用SqlSession執(zhí)行完SQL之后需要關(guān)閉SqlSession74 sqlSession.close();75 System.out.println(lstUsers);76 77 用到的MyBatisUtil工具類代碼如下: 1 package me.gacl.util; 2 3 import java.io.InputStream; 4 5 import org.apache.ibatis.session.SqlSession; 6 import org.apache.ibatis.session.SqlSessionFactory; 7 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 8 9 public class MyBatisUtil 10 11 /*12 * 獲取SqlSessionFactory13 * return SqlSessionFactory14 */15 public static SqlSessionFactory getSqlSessionFactory() 16 String resource = conf.xml;17 InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource)

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論