记录21.08.04 — mybatis入门学习
mybatis入门
mybatis简介
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
查看mybatis文档
优点
1.基于SQL语法,简单易学。
2.能了解底层组装过程。
3.SQL语句封装在配置文件中,便于统一管理与维护,降低了程序的耦合度。`
4.程序调试方便。
所有sql语句,全部定义在xml(建议)中。也可以通过注解的方式在接口上实现。这些映射文件称之为mapper。
ORM映射框架
对象关系映射
思想:对象模型和关系模型的映射。
把对象领域的一个类映射为关系领域的一个表。
类的属性映射为表的字段。
类的一个对象映射为表的一行记录。
在java程序中,把对数据库表记录的操作映射为对java对象的操作。
Hibernate 纯ORM映射框架 ,不需要编写sql语句。 编写Hql语句。
Mybatis 半ORM映射框架, sql语句需要程序员编写。
Mybatis工作原理
Mybatis配置文件有2种
Mybatis的主配置文件,SqlMapConfig.xml 配置mybatis整体配置信息比如:连接池,settings,plugin,mapper........
一个工程下需要一个,保存在类路径下。src
Mybatis的映射文件, xxxMapper.xml 比如:UserMapper.xml
该文件主要用来定义sql语句。保存在类路径,也可以保存在其他目录
SqlSessionFactory 用来管理SqlSession对象。
SqlSession对象,对Connection对象的封装。
SelSessionFactory 重量级的对象,创建耗费资源。属于单例对象,线程安全的。
SqlSession对象,线程不安全的,轻量级对象,每次对数据库的操作使用独立的SqlSession对象。
在Mybatis映射文件中,定义的一条sql语句,有多个组成部分,
包括:sql 语句,唯一的id,输入参数,输出参数等。
是一个整体,称作是一个statement。
Statement的作用:把输入参数,输出参数和sql语句整合到一起。
Execution 执行器
用来执行一个statement,把sql语句提交到数据库并执行。
mybatis用到的jar包
其中与日志有关的为log4j和slf4j
slf4j是日志的规范,log4j是规范的实现
javassist与cblib是代理工具,用来生成代理类
javassist是java的动态代理,cglib是第三方代理
(代理是什么?比如你想买华为手机,不是去华为总部,而是去华为的销售店,销售店的手机与总部生产的手机是一样的,那么销售店就是总部的一个代理。所以代理类与目标类中的方法是相同的)
用mybatis开发工具,需要把jar包拷到工程下,但是用maven的话,直接添加依赖就行了
maven简介
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
现在Maven多用与管理依赖
创建一个maven项目
直接点击下一步,选择模板可能会导致项目目录不全
构件坐标就是maven用来找jar包的坐标,分为三部分
GroupId(域名的反写)、ArtifactId(项目名)、版本号
创建好后,我的目录结构为
修改仓库
在maven所在文件夹下的conf中,找到settings.xml(默认路径在c盘user下的.m2中)
在该文件中还可以修改镜像文件
引入依赖
在pom.xml文件中导入依赖
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<type>pom.lastUpdated</type>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.11.0.GA</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.2.5</version>
</dependency>
</dependencies>
引入的包与之前图片中看到的一样,还多几个单元测试的
注意MySQL的版本改为自己的
配置文件
在resources中创建一个xml文件,名称可以随意,但是规范的命名为SqlMapConfig
内容比较固定
<?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>
<!-- 引入properties资源文件 ,数据库连接的资源文件-->
<properties resource="DB.properties">
</properties>
<!-- 为实体起别名 -->
<typeAliases>
<!-- <typeAlias type="com.neuedu.pojo.Employee" alias="employee"/> -->
<!-- 批量起别名
为name指定的包中,所有类起别名,别名为类名首字母大小写均可。
-->
<package name="com.neuedu.pojo"/>
</typeAliases>
<!-- 配置环境 -->
<environments default="development">
<environment id="development">
<!-- 配置mybatis事务管理 ,jdbc的事务管理
JDBC - 这个类型直接全部使用 JDBC 的提交和回滚功能。它依靠使用连接的数据源来管理事务的作用域。
MANAGED - 这个类型什么不做 , 它从不提交 、 回滚和关闭连接 。 而是让窗口来管理事务的全部生命周期 。
(比如说 Spring 或者 JAVAEE 服务器)
-->
<transactionManager type="JDBC"/>
<!-- 配置数据源
UNPOOLED :这个数据源实现只是在每次请求的时候简单的打开和关闭一个连接。
虽然这有点慢,但作为一些不需要性能和立即响应的简单应用来说 , 不失为一种好选择
不用连接池。
POOLED : 使用连接池管理connection对象
JNDI : 使用其他框架 如spring来管理连接
${} OGNL表达式 在jsp页面中%{}
-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
</mappers>
</configuration>
xml文件的约束有两种,一种是xsd一种是dtd
引用数据库的文件
按照自己的数据库修改名称与账号密码
其他的在注释中已经写的比较清楚了
入门程序
记录21.08.04 — mybatis入门学习的更多相关文章
- MyBatis入门学习教程-使用MyBatis对表执行CRUD操作
上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...
- MyBatis入门学习(二)
在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询.这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了 ...
- MyBatis入门学习教程-MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis入门学习(一)
一.MyBatis入门简要介绍(百科) MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyB ...
- MyBatis学习总结(一)——MyBatis入门学习
一.MyBatis 简介 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可 ...
- mybatis入门学习记录(一)
过硬的技术本领,可以给我们保驾护航,飞得更高.今天开始呢.我们就一起来探讨使用mybatis的好处. 首先我们一起来先看看原生的JDBC对于数据库的操作,然后总结其中的利弊,为学习mybatis奠定基 ...
- MyBatis入门学习教程-解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...
- MyBatis入门学习教程-Mybatis3.x与Spring4.x整合
一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: mvn archetype:create -DgroupId=me.gacl -DartifactId=spring4-myba ...
- MyBatis入门学习教程-实现关联表查询
一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...
随机推荐
- 『心善渊』Selenium3.0基础 — 8、使用CSS选择器定位元素
目录 1.CSS选择器介绍 2.CSS选择器定位语法 3.Selenium中使用CSS选择器定位元素 (1)通过属性定位元素 (2)通过标签定位元素 (3)通过层级关系定位元素 (4)通过索引定位元素 ...
- [HTML]图像标签<img>的用法、属性及路径问题
图像标签:<img> 用法:<img src = "图像地址"> 图像标签的属性 属性 说明 src 指明图像的地址(分为相对路径和绝对路径两 ...
- 乘风破浪,遇见下一代操作系统Windows 11,迄今为止最美版本,原生支持安卓应用
遇见下一代操作系统Windows 11 全新Windows体验,让您与热爱的人和事物离得更近. Windows一直是世界创新的舞台.它是全球企业的基石,助力众多蓬勃发展的初创公司变得家喻户晓.网络在W ...
- 35、cobbler自动化安装操作系统
35.1.cobbler介绍: Cobbler是独立的,不需要先安装Kickstart然后再安装Cobbler: Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速 ...
- layui table 表格上添加日期控件
方法一: var tableInit = table.render({ elem: '#tbtxrz' , method: 'post' , data: jsonData , height: &quo ...
- NameServer 核心原理解析
在之前的文章中,已经把 Broker.Producer 和 Conusmer 的部分源码和核心的机制介绍的差不多了,但是其实 RocketMQ 中还有一个比较关键但是我们平时很容易忽略的组件--Nam ...
- CentOS-Docker安装Redis(单点)
下载镜像 $ docker pull redis 创建目录 $ mkdir -p /usr/redis/data 运行镜像 $ docker run --restart=unless-stopped ...
- hadoop学习(二)hadoop集群的启动
一.完全分布式集群环境的搭建 1.配置hosts文件:将三台集群服务器的主机名与IP的对应关系互相配置到对方的hosts文件中,以便对方服务器能通过主机名寻找IP,hosts文件在/etc目录下. 2 ...
- rename 批量修改文件名
1.rename的用法 rename与mv的区别就是mv只能对单个文件重命名,而rename可以批量修改文件名 linux中的rename有两种版本,一种是C语言版的,一种是Perl版的.早期的Lin ...
- 『无为则无心』Python函数 — 28、Python函数的简单应用
目录 1.函数嵌套调用 2.Python函数的简单应用 (1)打印线条 (2)函数计算 (3)打印图形 3.函数的说明文档 (1)函数的说明文档的作用 (2)函数说明文档的语法 (3)查看函数的说明文 ...