MyBatis(一、快速入门)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 原始JDBC操作 Mybatis 快速入门 Mybatis 增删改查 Mybatis mapper properties

1、MyBatis的简介

1)什么是 MyBatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

mybatis 是一个优秀的基于java的持久层框架,它内部封装了 jdbc,使开发者只需要关注sql语句本身,而不需要花费精力 去处理加载驱动、创建连接、创建statement等繁杂的过程。

mybatis通过xml或注解的方式将要执行的各种 statement配 置起来,并通过java对象和statement中sql的动态参数进行 映射生成最终执行的sql语句。

最后mybatis框架执行sql并将结果映射为java对象并返回。采 用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了 封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。

mybatis官网:https://mybatis.org/mybatis-3/zh/index.html

image-20220806104131158.png

2)原始jdbc操作

  • 查询数据
//注册驱动Class.forName("com.mysql.jdbc.Driver");
//获得连接Connectionconnection=DriverManger.getConnection("jdbc:mysql:///test,"root","root");//获得statementPreparedStatementstatement=connection.prepareStatement("select * from user");
//执行查询ResultSetresultSet=statement.executeQuery();
//遍历结果集while(resultSet.next()){
//封装实体Useruser=newUser();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.serPassword(resultSet.getString("password"));
//user实体封装完毕System.out.printLn(user);
}
//释放资源resultSet.close();
statement.close();
connection.close();
  • 插入数据
//模拟实体对象Useruser=newUser();
user.setId(2);
user.setUsername("tom");
user,setPassword("123");
//注册驱动Class.forName("com.mysql.jdbc.Driver");
//获得连接Connectionconnection=DriverManager.getConnection("jdbc:mysql:///test","root","root");
//获得statementPreparedStatementstatement=connection.prepareStatement("insert into user(id,username,password)values(?,?,?)");
//设置占位符参数statement.setInt(1,user.getId());
statement.setString(2,user.getUsername());
statement.setString(3,user.getPassword());
//执行更新操作statement.executeUpdate();
//释放资源statement.close();
connection.close();

3)存在的问题及解决方案

原始jdbc开发存在的问题如下:

  • 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能
  • sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变java代码。
  • 查询操作时,需要手动将结果集中的数据手动封装到实体中。插入操作时,需要手动将实体的数据设置到sql语句的占位 符位置

应对上述问题给出的解决方案:

  • 使用数据库连接池初始化连接资源
  • 将sql语句抽取到xml配置文件中
  • 使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射

2、 MyBatis的快速入门

MyBatis开发步骤:

① 添加MyBatis的坐标

将下面的依赖代码置于 pom.xml 文件中:

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>x.x.x</version></dependency>

mysql坐标:

     

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version></dependency>

② 创建user数据表

image-20220806105326833.png

③ 编写User实体类

public class User {

   private int id;

   private String username;

   private String password;

   public int getId() {

       return id;

   }

   public void setId(int id) {

       this.id = id;

   }

   public String getUsername() {

       return username;

   }

   public void setUsername(String username) {

       this.username = username;

   }

   public String getPassword() {

       return password;

   }

   public void setPassword(String password) {

       this.password = password;

   }

   @Override

   public String toString() {

       return "User{" +

               "id=" + id +

               ", username='" + username + '\'' +

               ", password='" + password + '\'' +

               '}';

   }

}

④ 编写映射文件UserMapper.xml

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="userMapper"><!--查询操作--><selectid="findAll"resultType="user">select*fromuser</select></mapper>

⑤ 编写核心文件SqlMapConfig.xml

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--通过properties标签加载外部properties文件--><propertiesresource="jdbc.properties"></properties><!--自定义别名--><typeAliases><typeAliastype="com.xmp.domain.User"alias="user"></typeAlias></typeAliases><!--数据源环境--><environmentsdefault="developement"><environmentid="developement"><transactionManagertype="JDBC"></transactionManager><dataSourcetype="POOLED"><propertyname="driver"value="${jdbc.driver}"/><propertyname="url"value="${jdbc.url}"/><propertyname="username"value="${jdbc.username}"/><propertyname="password"value="${jdbc.password}"/></dataSource></environment></environments><!--加载映射文件--><mappers><mapperresource="com/xmp/mapper/UserMapper.xml"></mapper></mappers></configuration>

⑥ 编写测试类

@Test//查询操作publicvoidtest1() throwsIOException {
//获得核心配置文件InputStreamresourceAsStream=Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象SqlSessionsqlSession=sqlSessionFactory.openSession();
//执行操作  参数:namespace+idList<User>userList=sqlSession.selectList("userMapper.findAll");
//打印数据System.out.println(userList);
//释放资源sqlSession.close();
    }

image-20220806172409760.png

3、MyBatis的映射文件概述

image-20220806172452840.png

4、MyBatis的增删改查操作

4.1 插入数据操作

<!--插入操作-->

   <insert id="save" parameterType="com.xmp.domain.User">

       insert into user values(#{id},#{username},#{password})

   </insert>

@Test//插入操作publicvoidtest2() throwsIOException {
//模拟user对象Useruser=newUser();
user.setUsername("xxx");
user.setPassword("abc");
//获得核心配置文件InputStreamresourceAsStream=Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象SqlSessionsqlSession=sqlSessionFactory.openSession(true);
//执行操作  参数:namespace+idsqlSession.insert("userMapper.save",user);
//mybatis执行更新操作  提交事务//sqlSession.commit();//释放资源sqlSession.close();
    }

4.2 删除数据操作

<!--删除操作-->

   <delete id="delete" parameterType="int">

       delete from user where id=#{abc}

   </delete>

 

@Test//删除操作publicvoidtest4() throwsIOException {
//获得核心配置文件InputStreamresourceAsStream=Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象SqlSessionsqlSession=sqlSessionFactory.openSession();
//执行操作  参数:namespace+idsqlSession.delete("userMapper.delete",8);
//mybatis执行更新操作  提交事务sqlSession.commit();
//释放资源sqlSession.close();
    }

4.3 修改数据操作

<!--修改操作-->

   <update id="update" parameterType="com.xmp.domain.User">

       update user set username=#{username},password=#{password} where id=#{id}

   </update>

@Test//修改操作publicvoidtest3() throwsIOException {
//模拟user对象Useruser=newUser();
user.setId(7);
user.setUsername("lucy");
user.setPassword("123");
//获得核心配置文件InputStreamresourceAsStream=Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象SqlSessionsqlSession=sqlSessionFactory.openSession();
//执行操作  参数:namespace+idsqlSession.update("userMapper.update",user);
//mybatis执行更新操作  提交事务sqlSession.commit();
//释放资源sqlSession.close();
    }

4.4 查询数据操作

<!--根据id进行查询-->

   <select id="findById" resultType="user" parameterType="int">

       select * from user where id=#{id}

   </select>

@Test//查询一个对象publicvoidtest5() throwsIOException {
//获得核心配置文件InputStreamresourceAsStream=Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(resourceAsStream);
//获得session回话对象SqlSessionsqlSession=sqlSessionFactory.openSession();
//执行操作  参数:namespace+idUseruser=sqlSession.selectOne("userMapper.findById", 1);
//打印数据System.out.println(user);
//释放资源sqlSession.close();
    }

5、MyBatis核心配置文件概述

1)核心配置文件层级关系

configuration配置

  • properties 属性
  • srttings 设置
  • typeAliases 类型别名
  • typeHandlers 类型处理器
  • objectFactory 对象工厂
  • plugins 插件
  • environments 环境
  • environment 环境变量
    transactionManager 事务管理器
  •    dataSource 数据源
  • databaseldProvider 数据库厂商表识
  • mappers 映射器

2)常用配置解析

1、environments标签

数据库环境的配置,支持多环境配置

image-20220806174011179.png

2、 mapper标签

该标签的作用是加载映射的,加载方式有如下几种:

  • 使用相对于类路径的资源引用,例如: < mapper resource="org/mybatis/builder/AuthorMapper.xml"/ >
  • 使用完全限定资源定位符(URL),例如: < mapper url="file:///var/mappers/AuthorMapper.xml"/ >
  • 使用映射器接口实现类的完全限定类名,例如:< mapper class="org.mybatis.builder.AuthorMapper"/ >
  • 将包内的映射器接口实现全部注册为映射器,例如:< package name="org.mybatis.builder"/ >

3、Properties标签

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

jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8jdbc.username=rootjdbc.password=root

  <!--通过properties标签加载外部properties文件-->

   <properties resource="jdbc.properties"></properties>

   

  <!--数据源环境-->

   <environments default="developement">

       <environment id="developement">

           <transactionManager type="JDBC"></transactionManager>

           <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>

6、MyBatis相应API

常用API:SqlSessionFactorybuild(InputStreaminputStream)
通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象<User>List<User>selectList(Stringstatement, Objectparameter) 
intinsert(Stringstatement, Objectparameter) 
intupdate(Stringstatement, Objectparameter) 
intdelete(Stringstatement, Objectparameter)
操作事务的方法主要有:voidcommit()  
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL Java 数据库连接
MyBatis快速入门以及环境搭建和CRUD的实现
MyBatis快速入门以及环境搭建和CRUD的实现
30 0
|
7月前
|
SQL Java 关系型数据库
Mybatis知识【Mybatis快速入门】第二章
Mybatis知识【Mybatis快速入门】第二章
|
3月前
|
SQL Java 数据库连接
【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门
【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门
53 0
|
9月前
|
Java 关系型数据库 MySQL
MyBatis(简化数据库操作的持久层框架)--快速入门[上]
MyBatis(简化数据库操作的持久层框架)--快速入门[上]
64 0
|
10月前
|
Java 关系型数据库 MySQL
SpringBoot使用Mybatis 快速入门
SpringBoot使用Mybatis 快速入门
76 0
SpringBoot使用Mybatis 快速入门
|
5月前
|
XML 算法 Java
MyBatis-Plus 实战教程一 快速入门(二)
MyBatis-Plus 实战教程一 快速入门
49 0
|
5月前
|
Java 关系型数据库 数据库连接
MyBatis-Plus 实战教程一 快速入门(一)
MyBatis-Plus 实战教程一 快速入门
52 0
|
7月前
|
XML SQL 算法
【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门(下)
3.常见注解 在刚刚的入门案例中,我们仅仅引入了依赖,继承了BaseMapper就能使用MybatisPlus,非常简单。但是问题来了: MybatisPlus如何知道我们要查询的是哪张表?表中有哪些字段呢?
74 0
|
7月前
|
SQL Java 数据库连接
【MyBatis-Plus】快速精通Mybatis-plus框架—快速入门(上)
大家在日常开发中应该能发现,单表的CRUD功能代码重复度很高,也没有什么难度。而这部分代码量往往比较大,开发起来比较费时。
52 0
|
8月前
|
SQL Java 数据库连接
Mybatis快速入门
Mybatis快速入门
29 0