【MyBatis】搭建MyBatis

news2024/9/22 5:32:16

1、MyBatis简介

1.1、MyBatis历史

MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。 iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。

1.2、MyBatis特性

1) MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架

2) MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集

3) MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录

4) MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架

1.3、MyBatis下载

MyBatis下载地址:https://github.com/mybatis/mybatis-3

在这里插入图片描述

在这里插入图片描述

1.4、和其它持久化层技术对比

  • JDBC

    • SQL 夹杂在Java代码中耦合度高,导致硬编码内伤
    • 维护不易且实际开发需求中 SQL 有变化,频繁修改的情况多见
    • 代码冗长,开发效率低
  • Hibernate 和 JPA

    • 操作简便,开发效率高
    • 程序中的长难复杂 SQL 需要绕过框架
    • 内部自动生产的 SQL,不容易做特殊优化
    • 基于全映射的全自动框架,大量字段的 POJO 进行部分映射时比较困难
    • 反射操作太多,导致数据库性能下降
  • MyBatis

    • 轻量级,性能出色
    • SQL 和 Java 编码分开,功能边界清晰,Java代码专注业务、SQL语句专注数据
    • 开发效率稍逊于HIbernate,但是完全能够接受

2、搭建MyBatis

2.1、开发环境

IDE:IntelliJ IDEA

构建工具:maven 3.5.4

MySQL版本:MySQL 8

MyBatis版本:MyBatis 3.5.7

MySQL不同版本的注意事项

1、驱动类driver-class-name

MySQL 5版本使用jdbc5驱动,驱动类使用:com.mysql.jdbc.Driver

MySQL 8版本使用jdbc8驱动,驱动类使用:com.mysql.cj.jdbc.Driver

2、连接地址url

MySQL 5版本的url:

jdbc:mysql://localhost:3306/ssm

MySQL 8版本的url:

jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC

否则运行测试用例报告如下错误:

java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more

2.2、创建maven工程

1、打包方式:jar

2、引入依赖

 <dependencies>
        <!-- Mybatis核心 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!-- junit测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- MySQL驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
    </dependencies>

3、新建数据表

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
    `username` varchar(20) DEFAULT '' COMMENT '用户名',
    `password` varchar(20) DEFAULT '' COMMENT '密码',
    `age` int default 18 COMMENT '年龄',
    `gender` char default '男' COMMENT '性别',
    `email` varchar(50) DEFAULT '' COMMENT '邮箱',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户';

4、新建实体类

import lombok.Data;

@Data
public class User {

    private Integer id;

    private String username;

    private String password;

    private Integer age;

    private String gender;

    private String email;
}

2.3、创建MyBatis的核心配置文件

习惯上命名为mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。将来整合Spring之后,这个配置文件可以省略,所以大家操作时可以直接复制、粘贴。

核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息。

核心配置文件存放的位置是src/main/resources目录下。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--设置连接数据库的环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->
    <mappers>
    	<mapper resource="mappers/UserMapper.xml"/>
    </mappers>
</configuration>

2.4、创建mapper接口

MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要提供实现类。

public interface UserMapper {
    
    /**
    * 添加用户信息
    */
    int insertUser();
}

2.5、创建MyBatis的映射文件

相关概念:ORMObject Relationship Mapping)对象关系映射。

  • 对象:Java的实体类对象

  • 关系:关系型数据库

  • 映射:二者之间的对应关系

Java概念数据库概念
属性字段/列
对象记录/行

1、映射文件的命名规则:

表所对应的实体类的类名+Mapper.xml

例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml

因此一个映射文件对应一个实体类,对应一张表的操作

MyBatis映射文件用于编写SQL,访问以及操作表中的数据

MyBatis映射文件存放的位置是src/main/resources/mappers目录下

2、 MyBatis中可以面向接口操作数据,要保证两个一致:

  1. mapper接口的全类名和映射文件的命名空间(namespace)保持一致
  2. mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致

UserMapper.xml

<?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.chovy.mybatis.mapper.UserMapper">
    <!--int insertUser();-->
    <insert id="insertUser">
    	insert into t_user values(null,'admin','123456',23,'男','12345@qq.com')
    </insert>
</mapper>

3、包结构

在这里插入图片描述

2.6、通过junit测试功能

//读取MyBatis的核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//创建SqlSession对象,此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务
//SqlSession sqlSession = sqlSessionFactory.openSession();
//创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//通过代理模式创建UserMapper接口的代理实现类对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用UserMapper接口中的方法,就可以根据UserMapper的全类名匹配元素文件,通过调用的方法名匹配
映射文件中的SQL标签,并执行标签中的SQL语句
int result = userMapper.insertUser();
//sqlSession.commit();
System.out.println("结果:"+result);
  • SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的会话)

  • SqlSessionFactory:是“生产”SqlSession的“工厂”。

  • 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。

1、加入依赖

<!-- log4j日志 -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

2、加入log4j的配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n"/>
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug"/>
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info"/>
    </logger>
    <root>
        <level value="debug"/>
        <appender-ref ref="STDOUT"/>
    </root>
</log4j:configuration>

日志的级别

FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)

从左到右打印的内容越来越详细

本文章参考B站 【尚硅谷】SSM框架全套教程,MyBatis+Spring+SpringMVC+SSM整合一套通关,仅供个人学习使用,部分内容为本人自己见解,与尚硅谷无关。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年flash水坑攻击源码

1. 背景 在有授权的攻防演练中&#xff0c;很多时候都会用到水坑攻击或者钓鱼&#xff0c;目前flash钓鱼一直都在做&#xff0c;以前的版本中&#xff0c;提示flash版本过低是这样的&#xff1a; 下载界面是这样的&#xff08;下图来源于互联网&#xff09;&#xff1a; 但是目…

javascript封装一个单向链表

单向链表 单向链表类似于火车&#xff0c;有一个火车头&#xff0c;火车头会连接一个节点&#xff0c;节点上有乘客&#xff0c;并且这个节点会连接下一个节点&#xff0c;以此类推。 链表的火车结构 链表的数据结构 head 属性指向链表的第一个节点。 链表中的最后一个节点指…

2023年郑州Java培训机构排名新鲜出炉,快来看看都有哪些!

郑州是一个很有发展潜力又极具竞争力的城市&#xff0c;很多大厂现在都在往二线城市转移&#xff0c;其中郑州就是一个很好的选择。所以想要在郑州有好的发展前景&#xff0c;就要不断提高自己的技术竞争力&#xff0c;Java软件开发就成为了不少小伙伴们想要提升价值技能选择的…

Pytorch 基础

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

【职工管理系统】C++全栈体系(十五)

职工管理系统 第十一章 添加职工 功能描述&#xff1a;按照职工的编号进行删除职工操作 一、删除职工函数声明 在workerManager.h中添加成员函数 void Del_Emp(); //删除职工void Del_Emp();二、职工是否存在函数声明 很多功能都需要用到根据职工是否存在来进行操作如&…

基于Android的综合物流系统

需求信息&#xff1a; &#xff08;1&#xff09;后台管理平台 设计实现物流管理平台&#xff0c;完成对司机、所载货物、出发点、目的地、运输轨迹等的管理。主要研究的内容为前后端框架的选择&#xff0c;对系统信息的展示与管理。 数据展示&#xff1a;管理人员通过不同的筛…

Redis持久化 | 黑马Redis高级篇

目录 RDB持久化 1、介绍 2、命令 3、配置 4、bgsave的fork底层原理 5、总结 AOF持久化 1、介绍 2、开启 3、三种写回策略 4、AOF后台重写 混合持久化 总结 Redisd的持久化有两种方式&#xff0c;分别是RDB和AOF RDB持久化 1、介绍 RDB&#xff0c;Redis数据备份…

软件测试项目实战【不爱听书】测试全套教程以及源码

前言 软件测试流程&#xff1a;需求分析—>测试计划—>测试设计—>测试执行—>测试报告 一、需求分析 “不爱听书”是一个为用户提供创作音乐和收听音频的平台。对于该项目的需求分析&#xff0c;提炼出相关测试点。 基本功能需求 用户可以进行注册、登录与退…

使用PyTorch构建GAN生成对抗网络源码(详细步骤讲解+注释版)02 人脸识别 下

文章目录1 测试鉴别器2 建立生成器3 测试生成器4 训练生成器5 使用生成器6 内存查看上一节&#xff0c;我们已经建立好了模型所必需的鉴别器类与Dataset类。使用PyTorch构建GAN生成对抗网络源码&#xff08;详细步骤讲解注释版&#xff09;02 人脸识别 上接下来&#xff0c;我们…

Source Insight基本使用

据说阅读Linux源码经常使用此工具&#xff1b;先看一下基本使用&#xff1b; 新建一个工程&#xff1b; OK以后出现下图&#xff1b;这是insight项目的目录&#xff1b; 把要阅读的源码工程加进来&#xff1b; 如下2个选项选中&#xff0c;OK&#xff1b; 如果下图右侧的内容没…

在Windows中操作系统下,检查Python脚本是否已运行

在Windows中操作系统下&#xff0c;检查Python脚本是否已运行 作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 一、原理 用一个空的虚拟文件。 在进程开始时&#xff0c;检查文件是…

ruby 给钉钉群发消息

给钉钉群发一条工作消息用途如下: Ipa, apk,打包完成了, 可以用作测试群表格导出成功了, 一般的群消息比如后台日志报警等等 步骤如下 群设置 - 智能群助手 - 添加机器人 - 选择 - 自定义 机器人设置里面要设置一个自定义关键词, 比如这里面 我起个名字 summerxx 上篇说到我…

javaweb高校大学毕业生就业跟踪系统ssm idea maven

系统所要实现的功能分析&#xff0c;对于现在网络方便的管理&#xff0c;系统要实现毕业生可以直接在平台上进行查看所有数据信息&#xff0c;根据需求可以进行在线添加&#xff0c;删除或修改企业信息、问卷调查、问卷提交、招聘信息、投递简历、企业评价、就业调查、就业表提…

(十三)devops持续集成开发——jenkins流水线发布一个sonar qube质量检查项目

前言 在前面的内容中我们已经介绍过如何在jenkins中集成质量检查工具sonar qube&#xff0c;以及sonar qube服务的安装。本节内容我们通过使用jenkins构建一个包含sonar qube质量检查的流水线项目&#xff0c;从而实现项目部署发布上线前的代码质量检查。从而保证系统的稳定性…

带约束进化算法问题分析Constrained Evolutionary Algorithms

经典论文《Evolutionary Algorithms for Constrained Parameter Optimization Problems》对带约束的进化算法进行了综述&#xff0c;本文不涉及其内容的翻译&#xff0c;主要为个人对论文理解和思考。 1. 进化算法定义Evolutionary Algorithms 论文中所讨论的进化算法主要为以…

java泛型5

泛型类 Java泛型不仅允许在使用通配符形参时设定上限&#xff0c;而且可以在定义泛型形参时设定上限&#xff0c;用于表示传给该泛型形参的实际类型要么是该上限类型&#xff0c;要么是该上限类型的子类。 上面程序定义了一个Apple泛型类&#xff0c;该Apple类的泛型形参的上限…

免安装PortableGit配置 + TortoiseGit安装

文章目录官网/安装Git将git命令添加到Path环境变量添加GitHub登录账号下载安装TortoiseGit官网/安装Git Git官网&#xff1a;https://git-scm.com/ 国内用户&#xff0c;建议通过淘宝镜像网站下载安装文件&#xff1a; https://registry.npmmirror.com/binary.html?pathgit…

18.异常

目录 一.异常 1.1 什么是异常 1.2 为什么要学习异常 1.3 异常的体系 1.5 编译时异常 1.5.1 什么是编译时异常 1.5.2 编译时异常的作用 1.5.3 常见编译时异常 1.6 运行时异常 1.6.1 什么是运行时异常 1.6.2 常见运行时异常 1.6 异常的默认处理流程&#xff08;RunTim…

web3:区块链常见的几大共识机制及优缺点

web3相关学习一并收录至该博客&#xff1a;web3学习博客目录大全 胡歌看了都得给我一键三连吧&#xff01; 目录什么是共识&#xff1f;什么是共识机制&#xff1f;共识机制的目标为什么需要共识机制?如何评价一个共识机制的优劣:共识机制分类PoW( Proof of Work)工作量证明&a…

2023年最新!北京Java培训机构排行榜新鲜出炉!

北京作为中国的首都&#xff0c;其人才的需求的体量之大是其他城市不可比的。那么在北京学习Java&#xff0c;到底该怎么选择Java培训机构哪?怎么在众多的机构里面选择出最适合自己的哪&#xff1f;下面是小编根据口碑和实力整理出的北京Java培训机构排行榜单&#xff0c;仅供…