(MyBatis)MyBatis简介及jdbc编程所存在的问题

JDBC的劣势可以通过哪些方案解决? 阅读详情

1、MyBatis介绍

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

       MyBatis是一个优秀的持久层框架,它对jdbc操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

       MyBatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatement、CallableStatement)配置起来,并通过Java对象和statement中的sql进行映射生成最终执行的sql语句,最后由MyBatis框架执行sql并将结果映射成Java对象并返回。


2、jdbc编程问题总结

     2.1 创建mysql数据库:

                 1) 数据库名mybatis01

                 2) 创建两张表

                

user.sql:

/*
 Navicat Premium Data Transfer

 Source Server         : localhost_3306
 Source Server Type    : MySQL
 Source Server Version : 50722
 Source Host           : localhost:3306
 Source Schema         : mybatis01

 Target Server Type    : MySQL
 Target Server Version : 50722
 File Encoding         : 65001

 Date: 04/07/2018 11:08:15
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名称',
  `birthday` date NULL DEFAULT NULL COMMENT '生日',
  `sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别',
  `address` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 33 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '王五', NULL, '2', NULL);
INSERT INTO `user` VALUES (10, '张三', '2014-07-10', '1', '北京市');
INSERT INTO `user` VALUES (16, '张小明', NULL, '1', '河南郑州');
INSERT INTO `user` VALUES (22, '陈小明', NULL, '1', '河南郑州');
INSERT INTO `user` VALUES (24, '张三丰', NULL, '1', '河南郑州');
INSERT INTO `user` VALUES (25, '陈小明', NULL, '1', '河南郑州');
INSERT INTO `user` VALUES (26, '王五', NULL, NULL, NULL);
INSERT INTO `user` VALUES (28, '赵四', '2018-07-02', '1', '福建');
INSERT INTO `user` VALUES (29, '老王', '2018-07-02', '1', '福建');
INSERT INTO `user` VALUES (31, '小王', '2018-07-02', '1', '福建');
INSERT INTO `user` VALUES (32, '小王', '2018-07-02', '1', '福建');

SET FOREIGN_KEY_CHECKS = 1;

orders.sql:

/*
 Navicat Premium Data Transfer

 Source Server         : localhost_3306
 Source Server Type    : MySQL
 Source Server Version : 50722
 Source Host           : localhost:3306
 Source Schema         : mybatis01

 Target Server Type    : MySQL
 Target Server Version : 50722
 File Encoding         : 65001

 Date: 04/07/2018 11:19:10
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for orders
-- ----------------------------
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL COMMENT '下单用户id',
  `number` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '订单号',
  `createtime` datetime(0) NOT NULL COMMENT '创建订单时间',
  `note` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `FK_orders_1`(`user_id`) USING BTREE,
  CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of orders
-- ----------------------------
INSERT INTO `orders` VALUES (3, 1, '1000010', '2015-02-04 13:22:35', NULL);
INSERT INTO `orders` VALUES (4, 1, '1000011', '2015-02-03 13:22:41', NULL);
INSERT INTO `orders` VALUES (5, 10, '1000012', '2015-02-12 16:13:23', NULL);

SET FOREIGN_KEY_CHECKS = 1;

     2.2 创建工程

          1) 创建一个Java工程 

          2) 导入jar包,这处只需要mysql数据库的驱动包(要Build Path)

                

     2.3 jdbc编程步骤

          1) 加载数据库驱动

          2) 创建并获取数据库连接

          3) 设置sql语句

          4) 创建jdbc的preparedStatement对象

          5) 设置sql语句中的参数(使用preparedStatement)

          6) 通过preparedStatement执行executeQuery获取结果集

          7) 对sql执行结果进行解析处理

          8) 释放资源(resultSet、preparedStatement、connection)

     2.4 jdbc程序

JDBCTest.java:

package com.jadan.jdbc;

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

public class JDBCTest {
	public static void main(String[] args) {
		Connection connection = null;
		PreparedStatement prepareStatement = null;
		ResultSet resultSet = null;
		
		try {			
			// 1、加载数据库驱动
			Class.forName("com.mysql.jdbc.Driver");
			// 2、创建并获取数据库连接
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis01?characterEncoding=utf-8", "root", "1234");
			// 3、设置sql语句
			String sql = "select * from user where username = ?";
			// 4、创建jdbc的Statement对象
			prepareStatement = connection.prepareStatement(sql);
			// 5、设置sql语句中的参数
			// 第一个参数是sql语句中参数的序号(从1开始),第二个参数是设置的参数值
			prepareStatement.setString(1, "王五");
			// 6、通过prepareStatement执行executeQuery,获取结果集
			resultSet = prepareStatement.executeQuery();
			// 7、对查询的结果集进行解析处理
			while(resultSet.next()) {
				System.out.println(resultSet.getString("id") + " " + resultSet.getString("username"));
			}
			
		} catch (Exception e) {
			
			e.printStackTrace();
			
		} finally {
			// 8、释放资源
			if(resultSet != null) {
				try {
					resultSet.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			
			if(prepareStatement != null) {
				try {
					prepareStatement.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			
			if(connection != null) {
				try {
					connection.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

     2.5 jdbc问题总结:

          1) 数据库连接频繁创建和释放,会造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题

          2) Sql语句在代码中是硬编码(写死的),造成代码不易维护,实际上应用sql变化的可能较大,sql变动需要改变java代码

         3) 使用preparedStatement向有占位符号传入参数存在硬编码问题,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改Java代码,系统不易维护

         4) 对结果集解析存在硬编码问题,sql变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo对象解析就比较方便


下一篇:myBatis架构

11.zipSource Server : changgou Source Server Type : MySQL Source Se Source Server : changgou Source Server Type : MySQL Source Server Version : 50726 Source Host : 192.168.159.134:3306 Source Schema : changgou_all Target Server Type : MySQL Target Server Version : 50726 File Encoding : 65001 立即下载

相关推荐

三维视觉智能焊接系统:免示教技术的工业应用实践

本文深入探讨了三维视觉智能焊接系统中免示教技术的工业应用实践。该系统通过三维视觉相机实时扫描工件,自动识别焊缝并生成轨迹,将产线换型时间从数小时缩短至几分钟,显著提升了生产柔性。文章详细解析了其核心硬件、算法及工厂部署流程,并展望了与数字孪生、工艺智能化融合的未来趋势。

weixin_29091105的博客 432

SQL经典问题四表查询(教师,学生,成绩,课程表)---MySQL版

一. 数据库表结构 /* Navicat Premium Data Transfer Source Server : local Source Server Type : MySQL Source Server Version : 50722 Source Host : localhost:3306 Source Schema ...

sinat_29108239的博客 4922

双向可控硅控制后续篇:过零检测电路、丢波、斩波、定时

双向可控硅功率控制技巧,掌握AC负载的控温控速等。

qq_42289734的博客 3万+

JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?

JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的? 1. 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。 解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。 2. Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。 解决:将Sql语句配置在X...

段远山 1693

06 - 深度学习处理器原理

深度学习处理器的重要性在于它们可以加速深度学习任务的执行,从而推动了人工智能的发展。传统的通用处理器虽然可以执行深度学习任务,但它们不够高效,需要消耗大量的能量和时间。深度学习处理器通过硬件加速和特定设计来优化深度学习任务的执行,从而可以提高执行效率、降低能耗和加速训练和推断过程。 深度学习处理器的发展也推动了深度学习算法的创新,因为算法的发展需要硬件的支持和驱动。同时,深度学习处理器的出现也促进了更广泛的应用场景,包括自动驾驶、人脸识别、语音识别、图像识别等领域。因此,深度学习处理器的重要性不仅在于加速

m0_51339444的博客 752

LeRobot 入门教程(十)LIBERO 机器人终身学习评估

LIBERO是一项专注于机器人终身学习(LLDM)的基准测试平台,包含130项任务,分为5大套件(空间推理、物体操作、目标约束等)。LeRobot框架已集成LIBERO,支持单/多套件评估,并兼容SmolVLA模型。训练需使用预处理数据集(HuggingFaceVLA/libero),观测数据需符合规范(8维状态+双摄像头图像)。该平台采用MuJoCo模拟,支持无头服务器运行,旨在推动机器人持续学习算法的发展与标准化评估。

2506_90492529的博客 1664

JDBC编程的哪些不足之处,MyBatis解决方案

JDBC 是 Java 中基础的数据库访问技术,虽然功能强大,但在实际开发中存在代码冗长、SQL 与代码耦合、参数处理繁琐、异常处理复杂、事务管理麻烦等问题。这些不足使得 JDBC 编程在中大型项目中显得笨重和难以维护。MyBatis 作为一个半 ORM 框架,通过提供 SQL 与代码分离、减少重复代码、简化参数设置和结果映射、内置事务管理、异常处理简化等功能,成功解决了 JDBC 编程中的诸多问题。它不仅简化了数据库访问代码,还增强了代码的可维护性和可读性,使。

Flying_Fish_roe的博客 1042

SAP 错误消息调试之七种武器:让所有的错误消息都能被定位

目录 长生剑 - SAPGUI Where Used List 碧玉刀 - ABAP调试器观察点 霸王枪 - ABAP调试器动态断点 多情环 - ABAP代码静态扫描 孔雀翎 - SAT 离别钩 - ST05 拳头 - 迷之方法??? Jerry在2018年开始用中文在微信公众号平台上写作之前,在SAP官方社区上总共写了639篇英文博客。 其中有一篇写于2013年介绍ABAP调试技巧的博客:

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2811

2020-10-10: 传统JDBC开发存在的问题?

2020-10-10: 传统JDBC开发存在的问题?前言传统JDBC开发存在的问题? 前言 每日一题专栏 传统JDBC开发存在的问题? 频繁创建数据库连接对象、释放,容易造成系统资源浪费,影响系统性能。可以使用连接池解决这个问题。但是使用jdbc需要自己实现连接池。 sql语句定义、参数设置、结果集处理存在硬编码。实际项目中sql语句变化的可能性较大,一旦发生变化,需要修改java代码,系统需要重新编译,重新发布。不好维护。 使用preparedStatement向占有位符号传参数存在硬编码,因为sql

残冬十九 985

[QMT和ptrade量化交易小白入门]-125、菜场大妈加上四大现金行业指数风控,最大回撤从22%减少了一半

群里面有人建议,在菜场大妈策略的基础上,加入申万的行业指数(银行,钢铁,有色,煤炭)测算其宽度,当这四大行业其中有一个高就会清仓(用来控制回撤)。这背后的逻辑是,在存量资金博弈的市场环境中,资金总量相对固定,当银行、钢铁、有色、煤炭等大市值周期行业因基本面改善(如涨价、政策催化)或避险需求而走强时,会吸引大量资金涌入,导致其他板块(尤其是小市值股票)面临流动性虹吸。经过回测,对比上一个版本发现确实是可以降低一半的回撤,最大回撤从22.3%降到了11.4%,而且有很多时间是空仓等待。

木头大左的博客 241

数据本体论如何指导数仓建模?

数据本体论指导数仓建模的核心在于构建业务语义与数据结构的桥梁。该方法从业务域中抽象标准化知识体系,包含核心概念、属性、关系和规则五大要素,并将其映射为分层数仓模型。通过"业务本体梳理→本体建模→模型映射→治理迭代"的流程,实现数仓从"结构存储"到"语义载体"的升级。相比传统建模,该方法能解决语义不一致、跨域融合难等问题,使数仓具备更好的可扩展性和业务对齐性。实践表明,以数据本体论为指导的数仓建模能显著提升数据资产的可理解性和复用价值。

石榴姐yyds 395

【MyBatis】1:JDBC编程存在的问题

做Java开发,如何操作数据库?想必大家都知道,使用JDBC(Java Data Base Connectivity),这是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它是由一组用Java编写的类和接口组成。JDBC提供了一种基准,在此基础上我们可以构建更高级的工具和接口,使数据库开发人员能够更加方便和轻松的编写数据库应用程序。         JDBC编程8步

爱技术 爱生活 1080

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

使用Mybatis解决JDBC存在的相关编程问题

mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。   MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注...

sunaxp的博客 286

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

mybatis学习笔记(1)---- 原生JDBC编程中存在的问题

mybatis学习笔记(一)---- 原生JDBC编程中存在的问题 JDBC编程的步骤 注册数据库驱动 创建连接者对象(Connection) 定义sql语句 创建执行者对象(用Preparestatement,解决sql注入问题) 执行sql语句(DML,DQL) 处理结果 释放资源 问题分析 数据库连接问题:原生JDBC每次连接数据库的时候,都会创建一个连接者对象,用完之后,就会释放这个...

博客 250

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

mybatis解决JDBC编程的问题

一、JDBC程序回顾 public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { // 1、加载数据库驱动 ...

jamieblue1的博客 499

【Mybatis】从JDBC到Mybatis的改进

本文从原始的JDBC编程,到Mybatis的改进谈起,主要侧重Mybatis再这期间的一些特点和封装。 首先先看一段原始JDBC的查询数据库表记录的操作。Public static void main(String[] args) { Connection connection = null; PreparedStatement preparedSt

博学之,审问之,慎思之,明辨之,笃行之 7060

MyBatis-Day1-熟悉JDBC 并引入 Mybatis

Mybatis简介: MyBatis 是一款基于java的持久层框架,IBatis提供的持久层框架包括SQL Maps和Data Access Object(DAO),几乎避免了所有的JDBC连接数据库和操作数据库的代码。 JDBC编程流程: 加载数据库驱动 创建并获取数据库连接 创建jdbc statement 对象 设置SQL语句 设置SQL语句的参数(使用preparedStatement...

Alex999000的博客 321

传统JDBC与Mybatis介绍

1. 传统JDBC编程 假设我们有一个数据库,名为mybatis,其中有一张为user表,其中id为这这张表的自增主键,如下: 创建一个Java项目,名为mybatis,导入mysql-connector-java-5.1.30-bin.jar包: 1.1 JDBC编程 传统的JDBC编程的步骤如下: 加载数据库驱动 创建并获取数据库链接 设置sql语句 创建jdbc stat...

Jitwxs 1244

从JDBC到Mybatis【网络通信编程】

这里写目录标题一级目录二级目录三级目录 一级目录 二级目录 三级目录

wanerXR的博客 211

Mybatis 入门

1. 数据库连接使用时就创建,不使用时便立即释放,从而对数据库进行频繁的操作,导致资源的浪 费、影响性能。优化设想:使用数据库连接池管理数据库对象。2. sql都是硬编码到Java程序中,如果改变sql,那么得重新编译Java代码,不利于系统后期的维护。优化设想:将sql语句配置在xml中,即使改变sql也不用重新编译源代码。3. 向PreparedStatement设置参数,也是硬编码到Java程序中,不利于后期的维护。

m0_74075467的博客 897

Java面试必备:JDBC编程的不足之处及MyBatis的解决方案

JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,虽然功能强大,但在实际开发中存在诸多不足:

qq_58299462的博客 692

mybatis入门基础(一)JDBC的简介以及Mybatis的入门程序

JDBC编程步骤以及其优缺点JDBC程序实现的是表查询的操作Public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet

小糖豆 896

Mybatis和JDBC编程的比较

1、JDBC编程数据库连接频繁的创建和释放连接,浪费系统资源,如果使用数据库连接池可解决此问题。Mybatis在SqlMapConfig.xml中配置数据库连接池,使用连接池管理数据库连接 2、Sql语句在写代码中造成代码不易维护,实际场景中sql变化的可能较大,sql变动需要改变java代码。Mybatis将Sql语句配置到Mapper.xml文件中,与java代码分离 3、JDBC编程向sql...

1088

MyBatis介绍

MyBatis介绍 MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建con...

android开发笔记 1790

由传统JDBC到mybatis

1、总结大学使用JDBC编程的步骤(基本已遗忘) 加载数据库驱动 创建并获取数据库连接 创建jdbc statement对象 设置sql语句 使用preparedStatement设置sql语句中的参数 通过statement对象执行sql语句,返回结果 对sql执行结果进行解析处理 释放资源(resultSet、preparedstatement、connection)...

SSXS3826的博客 124
上一篇: (Spring)Spring框架的事务管理之声明式事务管理(二)
下一篇: (Maven)maven简介
Jadan-Z
博客等级 码龄10年 8粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值