(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 立即下载

相关推荐

从“要啥”到“咋测”:手把手拆解Aspice SWE.1需求分析,为你的车载/嵌入式项目避坑

本文深入解析Aspice SWE.1需求分析在车载/嵌入式项目中的关键作用,帮助开发者将模糊的系统需求转化为可执行、可验证的软件需求。通过实战案例和结构化方法,详细拆解功能需求原子化、非功能需求工程化表达等核心技巧,为项目避坑提供实用指南。

weixin_31682031的博客 260

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

详解Unity中的粒子系统Particle System (三)

上一篇我们详细讲解了有关主模块的全部内容,已经对粒子系统的基本运作有了足够的了解,本篇就来讲一下被粒子系统默认启用的Emission、Shape、Renderer模块又在粒子系统中扮演着怎么样的作用吧。

梦小天幼的博客 1万+

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

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

段远山 1693

T100服务端接口实战:从注册到日志排查的全链路开发指南

本文提供了一份T100服务端接口开发的全链路实战指南。从程序注册与框架签出开始,详细讲解了接口的数据结构设计、核心业务逻辑编写,到最终的部署上线与调用验证。文章重点分享了如何利用日志文件高效定位和排查接口问题,帮助开发者快速掌握T100接口开发的关键步骤与实用技巧。

weixin_28831399的博客 300

体验灵雀云-创建基于Docker的云服务

今天体验了一下灵雀云,创建了第一个基于Docker的云服务。 1.登录灵雀云 2.开始使用 登录之后,从"控制台"进入操作界面,开始创建服务。 首先需要选择一个镜像。灵雀云已经为您提供了一些常用的镜像列表。请在“常用镜像”列表中,选择“其它”,然后找到“alauda/hello-world”镜像,点击它右侧的“选择”按钮,进入服务参数配置页面。 选择完要创建的

tomcat的专栏 3234

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

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

Flying_Fish_roe的博客 1042

⑩电子产品拆解分析-家用无线遥控开关433Mhz

①免布线随意贴,装上就能使用解决单线开关烦恼;②遥控配对简单,无线通讯距离长,信号可穿墙;

a6662580的博客 4707

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

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

残冬十九 985

汽车OTA 测试用例

汽车OTA 测试用例

天赐好车的博客 976

PyTorch实战:卷积神经网络详解+Python实现卷积神经网络Cifar10彩色图片分类

PyTorch可以说是三大主流框架中最适合初学者学习的了,相较于其他主流框架,PyTorch的简单易用性使其成为初学者们的首选。这样我想要强调的一点是,框架可以类比为编程语言,仅为我们实现项目效果的工具,也就是我们造车使用的轮子,我们重点需要的是理解如何使用Torch去实现功能而不要过度在意轮子是要怎么做出来的,那样会牵扯我们太多学习时间。以后就出一系列专门细解深度学习框架的文章,但是那是较后期我们对深度学习的理论知识和实践操作都比较熟悉才好开始学习,现阶段我们最需要的是学会如何使用这些工具。

master_hunter的博客 8935

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

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

爱技术 爱生活 1080

【YOLOv8系列】在Windows上离线搭建YOLOv8运行环境

我们都知道,通过 pip安装YOLOv8是非常方便的,但是有时候网络环境受到限制,比如公司的工作站(无法连接网络)或者机房的教学机器等等,只能通过离线的方式安装YOLOv8;今天就来记录一下离线搭建YOLOv8运行环境的过程。并记录了遇到的问题及解决过程。

AnChenliang_1002的博客 2006

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

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

sunaxp的博客 286

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

博客 250

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

mybatis解决JDBC编程的问题

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

jamieblue1的博客 499

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【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、付费专栏及课程。

余额充值