Mybatis框架笔记:基础信息

news/2024/10/21 21:04:48/

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 configurationPUBLIC "-//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 mapperPUBLIC "-//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">selectid,user_name as name,user_password as password,addressfrom t_userwhere 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,用来实现连接数据库,并进行之后的数据操作。

java">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连接数据库和之前有什么区别?

之前开链接:

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

现在等价于:MyBatisUtil中

java">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.ppmy.cn/news/1458856.html

相关文章

postman---认证(Certificates)是什么作用?

在 Postman 中&#xff0c;认证&#xff08;Certificates&#xff09;功能主要用于处理 TLS 客户端认证。TLS&#xff08;传输层安全性&#xff09;是用于保护网络通信安全的协议&#xff0c;它使用数字证书来验证通信双方的身份。在 Postman 中&#xff0c;认证功能允许您上传…

LifeCycle之ProcessLifeCycleOwner

问题&#xff1a;想要知道应用程序当前处在前台、后台、或从后台回到前台&#xff0c;想要知道应用的状态&#xff0c; LifeCycle提供了ProcessLifeCycleOwner的类&#xff0c;方便我们知道整个应用程序的生命周期情况 ProcessLifeCycleOwner 使用方法 1.首先添加依赖 imple…

MySql使用binlog日志恢复误删数据(强化)—— 筑梦之路

对于数据库误删数据恢复&#xff0c;推荐定期备份&#xff0c;通过定期备份的文件进行恢复&#xff0c;这里主要是使用binlog日志方式来恢复误删数据&#xff0c;之前也写过相关内容&#xff0c;这里再次强化一下步骤流程&#xff0c;增强熟悉程度。 概述 MySQL数据库可以开启…

linux文本三剑客之sed

目录 1、sed特点 1&#xff09;sed命令格式 2&#xff09;sed命令核心功能"增删改查" 2、sed命令执行过程 3、sed核心应用 1&#xff09;sed-查找p 2&#xff09;sed-删除d 3&#xff09;sed-增加cai 4) sed-替换s 1、sed特点 sed stream editor 流编辑器…

马蹄集oj赛(双周赛第二十六次)

目录 斐波那契数列的组合 三国杀 数列分段 小码哥的跳棋游戏新编 能量供应 小码哥爱数字 最小串 小船过河 摘果子 泼墨淋漓 很重的枪 小码哥的布阵指挥 斐波那契数列的组合 #include<bits/stdc.h> using namespace std;// 斐波那契数列 1 1 2 3 5 8 13 21 34…

【linux软件基础知识】std::lock_guard 和 std::unique_lock的区别

std::lock_guard 和 std::unique_lock 是两个 C++ 标准库类,它们为锁定和管理互斥体提供不同级别的灵活性和功能。 std::lock_guard 是一个简单的包装类,它提供互斥体上的作用域锁。 它获取构造锁并在超出范围时自动释放它。 std::lock_guard 专为需要锁定块或函数的整个范围…

【简单介绍下Debian常用命令】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

CSS选择器、字体文本属性、三大特性、盒子模型等

目录 导入css简介HTML的局限性CSS-网页美化CSS语法规范CSS代码风格 选择器基础选择器复合选择器 CSS字体属性字体系列font-family字体大小font-size字体粗细font-weight文字样式font-style字体复合属性font CSS文本属性文本颜色color对齐文本text-align装饰文本text-decoration…