Mybatis框架笔记:基础信息

1.Mybatis介绍

MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。

摘自《百度百科》

  1. Mybatis是 ibatis的前身,属于apache基金会
  2. 2010.6转gooogle code 改名为mybatis,并做了优化
  3. spring对改名后的mybatis不再整合, mybatis自己整合了spring, 写了jar

2.为什么要用Mybatis有什么用?

(1) Mybatis的地位:

        jdbc——Spring jdbc——Mybatis——Hibernate

        手洗——搓衣板——半自动洗衣机——全自动洗衣机

        开发效率逐步增高, 执行效率逐步降低

Mybatis是中庸产品, 其比Hibernate更灵活,但比jdbc开发效率更高。

(2) 为什么要使用Mybatis?

        Mybatis封装jdbc重复代码,sql语句放在单独的xml中,程序员只关注业务,开发效率上升。

        Mybatis开发比jdbc快,但比Hibernate灵活,比Hibernate执行效率快(尤其是大批量场景)。

(3) Mybatis的优势:

         设计中庸,但灵活,且开发效率跟得上 

4.Mybatis案例搭建

github地址:

Mybatis项目:

1.创建项目,在pom.xml导包,maven管理jar包

        mybatis框架: org.mybatis 3.4.5  3.5.0

        mysql驱动: mysql.mysql-connector-java  5.0.8

<dependencies>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.0.8</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  

2.java类

         xxDao接口   xxDaoImpl实现接口   

3.入门案例|配置文件

主清单文件:configuration.xml文件  mybatis配置

<?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>
    <!--mysql连接配置文件-->
    <properties resource="conf/mysql.properties"></properties>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--mysql连接信息配置-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc_driverClass}"/>
                <property name="url" value="${jdbc_url}"/>
                <property name="username" value="${jdbc_userName}"/>
                <property name="password" value="${jdbc_userPassword}"/>
            </dataSource>
        </environment>
    </environments>
    <!--mybatis子清单文件-->
    <mappers>
        <mapper resource="mapper/user.xml"/>
    </mappers>
</configuration>

子清单文件:xx.xml  xxMapper.xml  业务sql

<?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">
<mapper namespace="org.example.dao.UserDao">
    <!--根据id获得用户信息-->
    <select id="findUserById"
            resultType="org.example.entity.User"
            parameterType="java.lang.Integer">
        select
            id,
            user_name as name,
            user_password as password,
            address
        from t_user
        where id = #{id}
    </select>
</mapper>

其他配置文件:

mysql.properties(数据库连接)   

jdbc_driverClass=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8
jdbc_userName=xx
jdbc_userPassword=xxxxx

log4j.properties (日志配置)

# Set The RootLogger
log4j.rootLogger=debug, console

# Direct Log Messages To Console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c:%L - %m%n

4.创建工具类

com.tarena.util.mybatisUtil.java:

加载总清单文件,mybatis使用连接对象sqlSession, 其等同于jdbc,用来实现连接数据库,并进行之后的数据操作。

package org.example.util;

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 = "conf/configuration.xml";
            InputStream inputStream =  Resources.getResourceAsStream(resource);
            sqlSessionFactory =
                    new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 开链接
     */
    public static SqlSession getSession(){
        SqlSession sqlSession=sqlSessionFactory.openSession();
        return sqlSession;
    }
}

5.功能实现:Mybatis使用自己的api解析清单文件,api操作增删改查

6.编写单元测试进行测

5.细节

5.1清单文件|配置文件

前情提要:清单文件和配置文件、资源文件说法不同,其实是一个东西。

1.各个清单文件都包含什么?

resource/conf/配置文件

        configuration.xml文件,包含属性文件加载、数据库连接、数据库事务配置、子清单文件加载等

        mysql.properties 数据库连接配置

 resource/mapper子清单文件:xx.xml 跟业务对应的sql

        mapper 的namespace命名空间,同意个命名空间下sql语句的id不能相同

        resultType结果集:数据查询后的返回类型

        parameterType 参数类型: 用于查询的参数类型

 resource/log4j.properties:  开启log4j日志管理

2.各个清单文件都是用来做什么的?

  • 工具类根据指定路径加载总清单文件,总清单文件中指定了子清单文件、mysql连接信息
  • 工具类解析总清单文件,获取获得sqlSessionFactory(用于开启连接)
  • 注意清单文件里用/而不是.来分割路径

3.Mybatis的总配置文件:configuration.xml 配置项是有顺序的

configuration :

        properties:资源引入

        settings

        typeAliases:设置别名

        typeHandlers

        ObjectFactory

        plugins

        environments

                environment:

                        transactionManager:事务管理

                        dataSource:数据库连接信息

5.2连接数据库和之前有什么区别?

之前开链接:

//获得连接
Connection con=DriverManager.getConnection("url","username","password");
//开启事务
con.setAutoCommit(false);

现在等价于:MyBatisUtil中

Sqlsession sqlSession=sqlSessionFactory.openSession();//直接开启事务

其中sqlSessionFactory的作用:开链接,相当于事务开启

1. getSession()——>SqlSession

2. openSession()——>开链接,相当于事务开启

SqlSession sqlSession=sqlSessionFactory.openSession();

老写法: sqlMapper,现在叫sqlSession,等同于jdbc的connetion

工具类加载总清单文件——总清单文件加载子清单文件。——mybatisUtil用于获取mybatis连接对象sqlSession|sqlMapper等同于jdbc的Connection

6.设计模式:

工厂模式:SqlSessionFactory    SqlSession sqlSession=sqlSessionFactory.openSession();

构建者模式:new SqlSessionFactoryBuilder().build(inputStream);

7.补充:xml的不自动提示怎么解决?

(1)关于智能提示:指到本地dtd文件【指向本地】本地dtd文件在jar包里

"http://mybatis.org/dtd/mybatis-3-mapper.dtd"

将其替换为本地的dtd文件即可,一般在下载的mybatis jar包里有

(2)最好用maven下载,其余方式很难下载

(3)static: 静态块:只加载一次,费时,且只需加载一次多处使用的资源

(4)最快的学习方式,基于文档学习

(5)两个相关的包记录一下:

        mybatis-jpetstore-6.0.1-bundle.zip  基本用法案例包

        mybatis-spring-1.2.0-bundle.zip  自己整合spring

(6)configuration.xml中$和#的区别:

#{}用于引用properties对象的值

${}用于引用已经交给了spring管理的值

在SpringMVC主配置文件applicationContext.xml文件中${}和#{}有什么区别_applicationcontext ${}-CSDN博客

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/608752.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI赋能EasyCVR视频汇聚/视频监控平台加快医院安防体系数字化转型升级

近来&#xff0c;云南镇雄一医院发生持刀伤人事件持续发酵&#xff0c;目前已造成2人死亡21人受伤。此类事件在医院层出不穷&#xff0c;有的是因为医患纠纷、有的是因为打架斗殴。而且在每日大量流动的人口中&#xff0c;一些不法分子也将罪恶的手伸到了医院&#xff0c;实行扒…

健康知识集锦

页面 页面代码 <% layout(/layouts/default.html, {title: 健康知识管理, libs: [dataGrid]}){ %> <div class"main-content"><div class"box box-main"><div class"box-header"><div class"box-title"&g…

STM32 RTC的使用

注意 本文的总结基于STM32F103C8T6这款MCU&#xff1b;这款MCU的RTC没有硬件万年历功能&#xff0c;是通过RTC库的HAL_RTC_GetTime()函数将秒数转换成日期数据的&#xff1b; BCD格式 VS Binary格式 这个的BCD格式具体是指8421码&#xff0c;具体区别可以看如下代码&#xf…

《Python编程从入门到实践》day23

# 昨日知识点回顾 操控飞船移动发射子弹&#xff0c;删除屏幕之外的子弹 #今日知识点学习 第13章 外星人 13.1 项目回顾 项目添加新功能前审核既有代码&#xff0c;对混乱或低效的代码进行清理 13.2 创建第一个外星人 13.2.1 创建Alien类 # alien.py imp…

C++中的std::bind深入剖析

目录 1.概要 2.原理 3.源码分析 3.1._Binder分析 3.2._CALL_BINDER的实现 4.总结 1.概要 std::bind是C11 中的一个函数模板&#xff0c;用于创建一个可调用对象&#xff08;函数对象或者函数指针&#xff09;的绑定副本&#xff0c;其中一部分参数被固定为指定值&#xf…

摄像头参数笔记

DPI 每英寸多少像素点 例如&#xff1a; 例如要冲洗4*6英寸的照片&#xff0c;扫描精度必须是300dpi&#xff0c;那么文件尺寸应该是(4*300)*(6*300)1200像素*1800像素。 MP "MP"通常是"Megapixel"的缩写&#xff0c;意为“百万像素”。 2MP两百万像素…

YOLOv5改进 | 独家创新篇 | 利用MobileNetV4的UIB模块二次创新C3(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用MobileNetV4的UIB模块二次创新C3&#xff0c;其中UIB模块来自2024.5月发布的MobileNetV4网络&#xff0c;其是一种高度优化的神经网络架构&#xff0c;专为移动设备设计。它最新的改动总结主要有两点&#xff0c;采用了通用反向瓶…

特征提取与深度神经网络(角点检测)

图像特征概述 图像特征表示是该图像唯一的表述&#xff0c;是图像的DNA HOG HOG &#xff08;Histogram of Oriented Gradients&#xff09;是一种用于目标检测的特征描述子。在行人检测中用的最多。HOG特征描述了图像中局部区域的梯度方向信息&#xff0c;通过计算图像中各个…

【教程向】从零开始创建浏览器插件(一)

第一步&#xff1a;创建一个自己的浏览器插件 在这篇博客中&#xff0c;我们将学习如何创建一个简单的浏览器插件。对于本教程&#xff0c;我们将以创建一个在浏览器中运行的基本插件为例&#xff0c;该插件能够通过点击插件图标来改变当前网页背景色。我们将使用Chrome扩展程…

关于 vs2019 c++ 20规范,STL 库提供的标准分配器 alloctor 及其 traits 及涉及分配器交换的全局函数 _Pocs

(1) 我们写 c 代码&#xff0c;使用 STL 库中的模板&#xff0c;很少自己写对象的分配器。用 STL 中的分配器也够用。研究 STL 中的分配器也可以为咱们自己写分配器提供参考。 咱们会遇到这样的场景&#xff0c;例如交换两个容器对象&#xff1a; list a ,b ; a .swap (b) ; 这…

CSS基础(CSS导入方式、选择器、属性)

层叠样式表&#xff08;Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;是一种样式表语言&#xff0c;用来描述 HTML 或 XML&#xff08;包括如 SVG、MathML 或 XHTML 之类的 XML 分支语言&#xff09;文档的呈现方式。CSS 描述了在屏幕、纸质、音频等其他媒体上的元…

Element ui input 限制只能输入数字,且只能有两位小数

<el-form-item label"整体进度&#xff1a;" prop"number"> <el-input v-model"formInline.number" input"handleInput" placeholder"百分比" clearable></el-input>% </el-form-item&g…

Re_Lasso

from sklearn.linear_model import LassoCV, Lasso import pandas as pd from sklearn.model_selection import train_test_split from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score from sklearn.model_selection import GridSearchCV# 读取数据…

游戏陪玩平台app小程序H5源码交付游戏陪玩接单软件游戏陪玩源码 陪玩小程序陪玩工作室运营模式陪玩管理系统游戏陪玩工作室怎么做

提供陪玩平台源码&#xff0c;陪玩系统源码&#xff0c;陪玩app源码&#xff0c;团队各部门配备齐全&#xff0c;分工明确&#xff0c;及时对接开发进度&#xff0c;保证开发效率 一、陪玩平台源码的功能介绍 1、派单大厅:陪玩系统源码的派单大厅内支持用户通过语音连麦的方式…

十四五”智慧城市:视频大数据汇聚系统2.0建设方案与特点分析

一、背景需求分析 随着科技的不断发展&#xff0c;智慧城市的建设已经成为城市发展的重要方向。视频汇聚系统作为智慧城市建设的重要组成部分&#xff0c;已经得到了广泛的应用和推广。视频汇聚系统是智慧城市中非常重要的组成部分&#xff0c;它利用摄像头和传感器技术来收集…

React使用Outlet实现路由跳转时局部刷新页面

Outlet是react-router-dom插件的一个组件&#xff0c;首先需要安装react-router-dom插件&#xff1a; cnpm i react-router-dom --save 官方文档 应该在父路由元素中用来渲染其子路由元素。这允许在渲染子路由时显示嵌套的 UI。如果父路由完全匹配&#xff0c;则将渲染子索引…

C++容器——stack

stack容器 C的std::stack容器是一个基于适配器模板类实现的容器适配器&#xff0c;它提供了一种后进先出的数据结构&#xff0c;即栈。 特点&#xff1a; 1.后进先出&#xff1a;元素在栈容器中按照后进先出的顺序管理&#xff0c;最后放入的元素将会最先被取出。 2.只能从栈…

OpenAI 希望您对其人工智能模型的行为发表意见

OpenAI 公布了一套高级“生活”指南&#xff0c;称为模型规范&#xff0c;该指南将定期更新&#xff0c;并确定其 AI 模型&#xff08;例如 ChatGPT 和 DALL-E&#xff09;在某些情况下的行为方式。 他们发布了初稿&#xff0c;并询问使用其模型的公众和利益相关者&#xff08…

nginx自动部署-跨操作系统

项目里面有一个需求&#xff0c;就是需要用让nginx进程提供给系统管理一个start,stop和getPid方法&#xff0c;这样系统管理可以自动拉起来nginx&#xff0c;达到自动部署的目的。离线部署同样适用 这样一来&#xff0c;我就需要提供windows版本linux不同版本的nginx源码包&am…

Vue+OpenLayers7入门到实战:OpenLayers解析通过fetch请求的GeoJson格式数据,并叠加要素文字标注,以行政区划边界为例

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战 前言 本章介绍如何使用OpenLayers7在地图上通过fetch请求geojson数据,然后通过OpenLayers解析为Feature要素叠加到图层上,并且通过动态设置标注方式显示要素属性为文字标注。 本章还是以行政区划边界为例,这个…