文章目录
第一章,Mybatis入门
一,Mybatis
1.1,简介
- MyBatis前身是iBatis,本是Apache的一个开源的项目
- 官方网站http://mybatis.org
- ORM框架
- 实体类和SQL语句之间建立映射关系
- 特点:基于SQL语法,简单易学能了解底层封装过程SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度方便程序代码调试
1.2,搭建MyBatis开发环境
-
下载mybatis-3.2.2.jar包并导入工程
-
编写MyBatis核心配置文件(configuration.xml)
-
创建实体类-POJO
-
DAO层-SQL映射文件(mapper.xml)
-
创建测试类
- 读取核心配置文件mybatis-config.xml
- 创建SqlSessionFactory对象,读取配置文件
- 创建SqlSession对象
- 调用mapper文件进行数据操作
1.在pom.xml中引入jar文件 <!--mybatis包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis-v}</version> </dependency> <!--驱动包--> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.33</version> </dependency> 2. 在resources下创建mybatis.xml主配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> </configuration> 3. 在resources下放入jdbc.properties,创建pojo实体类 4. 在主配置文件mybatis.xml中添加代码 <!--读取properties文件--> <properties resource="jdbc.properties"></properties> <!--配置环境JDBC连接--> <environments default="db01"> <environment id="db01"> <!--配置事务--> <transactionManager type="JDBC"></transactionManager> <!--配置数据源 type属性、其有三种取值: POOLED:使用Mybatis自带的数据库连接池来管理数据库连接 UNPOOLED:不使用任何数据库连接池来管理数据库连接 JNDI:jndi形式使用数据库连接、主要用于项目正常使用的时候 --> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${user}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> 5. 创建dao包,并编写BillDao接口 /** * @Author: wzy * @Date: 2024/11/19 9:34 * @Description: 订单Dao接口 */ public interface BillDao { /** * 根据ID 获得单个对象信息 * @param id * @return */ public Bill findBillById(Integer id); } 6. 在resources下创建mappers文件夹,在mappers下创建BillDao.xml文件(实现类) 复制文档中头部信息 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.hz.dao.BillDao"> </mapper> 7. 在BillDao.xml中添加实现方法 <!-- insert delete update select --> <!-- id 方法名 resultType返回值类型 parameterType 参数类型--> <!-- #{占位符} ${原样输出} --> <select id="findBillById" parameterType="Integer" resultType="com.hz.pojo.Bill"> select id,billCode,productName,productDesc from smbms_bill a where id = #{id} </select> 8. 创建单元测试类 try { //读取mybatis.xml InputStream is = Resources.getResourceAsStream("mybatis.xml"); //创建连接工厂 SqlSessionFactory SqlSession数据库连接 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); //获得连接 true事务自动提交 SqlSession sqlSession = sqlSessionFactory.openSession(true); //实例化dao层 调用dao接口 BillDao billDao = sqlSession.getMapper(BillDao.class); Bill bill = billDao.findBillById(1); System.out.println(bill.toString()); } catch (Exception e) { e.printStackTrace(); }
1.3,Mybatis框架的优缺点
- 优点:与JDBC相比,减少了50%以上的代码量;最简单的持久化框架,小巧并简单易学;SQL代码从程序代码中彻底分离,可重用;提供XML标签,支持编写动态SQL;提供映射标签,支持对象与数据库的ORM字段映射
- 缺点SQL语句编写工作量大,对开发人员有一定要求;数据库移植性差
二,Mybatis基本要素
2.1,Mybatis的核心对象
-
-
SqlSessionFactoryBuilder
- 用过即丢,其生命周期只存在于方法体内
- 可重用其来创建多个 SqlSessionFactory 实例
- 负责构建SqlSessionFactory,并提供多个build方法的重载
-
SqlSessionFactory
- SqlSessionFactory是每个MyBatis应用的核心
- 作用:创建SqlSession实例
- 作用域:Application
- 生命周期与应用的生命周期相同
- 单例:存在于整个应用运行时,并且同时只存在一个对象实例
-
SqlSession
- 包含了执行SQL所需的所有方法
- 对应一次数据库会话,会话结束必须关闭
- 线程级别,不能共享
- SqlSession的获取方式
String resource = "mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is) ; SqlSession sqlSession = factory.openSession();
- SqlSession的两种使用方式
- 通过SqlSession实例直接运行映射的SQL语句
- 基于Mapper接口方式操作数据
2.2,mybatis-config.xml 系统核心配置文件
-
mybatis-config.xml 系统核心配置文件
configuration 配置 properties 可以配置在Java 属性配置文件中 settings 修改 MyBatis 在运行时的行为方式 typeAliases 为 Java 类型命名一个别名(简称) typeHandlers 类型处理器 objectFactory 对象工厂 plugins 插件 environments 环境 environment 环境变量 transactionManager 事务管理器 dataSource 数据源 mappers 映射器
-
properties元素
- 配置properties元素的两种方式
- 通过外部指定的方式(database.properties),实现动态配置
- 直接配置为xml,实现动态配置
- 配置properties元素的两种方式
-
settings元素
- 用来修改MyBatis运行时的行为方式
- 主要是MyBatis的一些全局配置属性的设置
设置项 描述 允许值 默认值 cacheEnabled 对在此配置文件下的所有cache进行全局性开/关设置 true | false true lazyLoadingEnabled 全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载 true | false true autoMappingBehavior MyBatis对于resultMap自动映射匹配级别 NONE |PARTIAL |FULL PARTIAL ……(9个) … … … -
typeAliases元素
- 类型别名
- 仅仅只关联XML配置,简写冗长的Java类名
-
environments元素
- 表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上
- 子元素节点:environment,但是必须指定其中一个为默认运行环境(通过default指定)
2.3,mapper.xml SQL映射文件
-
mappers元素
-
映射器,定义SQL映射语句
-
须在配置中引用mapper映射文件
-
方式一:使用类资源路径获取资源
<!-- 将mapper映射文件加入到系统核心配置文件中 --> <mappers> <mapper resource="cn/smbms/dao/user/UserMapper.xml"/> </mappers>
-
方式二:使用URL获取资源
<mappers> <mapper url="file:///E:/sqlmappers/UserMapper.xml"/> <mapper url="file:///E:/sqlmappers/ProviderMapper.xml"/> </mappers>