
1.為什么要學習Mybatis框架Mybatis是持久層框架JDBC缺點1、操作的復雜度偏高2、數(shù)據(jù)的查詢結(jié)果集處理繁瑣3、sql硬編碼sql和java代碼混合寫了Mybatis:1、需要配置文件2、直接把查詢結(jié)果集的數(shù)據(jù)映射到實體類屬性中3、把所有的sql統(tǒng)一的在文件中進行編寫映射文件xxx.xml2. 運行流程配置文件sqlsession及其封裝不分內(nèi)容需要改動比如數(shù)據(jù)庫名字?xml version1.0 encodingUTF-8 ? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd !-- MyBatis 的核心配置文件它是整個 MyBatis 框架的總指揮負責配置 MyBatis 的全局行為和數(shù)據(jù)庫連接信息 -- configuration !--在控制臺打印sql語句的配置-- settings !-- 打印sql日志 -- setting namelogImpl valueSTDOUT_LOGGING / /settings !-- 別名設(shè)置 設(shè)置完之后再EmpMapper里面的parameterType直接等于emp-- typeAliases !-- 實體類bean、pojo、entity、domain -- !-- 指定包下面的所有類型都可以指定別名 ,默認是實體類名首字母小寫-- package nameorg.example/ /typeAliases !--配置數(shù)據(jù)庫-- 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; //是對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); //默認不提交事務(wù) true:提交事務(wù) sqlSession sqlSessionFactory.openSession(true); } catch (IOException e) { throw new RuntimeException(e); } return sqlSession; } }3. Mybatis實現(xiàn)基本的CRUD操作3.1增加!--添加員工 為了防止sql注入把?用#{}替換 標簽、標簽的屬性、內(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ù) sqlSession.insert(emp.addEmp, emp); }3.2刪除!--刪除,一般根據(jù)主鍵來刪除-- !--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ù)都需要寫上此為小測試可忽略-- 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單個查詢!--查詢單個查找(根據(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注意事項1、需要手動配置在控制臺打印sql2、什么是Statement3、參數(shù)列表如果是類類型可以指定別名parameterType該屬性可以不用寫4、#{}:等同于PS中的?占位符 {實體類中對應屬性的屬性名}5、resultType屬性不能少如果是集合類型只需要寫出集合對應的泛型類型4. Mybatis代理開發(fā)4.1. 包結(jié)構(gòu)4.2. 條件條件1、映射文件中的namespace必須是mapper接口的類路徑2、statement的id的值必須和mapper接口中對應的方法的名字要一致3、statement的parameterType類型必須和接口中對應的方法的參數(shù)類型一致4、statement的resultType類型必須和接口中對應方法的返回值類型一致