MyBatis 01 快速入门
MyBatis 01 快速入门
文章目录
- MyBatis 01 快速入门
- 一、学习目标
- 二、为什么需要框架技术
- 三、框架技术介绍
- 四、主流框架介绍
- 五、持久化与ORM
- 六、MyBatis简介
- 七、搭建MyBatis开发环境
- 八、与JDBC直观对比
- 九、MyBatis框架优缺点
- 十、MyBatis基本要素
- 十一、MyBatis 核心接口和类的结构
- 十二、MyBatis 核心对象
- 十三、非集成环境下的最佳实践
- 十四、系统核心配置文件
- 1、配置properties元素
- 2、settings元素
- 3、typeAliases元素
- 4、environments元素
- 5、mappers元素
- 6、mapper.xml SQL映射文件模板
- 十五、本章总结
一、学习目标
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 configurationPUBLIC "-//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; //idprivate 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文件进行数据操作*/@Testpublic void testGetTotalCount() {SqlSession sqlSession = MyBatisUtils.getSqlSession();int totalCount = MyBatisUtils.getSqlSession().getMapper(SysRoleMapper.class).getTotalCount();System.out.println("总计录条数:" + totalCount);MyBatisUtils.closeSqlSession(sqlSession);}@Testpublic 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第一步:获取 sqlSessionFactorystatic {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 configurationPUBLIC "-//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}"/><property name="username" value="${user}"/><property name="password" value="${password}"/></dataSource><!--每一个Mapper.xml文件都必须在mybatis核心配置文件中注册--><mappers><mapper resource="cn/smbms/dao/UserMapper.xml"/></mappers> </configuration>
2.直接配置为xml,实现动态配置
配置property的name和value<properties><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms"/><property name="user" value="root"/><property name="password" value="root"/> </properties> ...... <dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${user}"/><property name="password" value="${password}"/> </dataSource><!--每一个Mapper.xml文件都必须在mybatis核心配置文件中注册--> <mappers><mapper resource="cn/smbms/dao/UserMapper.xml"/> </mappers>
2、settings元素
用来修改MyBatis运行时的行为方式
主要是MyBatis的一些全局配置属性的设置autoMappingBehavior :此设置项,下次课讲解resultMap的时候会用到,需要强调一下
设置项 描述 允许值 默认值 cacheEnabled 对在此配置文件下的所有cache 进行全局性开/关设置 true | false true lazyLoadingEnabled 全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载 true | false true autoMappingBehavior MyBatis对于resultMap自动映射匹配级别 NONE 、PARTIAL 、FULL PARTIAL ……(9个) … … …
3、typeAliases元素
类型别名
仅仅只关联XML配置,简写冗长的Java类名<typeAliases><typeAlias alias="User" type="cn.smbms.pojo.User"/> </typeAliases>
<typeAliases><!--默认名称:指定包下JavaBean的非限定类名--><package name ="cn.smbms.pojo" /> </typeAliases>
4、environments元素
environments元素 表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上
子元素节点:environment,但是必须指定其中一个为默认运行环境(通过default指定)注意:每个SqlSessionFactory实例只能选择一个运行环境
<environments default="development"><!--默认的运行环境 ID--> <environment id="development"> <!--运行环境 ID--> <transactionManager type="JDBC"/> <!--事务管理器配置--> <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> <environment id="test"> …… </environment> </environments>
transactionManager-事务管理器
语法:
<!-- JDBC:JDBC MANAGED (托管)--> <transactionManager type="[ JDBC | MANAGED ]" />
dataSource
dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源
有三种内建的数据源类型语法:
<dataSource type=" [UNPOOLED | POOLED | JNDI]" />
5、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>
6、mapper.xml SQL映射文件模板
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace 绑定一个对应的dao/mapper接口--> <mapper namespace="cn.smbms.dao.UserMapper"><!--查询语句--><select id="getUserList" resultType="cn.smbms.pojo.User">select * from user</select><select id="getUserById" resultType="cn.smbms.pojo.User" parameterType="int">select * from user where id =#{id}</select><insert id="insert" parameterType="cn.smbms.pojo.User">insert into user(name,pwd) values(#{name},#{pwd})</insert><update id="update" parameterType="cn.smbms.pojo.User">update user set name=#{name},pwd=#{pwd} where id=#{id}</update> </mapper>
7、POM.xml 防止资源导出失败问题配置
<!--build中配置resources ,防止资源导出失败问题--><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources>
十五、本章总结
MyBatis 01 快速入门相关推荐
- MyBatis之快速入门
MyBatis之快速入门 2017/9/30 首先我要明确告诉大家的是MyBatis是一个java持久层框架,以前我们都是用jdbc来将我们的java程序与数据库相连接,而MyBatis是对jdbc的 ...
- java day53【 Mybatis框架概述 、 Mybatis 框架快速入门、自定义 Mybatis 框架 】
第1章 框架概述 1.1 什么是框架 1.1.1 什么是框架 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种 定义认为,框架是可被应用开发者定 ...
- MyBatis框架快速入门
MyBatis框架快速入门 入门案例 创建一个关于Mybatis项目 首先创建一个空项目,然后新建一个moudle,选择quickstart,接下来把模块放到空项目之下.即可 实现mybatis查询数 ...
- JavaScript学习记录01快速入门、基本语法、严格检查模式
文章目录 JavaScript学习记录01快速入门.基本语法.严格检查模式 1.1什么是JavaScript 1.2认识JavaScript框架 1.3快速入门 1.4基本语法入门 1.5数据类型简介 ...
- Mybatis(day1)快速入门
框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法:另一种定义认为,框架是可被应用开发者定制的应用骨架.前者是从应用方面而后者是从目的方面给出的定义. 简 ...
- mybatis的快速入门
说明: 在这个部分,会写个简单的入门案例. 然后,会重新写一个,更加严格的程序案例. 一:案例一 1.最终的目录结构 2.新建一个普通的Java项目,并新建lib 在项目名上右键,不是src. 3.导 ...
- 第一:Java+MyBatis(快速入门)
MyBatis 简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...
- springboot 整合mybatis_SpringBoot整合MyBatis框架快速入门
MyBatis概述: mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动.创建连接.创建statemenet等繁 ...
- MyBatis:快速入门代码实例(maven代码版)
文章目录 1. MyBatis实例 1.1 添加Mybatis依赖 1.2 创建MyBatis配置文件 1.3.创建po类 1.4.创建映射文件 #{}: 表示sql参数,一个占位符. 1.5.测试 ...
最新文章
- mysql的安装胚子_Mysql安装
- 有这么一群人,他们通过AI撬动世界!
- UA OPTI570 量子力学4 带不含时的标量势的粒子的薛定谔方程
- MATLAB实战系列(四)- LabVIEW初探
- 【网址收藏】windows安装Docker Desktop常见问题整理
- 今天是魔兽世界关服的日子
- 安卓 Input Events(输入事件)
- 安全狗结合服云,网络管理倍儿轻松
- 2019最新k8s集群搭建教程 (centos k8s 搭建)
- oracle数据库中的一些操作
- unet服务器向客户端发消息,unet
- 【java】输出素数
- 微信小程序使用QQ音乐API完整实例
- VS2010使用教程(使用VS2010编写C语言程序)
- CAD图纸格式转换怎么操作?如何转换常见图纸格式?
- 深圳“毕业”生灵活就业社保缴纳方式
- POI-获取Excel中合并单元格问题
- swfobject1.5
- 如何复制网页上不能复制的文本!!!
- java求三角形周长 面积_用java如何求三角形的周长和面积?
热门文章
- 因果信号的傅里叶变换_信号与系统实验报告3实验3 傅里叶变换及其性质
- hexo butterfly主题 添加全局吸底APlayer
- python + win32api,win32gui,win32con 写 exe 窗口的时候,怎么创建按钮呢?
- OS第二章五大经典PV
- 数据结构顺序表和单链表优缺点
- 前端如何实现整套视频直播技术流程(以打扑克直播软件为例)
- python基本类型介绍
- QQ个性域名邮箱(免费企业邮箱)快速申请
- 西安电子科技大学2018考研复试计算机类上机试题总结
- 齐次弦振动方程的matlab解法,ode45求解振动微分方程