MyBatis 回顾 JDBC(一)
引言
学过 Java 的童鞋都知道,在 Java 中只有 JDBC 可以访问数据库,但是只要使用过 JDBC 的同学肯定也感受到 JDBC 访问数据库的繁琐, 需要编写大量的代码,经历一系列的步骤。
以下是一个简单的 JDBC 操作例子,大家感受一下吧。
创建数据库表
#创建表
DROP TABLE IF EXISTS tb_user;
CREATE TABLE tb_user (
id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
userName varchar(32) DEFAULT NULL,
password varchar(32) DEFAULT NULL,
name varchar(32) DEFAULT NULL,
age int(10) DEFAULT NULL,
sex int(2) DEFAULT NULL,
birthday date DEFAULT NULL,
created datetime DEFAULT NULL,
updated datetime DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入数据
#插入数据
INSERT INTO tb_user ( userName, password, name, age, sex, birthday, created, updated) VALUES ( 'zs', '123456', '张三', '22', '1', '1990-09-02', sysdate(), sysdate());
INSERT INTO tb_user ( userName, password, name, age, sex, birthday, created, updated) VALUES ( 'ls', '123456', '李四', '24', '1', '1993-09-05', sysdate(), sysdate());
Navicat显示结果如下:
User实体类代码
Java 工程 entity包下创建 UserEntity.java 实体类文件
import java.util.Date;
/**
* @author benjamin.xu
* @desc User实体类
* @date 2020/6/17 下午1:12
*/
public class UserEntity {
private int id;
private String userName;
private String password;
private String name;
private int age;
private int sex;
private Date birthday;
private String created;
private String updated;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getCreated() {
return created;
}
public void setCreated(String created) {
this.created = created;
}
public String getUpdated() {
return updated;
}
public void setUpdated(String updated) {
this.updated = updated;
}
@Override
public String toString() {
return "UserEntity{" +
"id=" + id +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
", name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
", birthday=" + birthday +
", created='" + created + '\'' +
", updated='" + updated + '\'' +
'}';
}
}
JDBC测试代码
Java 工程下创建 JDBCDemo.java 文件,如下:
import entity.UserEntity;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @desc JDBC
* @date 2020/6/17 上午9:18
*/
public class JDBCDemo {
public static void main(String[] args) throws Exception{
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet rs = null;
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
String url = "jdbc:mysql://localhost:3306/mybatis"; //数据库URL地址
String user = "root"; //数据库账号
String pwd = ""; //数据库密码
//获取数据库连接
connection = DriverManager.getConnection(url, user, pwd);
//获取preparedStatement
String sql = "select * from tb_user where age>?";
preparedStatement = connection.prepareStatement(sql);
//设置参数
preparedStatement.setLong(1,20);
rs = preparedStatement.executeQuery();
//处理结果集
List<UserEntity> userEntities = new ArrayList<UserEntity>();
while (rs.next()) {
int id = rs.getInt("id");
String userName = rs.getString("userName");
String password = rs.getString("password");
String name = rs.getString("name");
int age = rs.getInt("age");
int sex = rs.getInt("sex");
Date birthday = rs.getDate("birthday");
String created = rs.getString("created");
String updated = rs.getString("updated");
UserEntity userEntity = new UserEntity();
userEntity.setId(id);
userEntity.setUserName(userName);
userEntity.setPassword(password);
userEntity.setName(name);
userEntity.setAge(age);
userEntity.setSex(sex);
userEntity.setBirthday(birthday);
userEntity.setCreated(created);
userEntity.setUpdated(updated);
userEntities.add(userEntity);
}
System.out.println(userEntities);
} finally {
//关闭连接,释放资源
if (rs != null) {
rs.close();
}
if (preparedStatement != null) {
preparedStatement.close();
}
if (connection != null) {
connection.close();
}
}
}
}
运行结果如下:
[UserEntity{id=1, userName='zs', password='123456', name='张三', age=22, sex=1, birthday=1990-09-02, created='2020-06-17 09:30:58.0', updated='2020-06-17 09:30:58.0'}, UserEntity{id=2, userName='ls', password='123456', name='李四', age=24, sex=1, birthday=1993-09-05, created='2020-06-17 09:30:58.0', updated='2020-06-17 09:30:58.0'}]
Process finished with exit code 0
JDBC缺点分析
访问数据库每次都需要加载数据库驱动(驱动名称硬编码)
访问数据库每次都需要获取数据库连接(连接信息硬编码)
设置参数需要判断参数类型、参数对应的下标
结果集的数据类型需要手动判断、列名需要手动填写(重点)
获取的字段值需要逐个手动设置到实体类中(重点)
访问数据库结束后每次都要手动关闭连接
MyBatis 回顾 JDBC(一)的更多相关文章
- Mybatis解决jdbc编程的问题
1.1.1 Mybatis解决jdbc编程的问题 1. 数据库链接创建.释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题. 解决:在SqlMapConfig.xml中配置 ...
- Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
转自http://www.cnblogs.com/fnz0/p/5713102.html 不知道自己什么时候才有这种钻研精神- -. 1 背景 系统中需要批量生成单据数据到数据库表,所以采用 ...
- JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- MyBatis、JDBC相关知识
引言 在mybatis的基础知识中我们已经可以对mybatis的工作方式窥斑见豹.但是,为什么还要要学习mybatis的工作原理?因为,随着mybatis框架的不断发展,如今已经越来越趋于自动化,从代 ...
- 为什么使用Mybatis对JDBC进行包装探究
一.原生JDBC在实际生产中使用存在的影响性能的问题 首先分析使用JDBC的代码: Connection connection = null; PreparedStatement preparedSt ...
- (七) SpringBoot起飞之路-整合SpringSecurity(Mybatis、JDBC、内存)
兴趣的朋友可以去了解一下前五篇,你的赞就是对我最大的支持,感谢大家! (一) SpringBoot起飞之路-HelloWorld (二) SpringBoot起飞之路-入门原理分析 (三) Sprin ...
- MyBatis通过JDBC生成的执行语句问题
我们编程的过程中大部分使用了很出色的ORM框架,例如:MyBatis,Hibernate,SpringJDBC,但是这些都离不开数据驱动JDBC的支持.虽然使用起来很方便,但是碰到一些问题确实很棘手, ...
- MyBatis知多少(17)MyBatis和JDBC
有了MyBatis,就不再需要编写JDBC代码了.像JDBCT这样的API的确非常强大,但使用起来总不免觉得太过繁琐.代码清单给出了一个使用JDBC的示例. 从这个例子中很容易看出,JDBC API会 ...
- MySQL 存储过程实例 与 ibatis/mybatis/hibernate/jdbc 如何调用存储过程
虽然MySQL的存储过程,一般情况下,是不会使用到的,但是在一些特殊场景中,还是有需求的.最近遇到一个sql server向mysql迁移的项目,有一些sql server的存储过程需要向mysql迁 ...
随机推荐
- Spring(七)SpringMVC的文件上传
1-SpringMVC的请求-文件上传-客户端表单实现(应用) 表单项type="file" 表单的提交方式是post 表单的enctype属性是多部分表单形式,及enctype= ...
- MySQL数据类型全解析
1 概述 本文主要介绍了MySQL的各种数据类型,版本为8.x, MySQL的数据类型可以分为六类:数值类型,日期时间类型,字符串类型,二进制类型,JSON类型与空间数据类型. 2 数值类型 数值类型 ...
- (九)VMware Harbor 项目管理-上传/下载镜像
VMware Harbor项目管理 Harbor中的项目包含应用程序的所有存储库. Harbor有两类项目: 公共:所有用户都拥有公共项目的读取权限,您可以方便地以这种方式与其他人共享一些存储库. 私 ...
- 22. VUE 插槽-详解
插槽 一直对插槽不理解,今天学习,并整理一下,希望日后可以灵活运用. (一)插槽内容 先简单来个例子,看一下插槽的租作用. 1.1 不使用插槽 父组件中: <div id="app&q ...
- 通过Python实现对SQL Server 数据文件大小的监控告警
1.需求背景 系统程序突然报错,报错信息如下: The transaction log for database '@dbname' is full. To find out why space in ...
- Java JFR 民间指南 - 事件详解 - jdk.ThreadAllocationStatistics
定时线程分配统计事件:jdk.ThreadAllocationStatistics 引入版本:Java 11 相关 ISSUES: Test jdk/jfr/event/runtime/TestThr ...
- *arg和**kwarg的区别
一.*args的使用方法 *args 用来将参数打包成tuple给函数体调用 例子一: def function(*args): print(args, type(args)) function(1) ...
- 【Navicat】获取表结构的DDL语句以及获取更新表字段的操作的DDL
1.获取表结构的DDL语句 2.获取修改表结构某一字段的DDL语句 设计表-修改表字段(记住不要保存)-SQL预览
- ARM汇编中的:比较指令--CMN / CMP / TEQ / TST
1. 简介 CMP / CMN : 算术指令 TEQ / TST : 逻辑指令 它们总是会影响CPSR条件标志位. APSR(CPSR)与condition的关系图: 2. CMN -- 比 ...
- hdu5248序列变换(二分+贪心)基础题
题意(中文的直接粘题意吧) 序 ...