BuBu笔记——Mybatis入门(秃头BUBu的超详细备注,一定要看哦)
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存在的问题:
- 数据库频繁创建连接、释放连接,造成资源浪费,从而影响系统性能。
- Sql语句在代码中硬编码,代码不宜维护,而在实际开发中sql语句变化的可能性较大。
- 查询操作时,需要手动将结果进行封装。插入操作时,需要将实体数据手动设置到占位符位置。
2. 解决方案:
- 使用数据库连接池初始化连接资源
- 将Sql语句提取到xml配置文件中
- 使用反射、内省等底层技术,将实体属性与表字段自动映射
3. 什么是MyBatis?
以上所描述的问题,我们都可以使用MyBatis来解决
MyBatis是基于java的持久层框架,其特点如下:
- 内部封装了JDBC,
- 隐藏了JDBC繁杂的API
- 开发者只需要专注于sql语句即可
- 通过XML或注解的方式配置
- 采用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 数据源
- environment 环境变量
- 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的超详细备注,一定要看哦)相关推荐
- [安卓开发笔记一]Android开发配置opencv环境超详细教程
[安卓开发笔记一]Android开发配置opencv环境超详细教程 [更新于 2022年4月] 再次提醒,建议现在看到这篇文章的,仅仅把此文做一个流程参考,4年前android studio就使用cm ...
- Mybatis学习笔记——Mybatis入门
文章目录 Mybatis入门 1.为什么要使用mybatis? 2.ORM 3.mybatis简介 4.mybatis框架 5.mybatis入门程序 5.1搭建环境 5.2 配置log4j 5.3 ...
- 拯救秃头少女,让你的发量看起来暴增!
节前给大家整理了一些避免脱发的小tips,今天小编总结了一些看起来头发就很多的小技巧,让你的发量暴增!所以姐妹们别慌, 我这就来啦,走过路过不要错过呦~ 蓬松感 '蛋黄的长裙,蓬松的头发'头发一蓬松, ...
- Mybatis笔记——Mybatis入门
(一)MyBatis快速入门 通过一个案例快速入门Mybatis框架 案例:查询user表中所有数据1) 创建user表,添加数据2) 创建模块,导入坐标3) 编写MyBatis核心配置文件--> ...
- 结合Layui框架,实现SpringMVC+Spring+Mybatis,SSM整合案例CRUD(超详细代码,外加说明)
首先: 你需要去Layui官网下载UI框架.你可能会问,为什么用Layui实现页面效果?简单来说就是:简单.好用.上手快,作为JAVA后端开发人员,Layui无疑是非常友好的,拿来即用. 页面效果图: ...
- c 获取char*的长度_C/C++编程笔记:C语言字符串比较函数,超详细,值得收藏!...
前方干货准备!!! void *memset(void *dest, int c, size_t count); 将dest前面count个字符置为字符c. 返回dest的值. void *memmo ...
- 万字长文爆肝Python基础入门【第二弹、超详细数据类型总结】
目录 一.建立一个数据火车--列表 1.创建列表 2.列表元素的获取 3.列表元素的添加 4.列表元素的删除 5.列表元素的修改 二.列表的亲兄弟--元组 1.创建元组 2.元组元素的获取 3.元组和 ...
- VS添加万能头文件(超详细)
<bits/stdc++.h>这个头文件被大家亲切地成为万能头文件,在敲代码的时候往往可以给我们省去很多时间,但是这个头文件在VS中并没有,喜欢用VS的人经常为此感到烦恼,我就在为添加这个 ...
- 【学习笔记】Linux 命令万字解析(超详细)
Linux 基础 命令 命令行提示符 进入命令行环境以后,用户会看到 Shell 的提示符.提示符往往是一串前缀,最后以一个美元符号 $ 结尾,用户可以在这个符号后面输入各种命令. 执行一个简单的命令 ...
- 一起玩树莓派3+手把手带您入门树莓派(3000字+超详细图解版)
http://bbs.eeworld.com.cn/thread-503614-1-1.html?_t=t
最新文章
- 大工20秋计算机组成原理在线作业2,大工20秋《计算机组成原理》在线作业3
- Qt phonon多媒体框架(转)
- python定义一个类savingaccount表示银行账户_c#教程之c#模拟银行atm机示例分享
- AngularJS 计时器
- 解决nginx无法启动的问题——端口被占用
- 通过分区(Partition)提升MySQL性能
- java 知识积累_java学习知识积累-spring常用注解
- Kafka高可用机制入门
- 【XLL 框架库函数】 TempMissing/TempMissing12
- 高仿360云盘android端的ui实现,高仿360云盘android端的UI实现
- python lisp_随笔:code.org与python,FoxDot,Lisp
- 【SpringCloudAlibaba】微服务组件Dubbo
- addClass()与removeClass
- pamac 安装 ros-noetic-desktop-full(AUR) 失败后如何清理残留的问题
- HTML5+CSS大作业——个人博客-功能齐全(48页) html大学生网站开发实践作业
- Tomcat详细配置(全)
- [python] 使用正则表达式验证email地址是否有效
- 常见的嵌入式微处理器(Micro Processor Unit,MPU)
- Chapter7 循环神经网络-2
- [Godot] Godot Game Tools - GGT v2.0.4 使用记录