Mybatis入门

目录

1.Mybatis 简介

1.1 什么是Mybatis

2.MyBatis 用途

2.1 连接工具(常用)

 2.2 MyBatis与JDBC相比,好处在哪 ?

3.MyBatis 基本构成

 4. MyBatis 使用

4.1 构建数据库,数据表。(我这里使用的是MySQL数据库)

     

4.2 MyBatis开发环境配置

4.3 使用spring-Initializr 创建的项目集成MyBatis

4.4 普遍使用的mybatis的项目:Maven项目

        4.4.1 点击文件,新建项目

        4.1.2 选择项目的一些配置信息

        4.1.3  配置pom文件

         4.1.4 其他文件的配置

        4.1.5 创建项目的基本结构


1.Mybatis 简介

概念参考至:Mybatis中文网

                     http://t.csdnimg.cn/EYu5u

1.1 什么是Mybatis

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

简单理解:MyBatis是Apache的一个Java开源项目,是一个支持动态SQL语句的持久层框架。MyBatis通过使用XML或注解的方式来定义数据库的操作,并通过原生的SQL查询语句与数据库进行交互。

总结:MyBatis是一个轻量级易于学习且功能强大的持久化框架,适用于各种规模的java程序。它通过简化数据库访问的过程,提高了开发效率和可维护性。

2.MyBatis 用途

对于后端开发来说。程序是由后端程序和数据库这两个重要的部分组成,而这两个重要部分要通讯,需要依靠数据库连接工具

2.1 连接工具(常用)

        JDBC 连接工具

        但是JABC连接工具比较繁琐。

        关于JDBC 的操作步骤可参考至:http://t.csdnimg.cn/EYu5u

 2.2 MyBatis与JDBC相比,好处在哪 ?

  • MyBatis通过参数映射的方式,可以将参数灵活的写在SQL语句中的配置文件中,避免在Java类中配置参数。
  • MyBatis通过输出映射机制,将结果集的检索自动映射成相应的Java对象,避免对结果集手动检索。
  • MyBatis可以通过Xml配置文件对数据库的连接进行管理

3.MyBatis 基本构成

  • SqlSession:是MyBatis的关键对象,通过这个接口可以操作命令,管理事务等

                             是用于操作数据库的对象。

  • SqlSessionFactory(SqlSession工厂):用于生成SqlSession
  • SqlSessionFactoryBuilder:根据配置信息生成SqlSessionFactory(SqlSession工厂)
  • SqlMapper:MyBatis 的设计组件,有Java接口和xml文件构成,需要个对应的Sql映射和映射规则

 4. MyBatis 使用

我使用的是idea对mybatis进行使用的

MyBatis 的使用分为两部分,分别为:MyBatis 开发环境的配置,使用MyBatis模式和语法操作数据库。

4.1 构建数据库,数据表。(我这里使用的是MySQL数据库)

示例语句:         

创建数据库 :

CREATE DATABASE `test` ;

创建表:

CREATE TABLE `t_news` (
  `news_id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(50) NOT NULL,
  PRIMARY KEY (`news_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4;

插入数据:

insert  into `t_news`(`news_id`,`title`) values (1,'110'),(2,'111'),(3,'112'),(4,'113'),(5,'114'),(6,'115'),(7,'116'),(8,'117'),(9,'118');

     

4.2 MyBatis开发环境配置

提示:我的idea是2023.2.5 版本的

4.3 使用spring-Initializr 创建的项目集成MyBatis

        可参考文章:http://t.csdnimg.cn/Ek1Xk

4.4 普遍使用的mybatis的项目:Maven项目

        4.4.1 点击文件,新建项目

        4.1.2 选择项目的一些配置信息

        注:此处我使用的是web开发

        webapp的选项可能要根据你们自己的项目而定

项目创建成功后图示

 注:项目中的src目录可能不会显示完全,可根据下面步骤显示:

 

        然后直接回车,目录就会自动加进去。 

        4.1.3  配置pom文件

pom.xml文件是Maven项目的核心文件,mybatis的使用需要添加一些依赖,也就是外部库,这些依赖就是在pom.xml文件添加。

注:依赖的添加需要网络,且网速不能太慢,否则你的外部库下载的时候可能会出现空包的现象,而外部库的下载是通过在国外的库下过来的,所以要提升速度需要换源

需要换源的可以参考文章:http://t.csdnimg.cn/HprQZ

对于依赖的获取可以使用此官方网站(比较齐全不用担心版本不一致的问题):Maven Repository: spring (mvnrepository.com)

1)在网站里获取增加想要的依赖之后复制到 pom.xml 文件里

图示:

idea图示:

spring都是使用不同的依赖组件。

2)MyBatis相关的依赖(还没有与spring做集成):

<!-- 添加 MyBatis 框架 -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.6</version>
</dependency>

<!-- 添加MySQL数据库的依赖 -->

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

         4.1.4 其他文件的配置

1)将mybatis的核心配置文件(mybatis.cfg.xml)配置好;

可参考文章:http://t.csdnimg.cn/WGiPS

注意:所有的文件都在resources目录下。

mybatis.cfg.xml 详解:

2) 配置数据库连接的文件:jdbc.properties

写入连接语句

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test02?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
jdbc.username=root
jdbc.password=123456

图示:

 3)设置数据库连接的相关信息,配置好 applicationContext-base.xml文件,可能你们有自己的配置文件,也可忽略这一步。

  • applicationContext-base.xml 是配置数据库的连接池以及Mybatis的相关配置(比如:SqlSessionFactory:生成SqlSession的(操作数据库的核心对象) 

applicationContext-base.xml详解

 

 

 注:XXXMapper.xml 文件是写SQL语句的文件,MyBatis 操作数据库主要通过文件的方式来定义SQL语句,避免了SQL语句写在具体的类当中,松散耦合,易于修改。

 

        4.1.5 创建项目的基本结构

 1)创建包的目录结构,如下图所示:

 

 2)编写MybatisSessionFactoryUtil (生成SqlSession的)

代码示例:注意看注释

package com.zking.mbdemo.util;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

public class MybatisSessionFactoryUtils {
    
    //定义SqlSession工厂
	public static SqlSessionFactory sqlSessionFactory;

    //定义线程绑定变量(线程本地变量)
	private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();

    //静态的代码块:被优先调用
	static {
		try {
			InputStream is = MybatisSessionFactoryUtils.class
					.getResourceAsStream("/mybatis.cfg.xml");//MyBatls的核心文件位置
			SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();//创建SqlSessionFactory的父类
			sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
    
    //构造方法:简单防止被new出来
	private MybatisSessionFactoryUtils() {
	}
    
    //创建SqlSession的方法
	public static SqlSession openSession() {
        //首先判断线程本地变量里有没有SqlSession
		SqlSession sqlSession = threadLocal.get();
		if (null == sqlSession) {//如果没有则创建
			sqlSession = sqlSessionFactory.openSession();
			threadLocal.set(sqlSession);
		}
		return sqlSession;//有则直接返回SqlSession
	}
    
    //关闭SqlSession的方法:为了不浪费资源
	public static void closeSession() {
        //直接在线程绑定变量里获取SqlSession
		SqlSession sqlSession = threadLocal.get();
        //如果不为空则代表本地变量里有SqlSession
		if (null != sqlSession) {
			//threadLocal.set(null);
			threadLocal.remove(); //在本地移除  
			sqlSession.close();//关闭
		}
	}
	
    //一个简单的测试
	public static void main(String[] args) {
		SqlSession sqlSession = MybatisSessionFactoryUtils.openSession();
		System.out.println(sqlSession);
		System.out.println(sqlSession.getConnection());
		MybatisSessionFactoryUtils.closeSession();
	}

}

 注:ThreadLocal  ->  线程本地变量(线程绑定变量)

  • 它只是一个线程的局部变量(其实就是一个Map用于存储每一个线程的变量副本,Map中元素的Key为线程对象,而Value对应线程的变量副本),ThreadLocal会为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
  • 简单理解:这个是对于线程来说就是:在本次线程里会用到的变量,参数,数据等等线程会      用的,都可以放到线程本地变量里,
  • 示例理解: 你的钱包,可以放你自己会用的东西,比如身份证。

详细的解释可参考:http://t.csdnimg.cn/z8P84

3) 编写实体类Model,即存放数据的对象;在ssh2里叫entity

示例:

:@Data 是使用了一个插件来辅助的

需要的可以参考下面教程获取:

 4)编写mapper层(相当于dao)

 

 5)编写相关的xml文件(写SQL语句的),这个文件是根据mapper层接口生成的

注:1.  在此之间先加入一些依赖:都是关于spring的一些依赖,为了避免写的时候报一些错误

主要是我的这个项目使用了spring框架,如果你们的项目没有使用可以直接跳过:

2. 还有就是需要在resource创建mapper目录,用来保存xml文件,我的这个路径是已经在applicationContext-base.xml文件配置好的路径,你们的也可依情况而定

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>5.3.18</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.3.18</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-orm</artifactId>
  <version>5.3.18</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>5.3.18</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aspects</artifactId>
  <version>5.3.18</version>
</dependency>

<!--分页依赖-->
  <dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.2</version>
  </dependency>

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope>
</dependency>
dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-dbcp2</artifactId>
  <version>2.1.1</version>
</dependency>
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-pool2</artifactId>
  <version>2.4.3</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>5.3.18</version>
</dependency>

<!--日志 -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.36</version>
</dependency>

<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.10</version>
</dependency>

 回车之后resource会生成出来一个以你的接口为名创建的xml文件

 之后点击你的mapper层的接口图示:

 生成sql语句快捷方式依据创建xml文件的方法:1.鼠标放到爆红的名字上,按住Alt+Enter键

图示:

 

 注: 可能会出现一个选框让你生成语句的类型,这个框是在你写的方法有很多的情况下会出现;

 xml文件图示:

  之后就可以写sql语句了

 

 注:#{} 与 ${} 的区别

 #{ }是预编译处理,MyBatis在处理#{ }时,它会将sql中的#{ }替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号,如上面的值 “4,44,514”就会变成“ ‘4,44,514’ ”

${ }是字符串替换, MyBatis在处理${ }时,它会将sql中的${ }替换为变量的值,传入的数据不会加两边加上单引号。

使用${ }会导致sql注入,不利于系统的安全性!

SQL注入:就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。常见的有匿名登录(在登录框输入恶意的字符串)、借助异常获取数据库信息等

 6) service 层的编写:处理业务的;

 

 7)在mybatis的核心文件中加入mapper

<!-- 与spring集成后删除 -->
<mappers>
    <mapper resource="mapper/StudentMapper.xml"/>
</mappers>

 如果没有加入该配置,会报绑定异常:BindingException

8) 测试service

在输入光标到需要创建测试类的名字上,也就是StudentIServiceImpl按住alt+entity可以快速创建测试类

本篇分享就到这了,后续会出Mybatis的其他博客,感谢你的观看与支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值