前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis入门 (思路清晰、轻松上手、并配有关键点解读)

Mybatis入门 (思路清晰、轻松上手、并配有关键点解读)

作者头像
天罡gg
发布2022-12-02 15:21:06
2990
发布2022-12-02 15:21:06
举报
文章被收录于专栏:天罡gg

一、Mybatis简介

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


二、框架搭建(3板斧)

只需要通过如下几个步骤,即可基于Mybatis框架快速开发

  1. 添加maven依赖
  2. 添加全局配置文件
  3. 添加dao层接口和对应的xml映射文件

1板斧. 添加Maven依赖

mybatis和mysql的jar包

代码语言:javascript
复制
	<dependency>
	  <groupId>org.mybatis</groupId>
	  <artifactId>mybatis</artifactId>
	  <version>3.5.3</version>
	</dependency>
	<dependency>
	  <groupId>mysql</groupId>
	  <artifactId>mysql-connector-java</artifactId>
	  <version>5.1.47</version>
	</dependency>

2板斧. 添加全局配置文件

配置文件惯例放在resources目录下,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。数据库名my-test替换成你的.

代码语言:javascript
复制
	<configuration>
	    <environments default="development">
	        <environment id="development">
	            <transactionManager type="JDBC"/>
	            <dataSource type="POOLED">
	                <property name="driver" value="com.mysql.jdbc.Driver"/>
	                <property name="url" value="jdbc:mysql://localhost:3306/my-test?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf8"/>
	                <property name="username" value="root"/>
	                <property name="password" value="root"/>
	            </dataSource>
	        </environment>
	    </environments>
	    <mappers>
	        <mapper resource="com/tiangang/dao/mapper/UserMapper.xml"/>
	    </mappers>
	</configuration>

3板斧. 添加dao层代码和xml映射文件

1). java*\dao\mapper 放dao层对外提供的方法

2). resources*\dao\mapper 放dao层提供的方法的xml映身文件, 与1)对应

3). java*\dao\po 放dao层的数据实体类

编写接口

Mapper接口,就是我们在dao层提供增删改查的接口,注意是接口,为什么是接口?就是因为实现类我们是通过xml实现的动态代理类, 后面会详细说明.

代码语言:javascript
复制
	public interface UserMapper {
	    User selectById(@Param("id") int id);
	}

编写接口映射文件UserMapper.xml

Mapper接口对应的xml映射文件,注意是放在resources目录下,与UserMapper.javapackage包路径相同,从而实现代码和sql语句分离。注意id="selectById接口的方法名selectById一一对应

代码语言:javascript
复制
<?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.tiangang.dao.mapper.UserMapper">
    <select id="selectById" resultType="com.tiangang.dao.po.User" >
        select * from user where id = #{id}
    </select>
</mapper>

PO数据对象

PO对象是指与mysql数据库表对应的数据库对象。

代码语言:javascript
复制
public class User {
    private Long id;
    private String name;
    private Integer age;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

三. 调用4步走

非常细的4步来阐述一次查询的流程

代码语言:javascript
复制
public class MybatisApplication {
    public static void main(String[] args) throws IOException {
        // 1. 得到SqlSessionFactory
        String resource = "mybatis-config.xml";
        Reader reader = Resources.getResourceAsReader(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // 2. 得到SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            // 3. 得到具体Mapper
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            // 4. 执行业务代码:各种的增删改查
            User user = mapper.selectById(1);
            System.out.println(user);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
    }
}

四、解读

1. 关键词说明(重点)

在代码中出现3个Mybatis的关键类,分别是:SqlSession、SqlSessionFactory、SqlSessionFactoryBuilder,这几个类中有个关键词我的理解如下:

  • Session 是指一次会话,即一个线程一个会话
  • Factory结尾 设计模式中的工厂模式,说明SqlSessionFactory是生产SqlSession的工厂
  • Builder结尾 设计模式中的构造者模式,说明SqlSessionFactoryBuilder是用来构造SqlSessionFactory的

2. 作用域(Scope)和生命周期(重点)

  • SqlSessionFactoryBuilder 这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。
  • SqlSessionFactory SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。 因此 SqlSessionFactory 的最佳作用域是应用作用域(比如使用单例模式)。
  • *SqlSession 每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。每次收到 HTTP 请求,就可以打开一个 SqlSession,返回一个响应后,就关闭它。 这个关闭操作很重要,为了确保每次都能执行关闭操作,你应该把这个关闭操作放到 finally 块中。

五. 程序运行结果

运行MybatisApplication.main,输出以下结果,大功告成!


六、使用环境

本文基于

mysql测试表

代码语言:javascript
复制
CREATE TABLE `user`  (
  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `age` tinyint(1) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
insert into `user` VALUES (1,'天罡gg',18);

七. 完整源码下载

https://download.csdn.net/download/scm_2008/86502771


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Mybatis简介
  • 二、框架搭建(3板斧)
    • 1板斧. 添加Maven依赖
      • 2板斧. 添加全局配置文件
        • 3板斧. 添加dao层代码和xml映射文件
          • 编写接口
          • 编写接口映射文件UserMapper.xml
          • PO数据对象
      • 三. 调用4步走
      • 四、解读
        • 1. 关键词说明(重点)
          • 2. 作用域(Scope)和生命周期(重点)
          • 五. 程序运行结果
          • 六、使用环境
          • 七. 完整源码下载
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档