小工具      在线工具  汉语词典  css  js  c++  java

Mybatis入门(思路清晰、简单易用、重点解读)

Mybatis,mybatis,java 额外说明

收录于:40天前


一、Mybatis简介

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


二、框架搭建(3板斧)

您只需要通过以下步骤即可快速基于Mybatis框架进行开发。

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

1板斧. 添加Maven依赖

mybatis和mysql的jar包

	<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替换成你的.

	<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\映射器 放dao层对外提供的方法
2). 资源*\dao\mapper 放dao层提供的方法的xml映身文件, 与1)对应
3). java*\dao\po 放dao层的数据实体类
在这里插入图片描述

编写接口

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

	public interface UserMapper {
    
	    User selectById(@Param("id") int id);
	}

编写接口映射文件UserMapper.xml

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

<?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数据库表对应的数据库对象。

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步讲解查询过程

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. 关键词说明(强调)

代码中出现了三个关键的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 测试表

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


. . .

相关推荐

额外说明

==和equals的区别

String本身是final类 字符串是不可变的对象     == 比较的是值 比较基本的数据类型,比较的是数值 ,基本数据类型就在栈 比较引用类型:比较引用指向的值(地址) ,   equals 默认比较也是地址,因为这个方法的最初定义在Object上

额外说明

mui选项卡(从A页跳转到B页)

来源:https://blog.csdn.net/qq_38586903/article/details/82910549 说明:原来A页面跳转B页面,选项卡可以,但是内容区不同步。 效果:     本文章就是解决:A页面跳转B页面 思路:需要显示的页面

额外说明

Python 第十节 第十一课

[toc] os 和 os.path 模块     os 模块可以帮助我们直接对操作系统进行操作. 我们可以直接调用操作系统的可执行文件, 命令, 直接操作文件, 目录等等. 在系统运维的核心基础. os 调用操作系统文件和命令     os.syste

额外说明

26.Python文件I/O(四)【os模块&shutil模块详解】

目录: 每篇前言: Python文件I/O(四) 1.1 os模块方法 1.1.1 os递归删除目录 1.1.2 os常用的方法 1.1.3 os.walk()深入讲解 1.1.4 树形显示目录 1.1.5 os.path常用方法 2.1 Shutil的

额外说明

VC++从工程的rc资源中将资源文件取出来或读出来(附源码)

VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新.

额外说明

【Rust 基础篇】Rust 早期释放(2-Phase Drop)的使用

导言 在 Rust 中,早期释放(2-Phase Drop)是一种特殊的机制,用于在析构函数中提前释放资源。通过使用早期释放机制,我们可以控制资源的释放顺序,避免资源泄漏和不一致的状态。 本篇博客将详细介绍 Rust 中早期释放的使用方法和相关概念,以及

额外说明

Python案例:打印杨辉三角形

文章目录 一、杨辉三角形 二、二项式定理 三、编程打印杨辉三角形 1、采用二维列表来处理杨辉三角 2、编写程序 - 杨辉三角.py 3、运行程序,查看结果 4、等腰三角形格式输出杨辉三角形 一、杨辉三角形 杨辉三角,是二项式系数在三角形中的一种几何排列,

额外说明

机器学习强基计划2-3:图文详解决策树预剪枝、后剪枝原理+Python实现

目录 0 写在前面 1 什么是剪枝? 2 预剪枝与后剪枝 3 Python实现决策树剪枝算法 0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理;“广”在分析多个机器学习模型:决策树、支持

额外说明

wordpress 主机_您的虚拟主机PHP更新如何影响您的WordPress网站

WordPress 托管 最近,我们的一位用户联系我们,告知他们从托管提供商处收到了有关升级到新版本 PHP 的通知。 最近,我们的一位用户联系我们,告知他们从托管提供商那里收到了有关升级到新版本 PHP 的通知。 WordPress 是用 PHP 编程

额外说明

React PureComponent刷新问题

当组件继承自PureComponent时,必须使用以下方法更新数据页

ads via 小工具