MyBatis入门及基本使用方法。

MyBatis 入门--实训2019/10/19 本文总揽 1、Mybatis的介绍 2、Mybatis的入门 a) 使用jdbc操作数据库存在的问题 b) Mybatis的架构 c) Mybatis的入门程序 3、Dao的开发方法 a) 原始dao的开发方法 b) 动态代理方式 4、SqlMapConfig.xml文件说明 MyBatis 和 Hibernate 区别? 重点 1 MyBatis介绍 背景: MyBatis 本是apache... 阅读详情

1.MyBatis简介:

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

1.1存储过程:

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。

2.JDBC:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * @author Evan
 */
public class JDBCTest {
    public static void main(String[] args) throws Exception {
        Connection connection = null;
        PreparedStatement prepareStatement = null;
        ResultSet rs = null;

        try {
            // 加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 获取连接
            String url = "jdbc:mysql://127.0.0.1:3306/dbname";
            String user = "root";
            String password = "123456";
            connection = DriverManager.getConnection(url, user, password);
            // 获取statement,preparedStatement
            String sql = "select * from tb_user where id=?";
            prepareStatement = connection.prepareStatement(sql);
            // 设置参数
            prepareStatement.setLong(1, 1l);
            // 执行查询
            rs = prepareStatement.executeQuery();
            // 处理结果集
            while (rs.next()) {
                System.out.println(rs.getString("userName"));
                System.out.println(rs.getString("name"));
                System.out.println(rs.getInt("age"));
                System.out.println(rs.getDate("birthday"));
            }
        } finally {
            // 关闭连接,释放资源
            if (rs != null) {
                rs.close();
            }
            if (prepareStatement != null) {
                prepareStatement.close();
            }
            if (connection != null) {
                connection.close();
            }
        }
    }
}

mybatis入门:

搭建项目首先通过maven加载mybatis及相关必须的jar包。以及mysql的驱动包。

		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.2</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.34</version>
		</dependency>

创建mybatis核心配置文件:放在src/main/resources目录下.一个简单的示例:

<?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>
	<settings>
		<setting name="logImpl" value="LOG4J" />
	</settings>
	<!-- 设置别名 -->
	<typeAliases>
		<package name="com.******.pojo" />
	</typeAliases>
	<!-- 环境 -->
	<environments default="default">
		<environment id="default">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://********:3306/dbname" />
				<property name="username" value="username" />
				<property name="password" value="password" />
			</dataSource>
		</environment>
	</environments>
	<!-- 加载映射文件 -->
	<mappers>
		<package name="com.******.mapper" />
	</mappers>
</configuration>

XML 配置文件中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。

构建 SqlSessionFactory:

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。

      private static SqlSessionFactory factory;
		//多线程
		private static ThreadLocal<SqlSession> tl = new ThreadLocal<>();
		static{
			try {
				InputStream is = Resources.getResourceAsStream("mybatis.xml");
				//build模式
				//SqlSessionFactory是创建SqlSession的工厂
				factory = new SqlSessionFactoryBuilder().build(is);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

从 SqlSessionFactory 中获取 SqlSession:

既然有了 SqlSessionFactory,顾名思义,我们就可以从中获得 SqlSession 的实例了。SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。

       /**
		 * 获取SqlSession的方法
		 */
		public static SqlSession getSession(){
			SqlSession session = tl.get();
			if(session==null){
				tl.set(factory.openSession());
			}
			return tl.get();
		}
		
		public static void closeSession(){
			SqlSession session = tl.get();
			if(session!=null){
				session.close();
			}
			tl.set(null);
		}

 

接下来创建pojo实体类,以及xml映射文件,或者配置接口,一个SQL语句既可以通过 XML 定义,也可以通过注解定义。一个注解的简单定义:

public interface TestMapper {
	//查询起飞机场,先在飞机信息表里查询起飞机场的id,在用这个id在机场信息里查询起飞机场。
	@Select("select * from test")
	List<test> selTest();
}

调用这个sql:

       //获得SqlSession,通过工具方法
		SqlSession session = MyBatisUtil.getSession();
		//获得接口
		TestMapper testMapper = session.getMapper(TestMapper.class);
		testMapper.selTest();

xml的一个简单示例:

<?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="com.******.mapper.TestMapper">
  <select id="selectTest" resultMap="test">
    select * from Blog where
  </select>
</mapper>

调用方法:

List<test> test = sqlSession.selectTest("com.******.mapper.TestMapper.selectTest");

也可以两种方式都结合用,接口和xml都写。可以写成这样,可以直接调用接口。和上边这个调用这个sql一样。

public interface TestMapper {
	//条件查询接口,param映射。
	List<test> selectTest();
}

 

几个重要的概念:

 

SqlSessionFactoryBuilder

这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。 你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但是最好还是不要让其一直存在,以保证所有的 XML 解析资源可以被释放给更重要的事情。

SqlSessionFactory

SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。 使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏味道(bad smell)”。因此 SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。

SqlSession

每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 绝对不能将 SqlSession 实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。 也绝不能将 SqlSession 实例的引用放在任何类型的托管作用域中,比如 Servlet 框架中的 HttpSession。 如果你现在正在使用一种 Web 框架,要考虑 SqlSession 放在一个和 HTTP 请求对象相似的作用域中。 换句话说,每次收到的 HTTP 请求,就可以打开一个 SqlSession,返回一个响应,就关闭它。 这个关闭操作是很重要的,你应该把这个关闭操作放到 finally 块中以确保每次都能执行关闭。

 

MyBatis详解_与配置MyBatis 立即下载

相关推荐

SpringBoot Actuator未授权访问漏洞实战:从发现到利用

本文深入剖析了SpringBoot Actuator未授权访问漏洞的成因、危害与利用手法。文章详细演示了如何发现暴露的端点,并通过实战案例复现了从敏感信息泄露到利用反序列化漏洞实现远程代码执行(RCE)的全过程,为开发与运维人员提供了从漏洞发现到修复加固的完整安全指南。

weixin_29231221的博客 259

JavaScript

JavaScript 是一种客户端脚本语言。运行在客户端浏览器中,每一个浏览器都具备解析 JavaScript 的引擎。 脚本语言:不需要编译,就可以被浏览器直接解析执行了。 核心功能就是增强用户和 HTML 页面的交互过程,让页面有一些动态效果。以此来增强用户的体验!

itzhuzhu的博客 3871

RS-485调试踩坑实录:MAX13487数据回环问题排查与修复(附电路图)

本文深入解析了RS-485通信中MAX13487芯片的数据回环问题,提供了详细的排查过程和解决方案。通过分析芯片特性和自动换向机制,揭示了RO引脚配置不当是导致问题的关键原因,并给出硬件(添加上拉电阻)和软件(调整MCU配置)两种修复方案,附有优化设计建议和实际调试技巧。

play7的博客 1297

java 闭包_javascript 近乎神话般的概念:闭包

写在前面JavaScript 一个近乎神话 对于JavaScript有使用经验但却从未真正理解闭包概念的人来说,理解闭包可以说是某种意义上的重生。闭包并不是需要学习新的语法才能使用的工具。闭包的产生是基于词法作用域写代码时自然产生的结果。换句话说,你不需要要为了闭包而写闭包,闭包在我们写的代码中随处可见。当你真正了解闭包之后,会发现,哦~,原来我以前所敲的代码中已经出现了很多闭包了鸭!一个小 de...

weixin_39844426的博客 191

STM32进入HardFault_Handler时,如何找到问题所在?

当STM32进入HardFault_Handler时,定位问题发生的点

m0_60831979的博客 2149

Qt自带绘图与GDI+绘图方式比较_gdi+实时绘制qt(2)

2、GDI+是Windows操作系统中的图形设备接口,它提供了一套用于绘制图形的API,包括了图形渲染、图形变换、图形剪切、图形填充等功能,使开发者可以快速地开发出各种类型的图形应用程序。1、Qt是一个跨平台的C++应用程序框架,它提供了一套用于GUI编程的类库,包括了绘图、网络、XML、数据库、多线程等模块,使开发者可以快速地开发出高质量的跨平台应用程序。Qt提供了一套用于绘图的类库,包括了QPainter、QPen、QBrush等类,使开发者可以快速地进行图形绘制。

qq_17136213的博客 915

javascript基础

MyBatis构建sql和JS基础 mybatis构建sql 基本介绍 mybatis中通过一些注解和注解的构建类实现对数据库增删改查的操作 代码实现 package com.itheima.mapper; import com.itheima.bean.Student; import com.itheima.sql.ReturnSql; import org.apache.ibatis.annotations.DeleteProvider; import org.apache.ibatis.annota

gongwenxi的博客 205

UUVsimulator仿真

pub -r 10 /cmd_vel geometry_msgs/Twist控制运动没有反应。通过键盘控制运动,接收不到/cmd_vel消息。

Fatal__的博客 4605

MyBatis——基础用法

MyBatis——简介 框架一览: (1)解决技术整合问题的框架:Spring框架是由于软件开发的复杂性而创建的。 (2)解决WEB层问题的MVC框架:SpringMVC。 (3)解决数据的持久化问题的框架:MyBatis是一个基于Java的持久层框架,而Hibernate是一个封装程度更高的持久层框架。 mybatis框架(持久层框架) mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statemen

长不大的大灰狼 1209

ZooKeeper 实战:使用 Docker Compose 部署 ZooKeeper 集群

ZooKeeper是一个开源的分布式协调服务,用于管理大型分布式系统中的数据。它由Apache软件基金会提供,最初是Hadoop的一个子项目,但后来发展成为一个独立的顶级项目。ZooKeeper提供的一致性协调服务对于构建分布式应用和服务非常重要,特别是在需要精确的领导选举、配置管理、命名服务、分布式同步和提供分布式锁等功能时。

SmartSi 1541

【WorkBuddy专栏36】从踩坑到上线——WorkBuddy代码开发避坑指南与部署完全手册

【WorkBuddy专栏36】从踩坑到上线——WorkBuddy代码开发避坑指南与部署完全手册

AI人人懂 1062

mybatis之generator入门及使用方法

一、generator简介 MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器。它将为所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代码。它将内省数据库表(或许多表),并将生成可用于访问表的工件。这减少了设置对象和配置文件以与数据库表交互的初始麻烦。MBG寻求对简单CRUD(创建,检索,更新,删除)的大部分数据库操作产生重大影响。(一句话,generator可以自动生成代码和映射文件,但是多表查询还是需要我们去配置,即使这样也可以省

qq_44959042的博客 1733

【8】mctp & pldm

异步会check seq,保证不丢包,虽然发一条req,不用等,但是不能发下一条req,等上条response回来后才能发下一条。TO(tag owner)=1是request,TO=0是response,但是异步通信response由0改为1。如下还有kcs,i3c,serial等。

持续更新ing... 1080

mybatis入门使用方法

1 Maven 关联Idea ​ file—>seetings—>maven----->home(安装路径) ​ -------》 user settings files 设置安装路径的config路径 ​ ------》 本地仓库 本地仓库路径 ​ 本项目全局从本地加载------》seetings—>...

陈福国的博客 261

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Mybatis 入门()基本使用方法

1.添加jar包 【mybatis】 mybatis-3.1.1.jar 【MYSQL 驱动包】 mysql-connector-java-5.1.7-bin.jar 2.建库+建表 create database mybatis; use mybatis; CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT...

dimeizhen4622的博客 92

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Mybatis-Plus入门使用方法

Mybatis-Plus MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。 特点 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 curd,性能基本无损耗,直接面向对象操作 强大的 crud 操作:内置通用 mapper、通用 service,仅仅通过

Yuanfire的博客 967

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Mybatis-Plus入门案例以及使用方法

MyBatis-Plus(简称 MP)是一个 ,为简化开发、提高效率而生。JDK:JDK8+构建工具:maven 3.5.4MySQL版本:MySQL 8Spring:5.3.1MyBatis-Plus:3.4.3.4 添加数据 创建maven工程 打包方式为jar 创建实体类User 创建mapper接口和映射文件 mapper mapper映射文件 在resources下的com/atguigu/mybatisplus/mapper目录下创建UserMapper.xml 创建Mybatis的核

weixin_46245201的博客 2667

MyBatis快速入门(18)Mybatis API方法介绍

我们已经讨论过如何配置 MyBatis 和创建映射文件了。MyBatis 的 Java API 就是你收获你所做的努力的地方。正如你即将看到的,和 JDBC 相比,MyBatis 很大程度简化了你的代码并保持代码简洁,容易理解并维护。MyBatis 3 已经引入了很多重要的改进来使得 SQL 映射更加优秀。 SqlSessions 使用 MyBatis 的主要 Java 接口就是 SqlSession。你可以通过这个接口来执行命令,获取映射器和管理事务。我们会概括讨论...

Blues的专栏 1043

【MyBatis】MyBatis基础学习(1)mybatis简介,JDBC原始方法分析,mybatis入门案例

【MyBatis】MyBatis基础学习(1)mybatis简介,JDBC原始方法分析,mybatis入门案例框架简介框架解决的问题1. MyBatis 简介2. JDBC的原始方法分析3. MyBatis快速入门3.1 通过xml文件3.2 通过注解方式 框架简介 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发...

来日浅谈的博客 456

tsd3dmapper软件使用方法_mybatis-plus的使用 ------ 入门

前言:mybatis在持久层框架中还是比较火的,一般项目都是基于ssm。虽然mybatis可以直接在xml中通过SQL语句操作数据库,很是灵活。但正其操作都要通过SQL语句进行,就必须写大量的xml文件,很是麻烦。mybatis-plus就很好的解决了这个问题。欢迎大家关注我的公众号 javawebkf,目前正在慢慢地将简书文章搬到公众号,以后简书和公众号文章将同步更新,且简书上的付费文章在公众号...

weixin_39737233的博客 1548

Mybatis入门小错误及改正方法

1.报错Result Maps collection does not contain value forxxx 原因:查询返回的应该是一个实体类,却在配置文件里select标签里的resultType写成了resultMap; 解决:将reslutMap改为resultType即可。 2.报错Unknown initial character set index ‘255’ received f...

qq_44753180的博客 191

MyBatis保姆级入门教程(前言)我是使用的idea 我就说说我使用MyBatis的方法

一、MyBatis简介与配置 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 1)maven自动管理jar文件 2)maven自动下载jar和他的文档和源代码 3)maven管理jar直接的依赖, a.j

AsagamiFujino的博客 393

Mybatis入门及使用

MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。MyBatis本是 Apache的一个开源项目iBatis,2010年这个项目由apache迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。在上面我们提到了两个词:一个是持久层,另一个是框架。持久层:指的是就是数据访问层(dao),是用来操作数据库的。框架:是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。在框架的基础上进行软件开发更加高效、规范、通用、可拓展。

2202_75483664的博客 1971

mybatis入门——6.使用HashMap并对方法封装实现CURD

使用HashMap的方法和JOPO的方法基本类似,HashMap的方法不用建立User类,它是根据hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。 先说下总的流程:1、数据库建表。2、添加mybatis.jar和mysql-connector.jar。3、配置mybaits-config.xml文件。4、创建获得Factory和Session的类。5、配置Mapping...

Bruce_Json的博客 1545

MyBatis-Plus快速入门

MP在mybatis启动的时候,它在mybatis的xml和注解注入之后,紧接着反射分析实体,然后注入到底层容器中。就是注入crud之类的。注入之前MP会进行判断,是否已经注入同样的方法,如果已经注入,就不在注入。它的注入时机在容器启动时,所以MP使用crud、本身是无性能损耗的。无侵入:Mybatis-Plus 在 Mybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性。

鹏神丶明月天 704
上一篇: 软件开发教会了我什么?
下一篇: 一个mybatis动态 SQL查询的完整小案例。包含多表联合查询。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值