
1.為什么要學(xué)習(xí)Mybatis框架Mybatis是持久層框架JDBC缺點(diǎn)1、操作的復(fù)雜度偏高2、數(shù)據(jù)的查詢結(jié)果集處理繁瑣3、sql硬編碼sql和java代碼混合寫了Mybatis:1、需要配置文件2、直接把查詢結(jié)果集的數(shù)據(jù)映射到實(shí)體類屬性中3、把所有的sql統(tǒng)一的在文件中進(jìn)行編寫映射文件xxx.xml2. 運(yùn)行流程配置文件sqlsession及其封裝不分內(nèi)容需要改動(dòng)比如數(shù)據(jù)庫(kù)名字?xml version1.0 encodingUTF-8 ? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd !-- MyBatis 的核心配置文件它是整個(gè) MyBatis 框架的總指揮負(fù)責(zé)配置 MyBatis 的全局行為和數(shù)據(jù)庫(kù)連接信息 -- configuration !--在控制臺(tái)打印sql語(yǔ)句的配置-- settings !-- 打印sql日志 -- setting namelogImpl valueSTDOUT_LOGGING / /settings !-- 別名設(shè)置 設(shè)置完之后再EmpMapper里面的parameterType直接等于emp-- typeAliases !-- 實(shí)體類bean、pojo、entity、domain -- !-- 指定包下面的所有類型都可以指定別名 ,默認(rèn)是實(shí)體類名首字母小寫-- package nameorg.example/ /typeAliases !--配置數(shù)據(jù)庫(kù)-- environments defaultdevelopment environment iddevelopment transactionManager typeJDBC/ dataSource typePOOLED property namedriver valuecom.mysql.cj.jdbc.Driver/ !--jdbc:mysql://localhost:3306/mybatis?serverTimezoneUTC-- property nameurl valuejdbc:mysql://localhost:3306/tongda_88_95?serverTimezoneUTC/ property nameusername valueroot/ property namepassword value123456/ /dataSource /environment /environments mappers mapper resourceEmpMapper.xml/ mapper resourceDeptMapper.xml/ /mappers /configurationpackage org.example; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; //是對(duì)GetSqlSession的封裝二者作用一致MybatisUtil更便捷 /** * Author: Administrator * Date: 2026/8/8 * Description: */ public class MybatisUtil { public static SqlSession getSqlSession() { SqlSession sqlSession null; try { InputStream inputStream Resources.getResourceAsStream(SqlMapConfig.xml); //SqlSessionFactory SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream); //默認(rèn)不提交事務(wù) true:提交事務(wù) sqlSession sqlSessionFactory.openSession(true); } catch (IOException e) { throw new RuntimeException(e); } return sqlSession; } }3. Mybatis實(shí)現(xiàn)基本的CRUD操作3.1增加!--添加員工 為了防止sql注入把?用#{}替換 標(biāo)簽、標(biāo)簽的屬性、內(nèi)部sql parameterType:必須要寫入自己的包名org.example然后寫上.Emp-- insert idaddEmp parameterTypeemp insert into emp values (#{EMPNO},#{ENAME},#{JOB},#{MGR}, #{HIREDATE},#{SAL},#{COMM},#{DEPTNO}) /insertTest public void add() { SqlSession sqlSession MybatisUtil.getSqlSession(); Emp emp new Emp(); emp.setEMPNO(6666); emp.setENAME(王力); emp.setJOB(掃廁所); emp.setMGR(7782); emp.setHIREDATE(2010-10-10); emp.setSAL(20000); emp.setCOMM(100); emp.setDEPTNO(30); //參數(shù)一 namespace.id的值 //參數(shù)二實(shí)際傳入的參數(shù) sqlSession.insert(emp.addEmp, emp); }3.2刪除!--刪除,一般根據(jù)主鍵來(lái)刪除-- !--parameterType可以寫string和int stringjava.lang.String intint -- delete iddeleteEmp parameterTypejava.lang.String delete from emp where EMPNO#{EMPNO} /deleteTest public void text03(){ SqlSession sqlSession MybatisUtil.getSqlSession(); Emp emp new Emp(); sqlSession.delete(emp.deleteEmp, 6666); }3.3修改更新!--修改除了主鍵以外的數(shù)據(jù)都需要寫上此為小測(cè)試可忽略-- update idupdateEmp parameterTypeemp update emp set JOB#{JOB} where ENAME王力 /updateTest public void text02(){ SqlSession sqlSession MybatisUtil.getSqlSession(); Emp emp new Emp(); emp.setJOB(敲代碼); sqlSession.update(emp.updateEmp, emp); }3.4查找3.4.1單個(gè)查詢!--查詢單個(gè)查找(根據(jù)主鍵查詢),resultType寫表名,并且必須寫parameterType可以省略-- select idqueryById parameterTypeemp resultTypeemp select*from emp where EMPNO#{EMPNO} /selectTest public void text04(){ SqlSession sqlSession MybatisUtil.getSqlSession(); Emp empsqlSession.selectOne(emp.queryById, 6666); System.out.println(emp); }3.4.2全部查詢!--查詢所有查找(根據(jù)主鍵查詢)-- select idqueryAll parameterTypeemp resultTypeemp select*from emp /selectTest public void text05(){ SqlSession sqlSession MybatisUtil.getSqlSession(); ListEmp emps sqlSession.selectList(emp.queryAll); for (Emp emp : emps) { System.out.println(emp); } }3.4.3模糊查詢!--模糊查詢(直接寫#{ENAME} %的話二者中間必須要空格所以改用concat),查找(根據(jù)主鍵查詢)-- select idqueryLike parameterTypeemp resultTypeemp select*from emp where ENAME like concat(#{ENAME},%) /selectTest public void text06(){ SqlSession sqlSession MybatisUtil.getSqlSession(); ListEmp emps sqlSession.selectList(emp.queryLike,S); for (Emp emp : emps) { System.out.println(emp); } }3.5注意事項(xiàng)1、需要手動(dòng)配置在控制臺(tái)打印sql2、什么是Statement3、參數(shù)列表如果是類類型可以指定別名parameterType該屬性可以不用寫4、#{}:等同于PS中的?占位符 {實(shí)體類中對(duì)應(yīng)屬性的屬性名}5、resultType屬性不能少如果是集合類型只需要寫出集合對(duì)應(yīng)的泛型類型4. Mybatis代理開發(fā)4.1. 包結(jié)構(gòu)4.2. 條件條件1、映射文件中的namespace必須是mapper接口的類路徑2、statement的id的值必須和mapper接口中對(duì)應(yīng)的方法的名字要一致3、statement的parameterType類型必須和接口中對(duì)應(yīng)的方法的參數(shù)類型一致4、statement的resultType類型必須和接口中對(duì)應(yīng)方法的返回值類型一致