Mybatis入门

  • 前言
  • 一、MyBatis的简介
    • 1. 原始JDBC存在的问题:
    • 2. 解决方案:
    • 3. 什么是MyBatis?
  • 二、开发步骤
    • 一、 添加MyBatis坐标
      • 1、导入mysql数据库驱动
      • 2、导入MyBatis坐标
    • 二、创建数据库表
    • 三、编写实体类
    • 四、映射文件Mapper.xml
      • 1、mapping文件约束头:
      • 2、namespace:
      • 3、< mapper >配置
    • 五、核心文件MapConfig.xml
      • 1、MyBatis核心文件约束头:
      • 2、Mybatis核心文件配置
    • 六、测试类
  • 三、MyBatis的增删改查
    • 1、查询操作
    • 2、新增操作
    • 3、删除操作
    • 4、修改操作
  • 四、MyBatis的核心配置文件
    • 一、层级关系
    • 二、测试类常用配置解析
      • 1、environments标签
      • 2、mappers标签
      • 3、properties标签
      • 3、typeAliases标签
  • 四、MyBatis的相应API
    • 一、SqlSessionFactoryBuilder
    • 二、SqlSession会话对象
  • 总结

前言

每次打开学习视频看的时候,总想着以后都要整理起来记录一下,但是总是有一些大大小小的原因(好吧,只有懒)导致这个美好的梦想破灭了,哈哈,不知道今天是什么样的心情趋势我打开了它并且写下了这段话,但是希望真的能坚持下去吧。在开始写之前想到过文章内容会不会太简单,平台里的大佬太多了,我时常感觉自己像是还未入门的小喽啰,不过发布这些文章其实只是为了记录自己的成长,想到这里我也觉得无所谓了,知识太浅,希望大家多多指教~


提示:本篇文章介绍了关于MyBatis入门的一些内容,以下是本篇文章正文内容

一、MyBatis的简介

1. 原始JDBC存在的问题:

  1. 数据库频繁创建连接、释放连接,造成资源浪费,从而影响系统性能。
  2. Sql语句在代码中硬编码,代码不宜维护,而在实际开发中sql语句变化的可能性较大。
  3. 查询操作时,需要手动将结果进行封装。插入操作时,需要将实体数据手动设置到占位符位置。

2. 解决方案:

  1. 使用数据库连接池初始化连接资源
  2. 将Sql语句提取到xml配置文件中
  3. 使用反射、内省等底层技术,将实体属性与表字段自动映射

3. 什么是MyBatis?

以上所描述的问题,我们都可以使用MyBatis来解决
MyBatis是基于java的持久层框架,其特点如下:

  1. 内部封装了JDBC,
  2. 隐藏了JDBC繁杂的API
  3. 开发者只需要专注于sql语句即可
  4. 通过XML或注解的方式配置
  5. 采用orm自动思想解决实体与数据库映射的问题
    我们可以通过官网了解更多内容:
    mybatis 官网: http://www.mybatis.org/mybatis-3.

二、开发步骤

一、 添加MyBatis坐标

1、导入mysql数据库驱动

代码如下(示例):

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>版本号</version>
</dependency>

2、导入MyBatis坐标

代码如下(示例):

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>版本号</version>
</dependency>

二、创建数据库表

三、编写实体类

四、映射文件Mapper.xml

1、mapping文件约束头:

<?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">

2、namespace:

命名空间,给当前mapper命名,与下边语句的id一起组成查询的标识,即调用mapper方法时直接使用 " 命名空间名称.方法名 " 调用

<mapper namespace="名称">

3、< mapper >配置

命名空间,给当前mapper命名,与下边语句的id一起组成查询的标识,即调用mapper方法时直接使用 " 命名空间名称.方法名 " 调用

<mapper><select id="命名" resultType="查询结果对应的实体类型">要执行的sql语句</select>//执行其他操作时需要切换相应的标签,如insert、update、delete
</mapper>

五、核心文件MapConfig.xml

1、MyBatis核心文件约束头:

命名空间,给当前mapper命名,与下边语句的id一起组成查询的标识,即调用mapper方法时直接使用 " 命名空间名称.方法名 " 调用

<?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">

2、Mybatis核心文件配置

命名空间,给当前mapper命名,与下边语句的id一起组成查询的标识,即调用mapper方法时直接使用 " 命名空间名称.方法名 " 调用

<configuration>//数据源环境<!--default="development":指定默认的环境名称--><environments default="development"><!--id="development":指定当前环境名称--><environment id="development"><transactionManager type="JDBC"/>//事务管理器<!--type="POOLED":指定当前数据源类型是连接池--><dataSource type="POOLED">//数据源<property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment>//加载映射文件<mappers><mapper resource="mapper配置文件位置"></mapper></mappers>
</configuration>

六、测试类

//加载核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("核心配置文件.xml");
//获得sqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行sql语句
//param("namespace+id")
List<User> userList = sqlSession.selectList("namespace.id");//查询
sqlSession.id名("namespace.id",实体对象)//增改
sqlSession.delete("namespace.id",Object)//删除
//打印结果
System.out.println(userList);
//释放资源
sqlSession.close();

三、MyBatis的增删改查

1、查询操作

List<User> userList = sqlSession.selectList("userMapper.findAll");
sql语句
<select id="findAll" parameterType="要查询的数据的类型" resultType="BsHolidaySetUpResult">select * from User
</select>

2、新增操作

 sqlSession.insert("userMapper.add", user);
sql语句
<!--在进行新增操作时,values中的值为parameterType类中的属性名-->
<insert id="insert" parameterType="要插入的数据的类型">insert into user values(#{id},#{username},#{password},#{实体属性名})
</insert>

3、删除操作

sqlSession.delete("userMapper.delete",3);
sql语句
<!--依据某一字段删除数据,parameterType为该字段类型-->
<!--在传递单个参数时,可以使用#{任意字符串}的方式-->
<delete id="delete" parameterType="java.long.Integer">delete from user where id=#{任意字符串}
</delete>

4、修改操作

sqlSession.update("userMapper.update", user);
sql语句
<update id="update" parameterType="要修改的数据的类型">update user set username=#{username},password=#{password} where id=#{id}
</update>
<!--mybatis在执行更新操作时,需要手动的进行提交事务,即在执行增删查的操作时,要提交事务来实现对应操作-->
sqlSession.commit();

四、MyBatis的核心配置文件

一、层级关系

  • configuration 配置

    • properties 属性
    • settings 设置
    • typeAllases 类型别名
    • typeHandlers 类型处理器
    • objectFactory 对象工厂
    • plugins 插件
    • environments 环境
      • environment 环境变量

        • transactionManager 事务管理器
        • dataSource 数据源
    • databaseidProvider 数据库厂商标识
    • mappers 映射器

二、测试类常用配置解析

1、environments标签

该标签主要用于数据源环境的配置

<environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment>
</environments>

事务管理器(transactionManager)的类型有两种:

  • JDBC直接使用了JDBC的提交和回滚设置,依赖于connection连接来管理事务作用域
  • MANAGED使用容器来管理事务的整个生命周期。默认情况下会关闭Connection连接,需要将closeConnection属性设置为false来阻止关闭行为。

数据源(dataSource)类型有三种:

  • UNPOOLED:这个数据源的实现只是每次被请求是打开和关闭连接
  • POOLED:这种数据源的实现利用”池“的概念将JDBC连接对象组织起来。
  • JNDI:这个数据源的实现是为了能在如EJB或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。

2、mappers标签

该标签的作用是加载映射的,加载方式有如下几种:

  • 使用相对于类路径的资源引用
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  • 使用完全限定资源定位符(url)
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
  • 使用映射器接口实现类的完全限定类名
<mapper class="org.mybatis.builder.AuthorMapper"/>
  • 将包内的映射器接口实现全部注册为映射器
<package name="org.mybatis.builder"/>

3、properties标签

该标签可以加载额外配置的properties文件

<properties resourse="jdbc.properties"></properties>

3、typeAliases标签

该标签用于自定义别名

<typeAliases><typeAlias type="原名" alias="别名"/>
</typeAliases>

mybatis框架设置好的常用的类型的别名

数据类型 别名
String string
Long long
Integer int
Double double
Boolean boolean

四、MyBatis的相应API

一、SqlSessionFactoryBuilder

常用API:SqlSessionFactory.build(InputStream inputStream)
通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象

String resource = "org/mybatis/builder/mybatis-config.xml";
InputStream inputStream = ResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);

其中,Resources工具类,这个类在org.apache.ibatis.io包中。Resources类帮助你从类路径下、文件系统或一个web URL中加载资源文件。
SqlSessionFactory有多个方法创建SqlSession实例。常用的有以下两个:

方法 解释
openSession() 会默认开启一个事务,但事务不会自动提交,也就意味着需要手动提交该事务,更新操作数据才会持久化到数据库中
openSession(boolean autoCommit) 参数为是否自动提交,如果设置为true,则不需要手动提交事务

二、SqlSession会话对象

SqlSession实例在MyBatis中是非常强大的一个类。包括所有的执行语句、提交或回滚事务和获取映射器实例的方法。
执行语句的方法主要有:

<T> T selectOne(String statement,Object parameter)
<E> List<E> selectList(String statement,Object parameter)
int insert(String statement,Object parameter)
int update(String statement,Object parameter)
int delete(String statement,Object parameter)

操作事务的方法主要有:

void commit()
void rollback()

总结

以上就是今天的BuBu的笔记,对Markdown格式不熟悉的我写的腰酸背痛,才只完成了一篇,不过孰能生巧,多更一定会很熟练的啦,不说了,回家好好复习笔记啦!

BuBu笔记——Mybatis入门(秃头BUBu的超详细备注,一定要看哦)相关推荐

  1. [安卓开发笔记一]Android开发配置opencv环境超详细教程

    [安卓开发笔记一]Android开发配置opencv环境超详细教程 [更新于 2022年4月] 再次提醒,建议现在看到这篇文章的,仅仅把此文做一个流程参考,4年前android studio就使用cm ...

  2. Mybatis学习笔记——Mybatis入门

    文章目录 Mybatis入门 1.为什么要使用mybatis? 2.ORM 3.mybatis简介 4.mybatis框架 5.mybatis入门程序 5.1搭建环境 5.2 配置log4j 5.3 ...

  3. 拯救秃头少女,让你的发量看起来暴增!

    节前给大家整理了一些避免脱发的小tips,今天小编总结了一些看起来头发就很多的小技巧,让你的发量暴增!所以姐妹们别慌, 我这就来啦,走过路过不要错过呦~ 蓬松感 '蛋黄的长裙,蓬松的头发'头发一蓬松, ...

  4. Mybatis笔记——Mybatis入门

    (一)MyBatis快速入门 通过一个案例快速入门Mybatis框架 案例:查询user表中所有数据1) 创建user表,添加数据2) 创建模块,导入坐标3) 编写MyBatis核心配置文件--> ...

  5. 结合Layui框架,实现SpringMVC+Spring+Mybatis,SSM整合案例CRUD(超详细代码,外加说明)

    首先: 你需要去Layui官网下载UI框架.你可能会问,为什么用Layui实现页面效果?简单来说就是:简单.好用.上手快,作为JAVA后端开发人员,Layui无疑是非常友好的,拿来即用. 页面效果图: ...

  6. c 获取char*的长度_C/C++编程笔记:C语言字符串比较函数,超详细,值得收藏!...

    前方干货准备!!! void *memset(void *dest, int c, size_t count); 将dest前面count个字符置为字符c. 返回dest的值. void *memmo ...

  7. 万字长文爆肝Python基础入门【第二弹、超详细数据类型总结】

    目录 一.建立一个数据火车--列表 1.创建列表 2.列表元素的获取 3.列表元素的添加 4.列表元素的删除 5.列表元素的修改 二.列表的亲兄弟--元组 1.创建元组 2.元组元素的获取 3.元组和 ...

  8. VS添加万能头文件(超详细)

    <bits/stdc++.h>这个头文件被大家亲切地成为万能头文件,在敲代码的时候往往可以给我们省去很多时间,但是这个头文件在VS中并没有,喜欢用VS的人经常为此感到烦恼,我就在为添加这个 ...

  9. 【学习笔记】Linux 命令万字解析(超详细)

    Linux 基础 命令 命令行提示符 进入命令行环境以后,用户会看到 Shell 的提示符.提示符往往是一串前缀,最后以一个美元符号 $ 结尾,用户可以在这个符号后面输入各种命令. 执行一个简单的命令 ...

  10. 一起玩树莓派3+手把手带您入门树莓派(3000字+超详细图解版)

    http://bbs.eeworld.com.cn/thread-503614-1-1.html?_t=t

最新文章

  1. 大工20秋计算机组成原理在线作业2,大工20秋《计算机组成原理》在线作业3
  2. Qt phonon多媒体框架(转)
  3. python定义一个类savingaccount表示银行账户_c#教程之c#模拟银行atm机示例分享
  4. AngularJS 计时器
  5. 解决nginx无法启动的问题——端口被占用
  6. 通过分区(Partition)提升MySQL性能
  7. java 知识积累_java学习知识积累-spring常用注解
  8. Kafka高可用机制入门
  9. 【XLL 框架库函数】 TempMissing/TempMissing12
  10. 高仿360云盘android端的ui实现,高仿360云盘android端的UI实现
  11. python lisp_随笔:code.org与python,FoxDot,Lisp
  12. 【SpringCloudAlibaba】微服务组件Dubbo
  13. addClass()与removeClass
  14. pamac 安装 ros-noetic-desktop-full(AUR) 失败后如何清理残留的问题
  15. HTML5+CSS大作业——个人博客-功能齐全(48页) html大学生网站开发实践作业
  16. Tomcat详细配置(全)
  17. [python] 使用正则表达式验证email地址是否有效
  18. 常见的嵌入式微处理器(Micro Processor Unit,MPU)
  19. Chapter7 循环神经网络-2
  20. [Godot] Godot Game Tools - GGT v2.0.4 使用记录

热门文章

  1. obsidian标题自动添加序号
  2. 大专学计算机为什么不好,大专学计算机后悔了是怎么回事 大专计算机专业学校推荐...
  3. ps如何制作霓虹字体
  4. 企业微信 手机 接收的文件 存放路径
  5. 工业相机镜头的视场角、焦距、光圈和景深的关系
  6. mysql asc_mysql – 在字符串列上使用asc和desc的索引
  7. 基于jQuery的一个简单的图片查看器实现
  8. 基于MATLAB的特征值与特征向量(附完整代码)
  9. Excel2003和Excel2007的区别
  10. 1436:数列分段II