ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

02-框架--Mybatis

02-框架--Mybatis 1.为什么要学习Mybatis框架Mybatis是持久层框架JDBC缺点1、操作的复杂度偏高2、数据的查询结果集处理繁琐3、sql硬编码sql和java代码混合写了Mybatis:1、需要配置文件2、直接把查询结果集的数据映射到实体类属性中3、把所有的sql统一的在文件中进行编写映射文件xxx.xml2. 运行流程配置文件sqlsession及其封装不分内容需要改动比如数据库名字?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 的全局行为和数据库连接信息 -- configuration !--在控制台打印sql语句的配置-- settings !-- 打印sql日志 -- setting namelogImpl valueSTDOUT_LOGGING / /settings !-- 别名设置 设置完之后再EmpMapper里面的parameterType直接等于emp-- typeAliases !-- 实体类bean、pojo、entity、domain -- !-- 指定包下面的所有类型都可以指定别名 ,默认是实体类名首字母小写-- package nameorg.example/ /typeAliases !--配置数据库-- 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); //默认不提交事务 true:提交事务 sqlSession sqlSessionFactory.openSession(true); } catch (IOException e) { throw new RuntimeException(e); } return sqlSession; } }3. Mybatis实现基本的CRUD操作3.1增加!--添加员工 为了防止sql注入把?用#{}替换 标签、标签的属性、内部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); //参数一 namespace.id的值 //参数二实际传入的参数 sqlSession.insert(emp.addEmp, emp); }3.2删除!--删除,一般根据主键来删除-- !--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修改更新!--修改除了主键以外的数据都需要写上此为小测试可忽略-- 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单个查询!--查询单个查找(根据主键查询),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全部查询!--查询所有查找(根据主键查询)-- 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),查找(根据主键查询)-- 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、参数列表如果是类类型可以指定别名parameterType该属性可以不用写4、#{}:等同于PS中的?占位符 {实体类中对应属性的属性名}5、resultType属性不能少如果是集合类型只需要写出集合对应的泛型类型4. Mybatis代理开发4.1. 包结构4.2. 条件条件1、映射文件中的namespace必须是mapper接口的类路径2、statement的id的值必须和mapper接口中对应的方法的名字要一致3、statement的parameterType类型必须和接口中对应的方法的参数类型一致4、statement的resultType类型必须和接口中对应方法的返回值类型一致
返回列表