文章目录

  • 1.mybatis概述
  • 2.mybatis快速入门
    • 2.1创建maven工程
      • 2.1.1打包方式:jar
      • 2.1.2引入依赖
    • 2.2创建mybatis的核心配置文件
    • 2.3创建mapper接口
    • 2.4创建mybatis的映射文件
      • 2.4.1相关概念
    • 2.5测试
  • 3.mybatis核心配置文件
    • 3.1初识核心配置文件
    • 3.2细究各个配置
      • 3.2.1属性(properties)
      • 3.2.2类型别名(typeAliases)
      • 3.2.3设置(settings)
      • 3.2.4映射器(mappers)
      • 3.2.5生命周期和作用域
  • 4.mybatis增删改查
  • 5.动态sql

1.mybatis概述

2.mybatis快速入门

1.需求:查询User表中所有数据

2.步骤:

​ (1)创建user表,添加数据

​ (2)创建模块,导入坐标

​ (3)编写mybatis核心配置文件----->替换连接信息,解决编码问题

​ (4)编写sql映射文件---->统一管理sql语句,解决硬编码问题

​ (5)编码

​ ①定义POJO类

​ ②加载核心配置文件,获取sqlsessionfactory对象

​ ③获取sqlsession对象,执行sql语句

​ ④释放资源

2.1创建maven工程

2.1.1打包方式:jar

2.1.2引入依赖

  <dependencies><!--mybatis核心配置文件--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.3</version></dependency><!--测试类--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency>  </dependencies>

2.2创建mybatis的核心配置文件

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

​ 核心配置文件主要用于配置连接数据库的环境及Mybatis的全局配置。

​ 核心配置文件放在src/main/resource目录下

<configuration><!--    1.设置数据库文件--><environments default="development"><environment id="development"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!--        2.引入映射文件--><mappers><mapper resource="mappers/UserMapper.xml" /></mappers>
</configuration>

2.3创建mapper接口

mybatis中的mapper接口相当于一档的到,但是区别在于mapper仅仅是接口,不需要提供实现类

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

2.4创建mybatis的映射文件

2.4.1相关概念

ORM(Object Relationship Mapping)对象映射。

对象:代表Java的实体类对象

关系:关系型数据库

映射:二者之间的关系

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

1.映射文件的命名规则

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

例如:t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml,因此一个映射文件对应一个实体类,对应一张表的操作,Mybatis映射文件用户编写sql,访问以及操作表中的数据。

2.mybatis中可以面向接口操作数据库,要保证两个一致

①mapper接口的全类名和映射文件的命名空间(namespace)保持一致

②mapper接口中方法的方法名和映射文件中便携的Sql的标签id数学保持一致。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper><insert id="insertUser" >insert into t_user values (null,'xiaoming','123',23,'woman');</insert>
</mapper>

2.5测试

3.mybatis核心配置文件

3.1初识核心配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--导入外部配置文件--><properties resource="db.properties"/><!--可以给实体类起别名--><typeAliases><package name="com.gs.pojo"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/></dataSource></environment></environments><mappers><!-- <mapper resource="com/com.com.gs/dao/UserMapper.xml"/>--><!--<mapper class="com.com.com.gs.dao.UserMapper"/>--><package name="com.gs.dao"/></mappers></configuration>

1.我们可以从例子中发现configuration的标签中是enviroments,我们不妨推断Mybatis可以配置多套环境。注意点:尽管可以配置多个环境,但每个SqlSessionFactory实例只能选择一种环境。

2.接着观察transactionManager标签,这是配置我们的事务处理器,Mybatis默认使用的是JDBC,而dataSource表示我们使用的数据源,默认类型为 POOLED

3.2细究各个配置

3.2.1属性(properties)

作用:我们可以通过properties属性来实现音容配置文件,这些属性可以在外部进行设置,并可以进行动态替换,也就是说我们进行properties有两种方式,一种是外部引入,另一种是嵌套使用,更推荐使用外部数据源引入

(1)方式一:嵌套使用

<environments default="development"><environment id="development"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment>
</environments>

(2)方式二:引入外部数据源

①在resource目录下编写一个配置文件db.properties

db.driver = com.mysql.jdbc.Driver
db.url= jdbc:mysql://localhost:3306/mybatis
db.username = root
db.password =123456

②在mybatis-config.xml配置文件中引入数据源

<!--    properties属性来实现引用配置文件-->
<properties resource="db.properties"/>
<!--    设置数据库文件-->
<environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${db.driver}"/><property name="url" value="${db.url}"/><property name="username" value="${db.username}"/><property name="password" value="${db.password}"/></dataSource></environment>
</environments>

3.2.2类型别名(typeAliases)

若我们没有配置该属性,编写xml文件的实体类时要使用全类名

例如: resultType=“com.tz.bean.User”>

<select id="getUserList" resultType="com.tz.bean.User">select * from t_user;
</select>

为了简化上面的写法,我们可以在核心配置文件中进行别名的是设置,

(1)方式1:直接在mybatis-config.xml中进行相关实体类的全类名胚子

<!--可以给实体类起别名-->
<typeAliases><typeAlias type="com.tz.bean.User" alias="User"/>
</typeAliases>

在相应的Mapper.xml文件中引用

    <select id="getUserList" resultType="User">select * from t_user;</select>

(2)方式2:我们也可以只指定一个包名,MyBatis会在包名下面搜索需要的JavaBen(扫描是实体类的包中,这个类的别名,引用时推荐使用首字母小写,不过没有强制要求)

<!--    给实体类起别名--><typeAliases><package name="com.tz.bean"/></typeAliases>

在相应的Mapper.xml文件中引用

<!--  resultType="user"  --><select id="getUserList" resultType="user">select * from t_user;</select>

使用场景:

​ 1.在实体类比较少时,建议使用第一种

​ 2.如果实体类比较多,建议使用第二种

​ 3.第一种可以DIY别名,第二种则不行; 如果非要修改,需要在实体类上增加注解

@Alias("user")
public class User {}

3.2.3设置(settings)

这是Mybatis中极为重要的调整设置,它们会改变Mybatis的运行时行为,官方中的配置项解释的十分清楚,可以进行相关查阅:https://mybatis.net.cn/configuration.html#environments

这里介绍两种开发中经常使用的设置

(1)驼峰命名(mapUnderscoreToCamelCase),用来解决我们实体类中属性名与数据库中的列名不一致问题

例如:数据库名字为user_id,实体类名字为userId,这时候我们需要配置该项,否则取不到值

(2)配置日志工厂logImpl,这里方便我们查看输出日志排查错误,可以理解成我们平常使用的System.out;

下面使用的值为STDOUT_LOGGING则为我们标准的日志输出,比较常用的还有Log4j;

<setting name="logImpl" value="STDOUT_LOGGING"/>

3.2.4映射器(mappers)

(1)使用类路径的资源引用(在mybatis-config.xml核心配置文件中配置)(推荐)

<mappers><mapper resource="com/tz/dao/UserMapper.xml"/>
</mappers>

这种方式对类名和Mapper.xml文件的位置没有任何限制

(2)使用class文件绑定注册(在mybatis-config.xml核心配置文件中配置)

<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers><mapper class="com.tz.dao.UserMapper"/>
</mappers>

注意:

​ ①接口和他的Mapper配置文件必须同名

​ ②接口和他的Mapper配置文件必须在同一个包下

(3)使用扫描包进行注入绑定(在mybatis-config.xml核心配置文件中配置)

<mappers><package name="com.tz.dao"/>
</mappers>

注意:

​ ①接口和他的Mapper配置文件必须同名

​ ②接口和他的Mapper配置文件必须在同一个包下

这三种方式各有各的优势,使用上也没有所谓的优劣之分,只不过第一种对我们配置文件的命名和它所放的位置没有特殊限定,相对比较灵活。

3.2.5生命周期和作用域

不同作用域和生命周期类别是至关重要,因此错误的使用会导致非常严重的并发问题,下面以一张图简单描述一下我们mybatis开发的流程

记住这里的每一个mapper就对应我们编写的一个具体接口,即我们具体业务

这里我们创建Mybatis相关对象的工具类

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class MybatisUtil {private static SqlSessionFactory sqlSessionFactory;static {try {String resource = "mybatis-config";InputStream resourceAsStream = Resources.getResourceAsStream(resource);SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);} catch (IOException e) {e.printStackTrace();}}public static SqlSession getSqlSession(){return sqlSessionFactory.openSession(true);}
}

解析:

①SqlSessionFactoryBuilder:

一旦创建了SqlSessionFactory,就不再需要Builder这个对象了,所以我们可以把它设置为局部变量或使用静态代码块(也就是我们只需实例化出一个SqlSessionFactoryBuilder:对象)
如上面所写的

private static SqlSessionFactory sqlSessionFactory;static {try {String resource = "mybatis-config.xml";InputStream resourceAsStream = Resources.getResourceAsStream(resource);SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);} catch (IOException e) {e.printStackTrace();}}

②SqlSessionFactory

可以通俗理解为我们的数据库连接池

SqlSessionFactory一旦创建就应该在运行期间一直存在,没有任何理由丢弃它或者重新创建另一个实例

SqlSessionFactory的最佳作用域是应用层上的,这种实现可以通过使用单例或静态单例模式

③SqlSession

相当于连接池的一个请求

SqlSession的实例不是线程安全的,因此不能被共享,所以最佳作用与是请求或方法作用域

用完知乎需要关闭,否则资源会被占用

4.mybatis增删改查

后续更新

5.动态sql

qlSessionFactoryBuilder.build(resourceAsStream);

    } catch (IOException e) {e.printStackTrace();}
}

②SqlSessionFactory>  可以通俗理解为我们的数据库连接池
>
>  SqlSessionFactory一旦创建就应该在运行期间一直存在,没有任何理由丢弃它或者重新创建另一个实例
>
>  SqlSessionFactory的最佳作用域是应用层上的,这种实现可以通过使用单例或静态单例模式③SqlSession>  相当于连接池的一个请求
>
>  SqlSession的实例不是线程安全的,因此不能被共享,所以最佳作用与是请求或方法作用域
>
>  用完知乎需要关闭,否则资源会被占用# 4.mybatis增删改查后续更新# 5.动态sql后续更新

Mybatis详细教程相关推荐

  1. springboot整合mysql5.7_详解SpringBoot整合MyBatis详细教程

    1. 导入依赖 首先新建一个springboot项目,勾选组件时勾选Spring Web.JDBC API.MySQL Driver 然后导入以下整合依赖 org.mybatis.spring.boo ...

  2. SpringBoot整合MyBatis详细教程~

    目录 1. 导入依赖 2. 连接数据库 3. 编写数据库配置信息 4. 编写pojo实体类 5. 编写mapper接口 6. 编写mapper.xml 7. 编写controller 8. 测试 1. ...

  3. idea 配置mysql逆向_IDEA中Mybatis的MGB使用逆向工程配置的详细教程

    添加依赖 添加generatorConfig.xml文件 在maven的plugins中运行mybatis-generator插件 注意事项: (1).generatorConfig.xml文件需要放 ...

  4. mybatis实战教程(mybatis in action),mybatis入门到精通

     目录(?) [-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程 ...

  5. SpringCloud详细教程(上)

    [订阅专栏合集,关注公众号,作者所有付费文章都能看(持续更新)] 推荐[SpringCloud教程]https://blog.csdn.net/hellozpc/article/details/836 ...

  6. mybatis-generator生成带中文注释POJO类的超详细教程含代码和图解

    mybatis-generator生成带中文注释POJO类的超详细教程含代码和图解 mybatis-generator自动生成带中文注释POJO类和增删改查,idea和eclipes都可以使用 MyC ...

  7. 手把手从零开始搭建k8s集群超详细教程

    本教程根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps同步所做笔记教程 k8s集群搭建超详细教程 1. 基本环境搭建 1. 创建私有网络 2. 创建服务 ...

  8. win10系统优化计算机,全面优化win10电脑系统详细教程 | 专业网吧维护

    全面优化win10电脑系统详细教程 以下针对win10系统的电脑全面优化的步骤: 步骤1:禁止开机启动项 1.首先我们先来优化开机速度,拖慢开机速度的首先是开机自启动项,Ctrl + Shift + ...

  9. GPU运行Tensorflow详细教程及错误解决

    GPU运行Tensorflow详细教程及错误解决 前提条件 配置GPU运行 确认是否成功配置 出现的错误及解决方案 前提条件 最重要的一点:CUDA与tensorflow的版本一点要对应,不然用不了! ...

  10. VMware虚拟机安装黑苹果MacOS Mojave系统详细教程

    更多资源请百度搜索:前端资源网 欢迎关注我的博客:www.w3h5.com 最近遇到一个H5页面的 iPhone X 刘海兼容问题.查到一个 XCode 编辑器,可以模拟 iPhone X 环境运行. ...

最新文章

  1. 怎么把项目推到gitlab上_将本地项目添加到 GitLab 上管理
  2. jdk官方版 v1.7+安装教程
  3. 安徽大学计算机考研失败,回馈:2014年安徽大学计算机初试回忆题,我是雷锋,低调...
  4. vux 组件库首次使用安装
  5. Surging1.0发布在即,.NET开发者们,你们还在等什么?
  6. charles请求转发_Charles安装与基本操作
  7. Python调用C函数的方法以及如何编写Python的C扩展
  8. 缓存LruCache简单创建和使用
  9. Centos 下Nginx 自启动脚本
  10. c#连接kafka_c#操作kafka(上)搭建kafka环境
  11. 并发(concurrent)、并行(parallel)、顺序(sequential)、串行(serial)是什么 区别
  12. VM虚拟机手动配置IP地址
  13. Spring Framework 官方文档学习(二)之IoC容器与bean lifecycle
  14. 求1+2阶乘+3阶乘+ 省略 +20阶乘的和
  15. Tcl 语言 ——表达式篇
  16. 二项式分布(Binomial Distribution)
  17. 如何为摇滚音乐选择吉他音箱,创作原创音乐
  18. python的数据与matlab互通:SciPy
  19. 什么是企业微信scrm系统?企业微信SCRM系统有什么功能?企业微信SCRM系统推荐。
  20. 申请CSC公派访问学者的常见问题

热门文章

  1. VB编程用经常要用到的算法
  2. Oracle数据库学习(一)--数据库原理及SQL
  3. 掌握Android阅读源码的两种简单方式
  4. 使用FlashFTP上传文件到指定服务器
  5. 《Excel图表之道》高清PDF精美样章
  6. HTML页面中返回顶部的几种实现方式
  7. 《Python简明教程》一
  8. 如何在在线直播网站源码中,实现视频连麦直播?
  9. 使用直播网站源码,搭建直播平台的最难点
  10. live2d_Live2d( 动画制作软件 )中文版分享