MyBatis入门操作

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MyBatis入门操作

1.Mybatis简介



1.1 原始jdbc操作(插入数据)


原始jdbc开发存在的问题如下:
① 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能
② sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
③ 查询操作时,需要手动将结果集中的数据手动封装到实体中。插入操作时,需要手动将实体的数据设置到sql语句的占位
符位置
应对上述问题给出的解决方案:
① 使用数据库连接池初始化连接资源
② 将sql语句抽取到xml配置文件中
③ 使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射

1.2 原始jdbc操作的分析


2. Mybatis的快速入门



2.1 MyBatis开发步骤

MyBatis官网地址:http://www.mybatis.org/mybatis-3/ MyBatis开发步骤:

① 添加MyBatis的坐标
② 创建user数据表
③ 编写User实体类
④ 编写映射文件UserMapper.xml
⑤ 编写核心文件SqlMapConfig.xml
⑥ 编写测试类


2.2 环境搭建

1. 导入MyBatis的坐标和其他相关坐标
<!--mybatis 坐标 -->
< dependency >
< groupId >org.mybatis</ groupId >
< artifactId >mybatis</ artifactId >
< version >3.4.5</ version >
</ dependency >
<!--mysql 驱动坐标 -->
< dependency >
< groupId >mysql</ groupId >
< artifactId >mysql-connector-java</ artifactId >
< version >5.1.6</ version >
< scope >runtime</ scope >
</ dependency >


2. 创建user数据表
3. 编写User实体
public class User {
private int id ;
private String username ;
private String password ;
// 省略 get 个 set 方法
}


4. 编写UserMapper映射文件
<? 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="userMapper" >
< select id="findAll" resultType="com.itheima.domain.User" >
select * from User
</ select >
</ mapper >


5. 编写MyBatis核心文件
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config3.0//EN“ "http://mybatis.org/dtd/mybatis- 3 - config.dtd" >
< configuration >
< environments default="development" >
< environment id="development" >
< transactionManagertype="JDBC" />
< dataSourcetype="POOLED" >
< property name="driver" value="com.mysql.jdbc.Driver" />< property name="url" value="jdbc:mysql:///test" />
< property name="username" value="root" />< property name="password" value="root" />
</ dataSource >
</ environment >
</ environments >
< mappers > < mapper resource="com/itheima/mapper/UserMapper.xml" /> </ mappers >
</ configuration >


2.3 编写测试代码

// 加载核心配置文件
InputStreamresourceAsStream= Resources. getResourceAsStream ( "SqlMapConfig.xml" );
// 获得 sqlSession 工厂对象
SqlSessionFactorysqlSessionFactory= new SqlSessionFactoryBuilder().build(re sourceAsStream);
// 获得 sqlSession 对象
SqlSessionsqlSession= sqlSessionFactory.openSession();
// 执行 sql 语句
List<User> userList= sqlSession.selectList( "userMapper.findAll" );
// 打印结果
System. out .println(userList);
// 释放资源
sqlSession.close();


2.4 知识小结

MyBatis开发步骤:

① 添加MyBatis的坐标
② 创建user数据表
③ 编写User实体类
④ 编写映射文件UserMapper.xml
⑤ 编写核心文件SqlMapConfig.xml
⑥ 编写测试类


3. MyBatis的映射文件概述



根标签
<? 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="userMapper" >
< select id="findAll" resultType="com.itheima.domain.User" >
select * from User
</ select >
</ mapper >


映射文件DTD约束头

命名空间,与下面语句的id

查询操作,可选的还有 一起组成查询的标识

insert、update、

delete 查询结果对应的实体类型

要执行的sql语句
语句的id标识,与上面的命名空
间一起组成查询的标识


4. MyBatis的增删改查操作



4.1 MyBatis的插入数据操作

1. 编写UserMapper映射文件
< mapper namespace="userMapper" >
< insert id="add" parameterType="com.itheima.domain.User" >
insert into user values(#{id},#{username},#{password})
</ insert >
</ mapper >


2. 编写插入实体User的代码
InputStreamresourceAsStream= Resources. getResourceAsStream ( "SqlMapConfig.xml" );
SqlSessionFactorysqlSessionFactory= new SqlSessionFactoryBuilder().build(re sourceAsStream);
SqlSessionsqlSession= sqlSessionFactory.openSession();
int insert = sqlSession.insert( "userMapper.add" , user);
System. out .println(insert);
// 提交事务
sqlSession.commit();
sqlSession.close();


3. 插入操作注意问题
  • 插入语句使用insert标签
  • 在映射文件中使用parameterType属性指定要插入的数据类型
  • Sql语句中使用#{实体属性名}方式引用实体中的属性值
  • 插入操作使用的API是sqlSession.insert(“命名空间.id”,实体对象);
  • 插入操作涉及数据库数据变化,所以要使用sqlSession对象显示的提交事务,
    即sqlSession.commit()


4.2 MyBatis的修改数据操作

1. 编写UserMapper映射文件
< mapper namespace="userMapper" >
< update id="update" parameterType="com.itheima.domain.User" >
update user set username=#{username},password=#{password} where id=#{id}
</ update >
</ mapper >

4.2 MyBatis的修改数据操作

2. 编写修改实体User的代码
InputStreamresourceAsStream= Resources. getResourceAsStream ( "SqlMapConfig.xml" );
SqlSessionFactorysqlSessionFactory= new SqlSessionFactoryBuilder().build(re sourceAsStream);
SqlSessionsqlSession= sqlSessionFactory.openSession();
int update = sqlSession.update( "userMapper.update" , user);
System. out .println(update);
sqlSession.commit();
sqlSession.close();


3. 修改操作注意问题
  • 修改语句使用update标签
  • 修改操作使用的API是sqlSession.update(“命名空间.id”,实体对象);


4.3 MyBatis的删除数据操作

1. 编写UserMapper映射文件
< mapper namespace="userMapper" >
< delete id="delete" parameterType="java.lang.Integer" >
delete from user where id=#{id}
</ delete >
</ mapper >


2. 编写删除数据的代码
InputStreamresourceAsStream= Resources. getResourceAsStream ( "SqlMapConfig.xml" );
SqlSessionFactorysqlSessionFactory= new SqlSessionFactoryBuilder().build(re sourceAsStream);
SqlSessionsqlSession= sqlSessionFactory.openSession();
int delete = sqlSession.delete( "userMapper.delete" , 3 );
System. out .println(delete);
sqlSession.commit();
sqlSession.close();


4.4 知识小结

增删改查映射配置与API:

查询数据:List<User> userList = sqlSession.selectList( "userMapper.findAll" );
< select id="findAll" resultType="com.itheima.domain.User" >
select * from User
</ select >
添加数据:sqlSession.insert( "userMapper.add" , user);
< insert id="add" parameterType="com.itheima.domain.User" >
insert into user values(#{id},#{username},#{password})
</ insert >
修改数据:sqlSession.update( "userMapper.update" , user);
< update id="update" parameterType="com.itheima.domain.User" >
update user set username=#{username},password=#{password} where id=#{id}
</ update >
删除数据:sqlSession.delete( "userMapper.delete" , 3 );
< delete id="delete" parameterType="java.lang.Integer" >
delete from user where id=#{id}
</ delete >


5. MyBatis核心配置文件概述



5.2 MyBatis常用配置解析

1. environments标签
数据库环境的配置,支持多环境配置
< environments default="development" >
< environment id="development" >
< transactionManager type="JDBC" />
< dataSource type="POOLED" >
< property name="driver" value="${jdbc.driver}" />
< property name="url" value="${jdbc.url}" />
< property name="username" value="${jdbc.username}" />
< property name="password" value="${jdbc.password}" />
</ dataSource >
</ environment >
</ environments >


5.2 MyBatis常用配置解析

1. environments标签
其中,事务管理器(transactionManager)类型有两种:
  • JDBC:这个配置就是直接使用了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
  • MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如JEE应用服务器的上下文)。默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将closeConnection属性设置为false 来阻止它默认的关闭行为。


其中,数据源(dataSource)类型有三种:


  • UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。
  • POOLED:这种数据源的实现利用“池”的概念将JDBC 连接对象组织起来。
  • JNDI:这个数据源的实现是为了能在如EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个JNDI 上下文的引用。


2. mapper标签
该标签的作用是加载映射的,加载方式有如下几种:
  • 使用相对于类路径的资源引用,例如:
  • 使用完全限定资源定位符(URL),例如:
  • 使用映射器接口实现类的完全限定类名,例如:
  • 将包内的映射器接口实现全部注册为映射器,例如:


3. Properties标签
实际开发中,习惯将数据源的配置信息单独抽取成一个properties文件,该标签可以加载额外配置的properties文件


4. typeAliases标签
类型别名是为Java 类型设置一个短的名字。原来的类型名称配置如下
< select id="findAll" resultType="com.itheima.domain.User" >
select * from User
</ select >


配置typeAliases,为com.itheima.domain.User定义别名为user


< typeAliases >
< typeAliastype="com.itheima.domain.User“ alias="user" ></ typeAlias >
</ typeAliases >
< select id="findAll" resultType=“user" >
select * from User
</ select >


User全限定名称

user为别名


4. typeAliases标签
上面我们是自定义的别名,mybatis框架已经为我们设置好的一些常用的类型的别名


别名 数据类型


string String
long Long
int Integer
double Double
boolean Boolean
... ... ... ...


5.3 知识小结


核心配置文件常用配置:

1 、properties标签:该标签可以加载外部的properties文件
2 、typeAliases标签:设置类型别名
3 、mappers标签:加载映射配置


6.1 SqlSession工厂构建器SqlSessionFactoryBuilder

常用API:SqlSessionFactory build(InputStreaminputStream)
通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象


String resource = "org/mybatis/builder/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);

其中,Resources 工具类,这个类在org.apache.ibatis.io 包中。Resources 类帮助你从类路径下、文件系统或 一个web URL 中加载资源文件。


6. MyBatis相应API



6.2 SqlSession工厂对象SqlSessionFactory

SqlSessionFactory有多个个方法创建SqlSession实例。常用的有如下两个:
方法 解释
openSession() 会默认开启一个事务,但事务不会自 动提交 ,也就 意味着 需要手 动提交该事务,更新操作数据才会持久化 到数据 库中
openSession(boolean
autoCommit) 参数为是否自动提交,如果设置为true,那么不需 要手动 提交事 务


6.3 SqlSession会话对象

SqlSession实例在MyBatis中是非常强大的一个类。在这里你会看到所有执行语句、提交或回滚事务和获取映射器实例的方法。
执行语句的方法主要有:


操作事务的方法主要有:
<T> T selectOne(String statement, Object parameter)
<E> List<E> selectList(String statement, Object parameter)
int insert(String statement, Object parameter)
int update(String statement, Object parameter)
int delete(String statement, Object parameter)
voidcommit()
voidrollback()
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
353 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
5月前
|
XML Java 数据库连接
【MyBatis】MyBatis操作数据库(一)
【MyBatis】MyBatis操作数据库(一)
52 1
|
1月前
|
SQL Java 数据库连接
Mybatis入门(select标签)
这篇文章介绍了Mybatis中`select`标签的基本用法及其相关属性,并通过示例展示了如何配置和执行SQL查询语句。
42 0
Mybatis入门(select标签)
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
3月前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
200 0
|
5月前
|
缓存 Java 数据库连接
我们后端程序员不是操作MyBatis的CRUD Boy
大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们接着新的一篇Java进阶指南。为啥都戏称后端是CRUD Boy?难道就因为天天怼着数据库CRUD吗?要我说,是这个岗位的位置要的就是你CRUD,你不得不CRUD。哪有公司天天能给你搭建高并发、高可用、大数据框架的活呢,一条业务线总要成长吧,慢慢成熟了就要装修工来缝缝补补、美化美化,也就是CRUD的活。不能妄自菲薄CRUD Boy,我们是后端工程师。今天来指南下操作数据库之MyBatis框架。
127 3
我们后端程序员不是操作MyBatis的CRUD Boy
|
4月前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
|
5月前
|
Java 关系型数据库 数据库连接
技术好文共享:第一讲mybatis入门知识
技术好文共享:第一讲mybatis入门知识
35 6
|
5月前
|
Java 关系型数据库 MySQL
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
50 4
|
5月前
|
Java 程序员
浅浅纪念花一个月完成Springboot+Mybatis+Springmvc+Vue2+elementUI的前后端交互入门项目
浅浅纪念花一个月完成Springboot+Mybatis+Springmvc+Vue2+elementUI的前后端交互入门项目
52 1