MyBatis 01 快速入门
Posted 众生云海,一念初见
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis 01 快速入门相关的知识,希望对你有一定的参考价值。
MyBatis 01 快速入门
文章目录
一、学习目标
1、理解数据持久化概念和ORM原理
2、理解MyBatis的概念以及优点特性
3、搭建MyBatis环境
4、了解MyBatis与JDBC的区别与联系
5、理解核心类的作用域和生命周期
6、掌握全局配置文件结构内容
二、为什么需要框架技术
问题:如何更快更好地写简历?
- 使用word简历模板
思考:使用模板有什么好处呢?
- 不用考虑布局、排版等,提高效率、结构统一,便于人事阅读、可专心在简历内容上、新手也可以做出专业的简历。
模板即框架
三、框架技术介绍
框架技术
- 是一个应用程序的半成品
- 提供可重用的公共结构
- 按一定规则组织的一组组件
分析优势
- 不用再考虑公共问题
- 专心在业务实现上
- 结构统一,易于学习、维护
- 新手也可写出好程序
四、主流框架介绍
MVC设计模式的实现
拦截器
可变和可重用的标签
ORM,简化数据库操作
DAO层
依赖注入容器 / AOP实现
声明式事务
简化Java EE应用
黏合剂,将大家组装到一起
结构最清晰的MVC Model2实现
高度可配置,支持多种视图技术
定制化开发 半自动化的ORM实现
DAO层
动态SQL
小巧灵活、简单易学
五、持久化与ORM
持久化: 持久化是程序数据在瞬时状态和持久状态间转换的过程
ORM(Object Relational Mapping)
- 编写程序的时候,以面向对象的方式处理数据
- 保存数据的时候,却以关系型数据库的方式存储
ORM解决方案包含下面四个部分
- 在持久化对象上执行基本的增、删、改、查操作
- 对持久化对象提供一种查询语言或者API
- 对象关系映射工具
- 提供与事务对象交互、执行检查、延迟加载以及其他优化功能
六、MyBatis简介
MyBatis前身是iBatis,本是Apache的一个开源的项目
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
entity ——> pojo
dao ——>mapper
impl——>XML
官方网站 http://mybatis.org
中文官网网站: https://mybatis.org/mybatis-3/zh/
ORM框架
实体类和SQL语句之间建立映射关系
特点
1.基于SQL语法,简单易学
2.能了解底层封装过程
3.SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
4.方便程序代码调试
七、搭建MyBatis开发环境
使用MyBatis的开发步骤
步骤1、在maven中添加Mybatis依赖包
步骤2、编写MyBatis核心配置文件(configuration.xml)
步骤3、创建实体类-POJO
步骤4、DAO(mapper)层-SQL映射文件(mapper.xml)
步骤5、创建测试类
① 读取核心配置文件mybatis-config.xml
② 创建SqlSessionFactory对象,读取配置文件
③ 创建SqlSession对象
④ 调用mapper文件进行数据操作<!--步骤1、在maven中添加Mybatis依赖包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency>
<!--步骤2、编写MyBatis核心配置文件(configuration.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> <!--引入配置文件--> <properties resource="database.properties"></properties> <!--配置日志输出--> <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <!--配置类别名--> <typeAliases> <package name="com.cvs.pojo"/> </typeAliases> <!--环境配置 default默认--> <environments default="development"> <!--可配置多个开发环境:本地环境、线上测试环境、灰度环境、生产环境--> <!--开发环境配置--> <environment id="development"> <!--事务管理:JDBC--> <transactionManager type="JDBC"/> <!--配置数据源--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/cvs_db?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimeZone=UTC"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> <!-- 测试环境--> <environment id="test"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="$driver"/> <property name="url" value="$url"/> <property name="username" value="$username"/> <property name="password" value="$password"/> </dataSource> </environment> </environments> <mappers> <!--映射文件必须要配置 org.apache.ibatis.binding.BindingException--> <mapper resource="com/cvs/mapper/SysRoleMapper.xml"></mapper> <!--<mapper class="com.cvs.mapper.SysRoleMapper"></mapper>--> </mappers> </configuration>
#database.properties配置文件 driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/cvs_db?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimeZone=UTC username=root password=root
//步骤3、创建实体类-POJO package com.cvs.pojo; import java.util.Date; /** * 角色类 */ public class SysRole private Integer id; //id private String code; //角色编码 private String roleName; //角色名称 private Integer createdUserId; //创建者 private Date createdTime; //创建时间 private Integer updatedUserId; //更新者 private Date updatedTime; //更新时间 //省略getter/setter...
//步骤4、DAO层 (mapper)接口 package com.cvs.mapper; import com.cvs.pojo.SysRole; import java.util.List; /** * Description: TODO * date: 2021-11-19 10:21 * 系统用户角色接口 * @author Aiden */ public interface SysRoleMapper /** * 获取角色总记录数 * @return */ int getTotalCount(); /** * 查询所有系统角色 * @return */ List<SysRole> getSysRoleAll();
<!--步骤4、创建与接口对应的-SQL映射文件(SysRoleMapper.xml)--> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE> <!--namespace:命名空间 java接口文件全包名--> <mapper namespace="com.cvs.mapper.SysRoleMapper"> <!-- 查询系统角色总数--> <select id="getTotalCount" resultType="int"> SELECT count(0) FROM `t_sys_role` </select> <!--查询所有系统角色--> <select id="getSysRoleAll" resultType="com.cvs.pojo.SysRole"> select * from t_sys_role </select> </mapper>
import com.cvs.mapper.SysRoleMapper; import com.cvs.pojo.SysRole; import com.cvs.utils.MyBatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; /** * date: 2021-11-19 10:53 * 单元测试类 * @author Aiden */ public class SysRoleMapperTest /** * 步骤5、创建测试类 *①读取核心配置文件mybatis-config.xml *②创建SqlSessionFactory对象,读取配置文件 *③创建SqlSession对象 *④调用mapper文件进行数据操作 */ @Test public void testGetTotalCount() SqlSession sqlSession = MyBatisUtils.getSqlSession(); int totalCount = MyBatisUtils.getSqlSession().getMapper(SysRoleMapper.class).getTotalCount(); System.out.println("总计录条数:" + totalCount); MyBatisUtils.closeSqlSession(sqlSession); @Test public void getSysRoleAll() SqlSession sqlSession = MyBatisUtils.getSqlSession(); List<SysRole> sysRoleList = sqlSession.getMapper(SysRoleMapper.class).getSysRoleAll(); sysRoleList.forEach(r-> System.out.println(r.getId()+"\\t"+r.getRoleName()); ); MyBatisUtils.closeSqlSession(sqlSession);
package com.cvs.utils; 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; /** * Description: TODO * date: 2021-11-19 12:00 * MyBatis工具辅助类 * @author Aiden */ public class MyBatisUtils /** * 获取 SqlSession * @return */ public static SqlSession getSqlSession() SqlSession sqlSession = null; String resource = "mybatis-config.xml"; InputStream inputStream = null; try inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); sqlSession = sqlSessionFactory.openSession(); catch (IOException e) e.printStackTrace(); return sqlSession; /** * 关闭 sqlSession * @param sqlSession */ public static void closeSqlSession(SqlSession sqlSession) if (sqlSession != null) sqlSession.close();
八、与JDBC直观对比
MyBatis将代码分解包装
九、MyBatis框架优缺点
优点
与JDBC相比,减少了50%以上的代码量
最简单的持久化框架,小巧并简单易学
SQL代码从程序代码中彻底分离,可重用
提供XML标签,支持编写动态SQL
提供映射标签,支持对象与数据库的ORM字段映射
缺点
SQL语句编写工作量大,对开发人员有一定要求
数据库移植性差
十、MyBatis基本要素
MyBatis的核心对象
SqlSessionFactoryBuilder
SqlSessionFactory
SqlSession
mybatis-config.xml 系统核心配置文件
mapper.xml SQL映射文件
十一、MyBatis 核心接口和类的结构
十二、MyBatis 核心对象
☆ SqlSessionFactoryBuilder
用过即丢,其生命周期只存在于方法体内
可重用其来创建多个 SqlSessionFactory 实例
负责构建SqlSessionFactory,并提供多个build方法的重载build(InputStream inputStream, String environment, Properties properties) ; build(Reader reader, String environment, Properties properties); build(Configuration config); //注意: 配置信息以三种形式提供给SqlSessionFactory的build方法: InputStream(字节流)、Reader(字符流)、Configuration(类)
读取XML文件构造方式: String resource = "mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
☆ SqlSessionFactory
SqlSessionFactory 是每个MyBatis应用的核心, 作用:创建SqlSession实例
/* * autoCommit true:关闭事务控制(默认) false:开启事务控制 */ SqlSession session = sqlSessionFactory.openSession(boolean autoCommit);
**作用域:**Application
生命周期与应用的生命周期相同
单例: 存在于整个应用运行时,并且同时只存在一个对象实例 教学指导:
//sqlSessionFactory的生命周期,抛出问题:获取sqlSessionFactory的代码是否可以进行优化? //写在静态代码块下,sqlSessionFactory对象只会被创建一次 //演示示例:编写MyBatisUtil类: //把获取sqlSessionFactory对象的内容抽取到一个工具类中, //注意:factory.openSession(false); //true 为自动提交事物
☆ SqlSession
包含了执行SQL所需的所有方法
对应一次数据库会话,会话结束必须关闭
线程级别,不能共享示例:
SqlSession session = sqlSessionFactory.openSession(); try // do work finally session.close(); //强调sqlSession的关闭
注意:
在SqlSession里可以执行多次SQL语句,但一旦关闭了SqlSession就需要重新创建
SqlSession的获取方式
String resource = "mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is) ; SqlSession sqlSession = factory.openSession();
package cn.smbms.utils; 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; /** * @Created by Aiden */ public class MyBatisUtils private static SqlSessionFactory sqlSessionFactory; //使用mybatis第一步:获取 sqlSessionFactory static String resource = "mybatis-config.xml"; try InputStream is = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); catch (IOException e) e.printStackTrace(); /** * 实例化sqlSessionFactory对象后,可以通过此方法获得sqlSession对象 * sqlSession中完全包含了面向数据库执行sql命令所需的所有方法 * * @return */ public static SqlSession getSqlSession() SqlSession sqlSession = sqlSessionFactory.openSession(); return sqlSession;
SqlSession的两种使用方式
通过SqlSession实例直接运行映射的SQL语句
基于Mapper接口方式操作数据
十三、非集成环境下的最佳实践
SqlSessionFactoryBuilder
用过即丢,推荐作用域范围:方法体内
SqlSessionFactory
最佳作用域范围:应用的全局作用域
生命周期与应用的生命周期相同
SqlSession
线程级
一个request请求期间
十四、系统核心配置文件
mybatis-config.xml 系统核心配置文件
注意元素节点的顺序!
configuration 配置 properties 可以配置在Java 属性配置文件中 settings 修改 MyBatis 在运行时的行为方式 typeAliases 为 Java 类型命名一个别名(简称) typeHandlers 类型处理器 objectFactory 对象工厂 plugins 插件 environments 环境 environment 环境变量 transactionManager 事务管理器 dataSource 数据源 mappers 映射器
1、配置properties元素
配置properties元素的两种方式
通过外部指定的方式(database.properties),实现动态配置
直接配置为xml,实现动态配置database.properties配置文件
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8 username=root password=root
1.通过外部指定的方式(database.properties),实现动态配置
配置properties的resource属性<?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> <!--配置:mysql数据库连接配置文件--> <properties resource="database.properties"/> ...... <dataSource type="POOLED"> <property name="driver" value="$driver"/> <property name="url" value="$url"/>
MyBatis学习总结-MyBatis快速入门的系列教程
MyBatis学习总结-MyBatis快速入门的系列教程
- [MyBatis]MyBatis 使用教程
- [MyBatis]MyBatis XML配置
- [MyBatis]MyBatis XML映射文件
- [MyBatis]MyBatis 动态SQL
- [MyBatis]MyBatis Java API
- [MyBatis]MyBatis SQL语句构建器
- [MyBatis]MyBatis 日志
- [MyBatis]什么是MyBatis
- [MyBatis]MyBatis 从XML创建SqlSessionFactory实例
- [MyBatis]MyBatis不使用XML来创建SqlSessionFactory
- [MyBatis]MyBatis 从SqlSessionFactory获取SqlSession
- [MyBatis]MyBatis 映射SQL语句
- [MyBatis]MyBatis 作用域和生命周期
- [MyBatis]MyBatis Mapper XML配置
- [MyBatis]MyBatis properties元素
- [MyBatis]MyBatis Settings元素
- [MyBatis]MyBatis typeAliases 元素
- [MyBatis]Mybatis-Generator自动生成Dao、Model、Mapping文件
- [MyBatis]MyBatis Generator如何在Eclipse上配置及使用
- [MyBatis]MyBatis typeHandlers元素
以上是关于MyBatis 01 快速入门的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud Spring Boot mybatis分布式微服务云架构快速入门