IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 从JDBC到Mybatis -> 正文阅读

[大数据]从JDBC到Mybatis

一、简介

1. JDBC

JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。
JDBC API库常用用法

  • 制作到数据库的连接
  • 创建SQL或MySQL语句
  • 执行SQL或MySQL查询数据库
  • 查看和修改所产生的记录

架构
JDBC 的 API 支持两层和三层处理模式进行数据库访问,但一般的 JDBC 架构由两层处理模式组成:

  • JDBC API: 提供了应用程序对 JDBC 管理器的连接。
  • JDBC Driver API: 提供了 JDBC 管理器对驱动程序连接。

2. MyBatis

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

3. JDBC开发问题

JDBC查询数据库数据步骤

  • 加载JDBC驱动
  • 建立并获取数据库连接
  • 创建 JDBC Statements 对象
  • 设置SQL语句的传入参数
  • 执行SQL语句并获得查询结果
  • 对查询结果进行转换处理并将处理结果返回
  • 释放相关资源(关闭Connection,关闭Statement,关闭ResultSet)

问题

  • 频繁创建数据库连接对象,释放,造成系统资源浪费,影响系统性能,利用率低
  • 可读性差,sql语句定义、参数设置、结果集处理存在硬编码。发生变化,需要修改java代码,系统需要重新编译,重新发布。不好维护。
  • 对 ResultSet 查询的结果,需要自己封装为 List,重复代码较多
  • 业务代码和数据库的操作混用

优化

  • 使用数据库连接池对连接进行管理
  • SQL语句统一存放到配置文件
  • SQL语句变量和传入参数的映射以及动态SQL
  • 动态SQL语句的处理
  • 对数据库操作结果的映射和结果缓存
  • SQL语句的重复

4. MyBatis改进

  • 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能
  • Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。
  • 不用编写关闭资源代码。

二、项目搭建

  1. 创建项目
    在这里插入图片描述
    在这里插入图片描述
    勾选Web项,Spring Web
    在这里插入图片描述
    SQL中勾选JDBC API Mybaits Fragment 和Mysql Driver
    在这里插入图片描述
  2. 项目创建完成
    在这里插入图片描述
    在这里插入图片描述

三、项目配置

使用该种方式创建项目,则在pom.xml文件中自动添加依赖
在这里插入图片描述

  1. 修改application.properties文件,application.properties是项目自带的配置文件,也可以建立其他的配置文件,可以在文中田间端口、数据源、mydatis等相关数据
server.port=8080
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/runboot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false 
spring.datasource.username=root //账户
spring.datasource.password=******  //密码
mybatis.mapper-locations=classpath:mapper/*Mapper.xml 
  1. 建立项目文件
    在这里插入图片描述
  • UserController.Java
package com.wxcmybaits.mybaits_example.controller;

import com.wxcmybaits.mybaits_example.entity.User;
import com.wxcmybaits.mybaits_example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/getAllUser")
    public List<User> findAll(){
        return userService.findAllUser();
    }

    @RequestMapping("/getUserByUserID/{userid}")
    public List<User> findUserByUserId(@PathVariable int userid){
        return userService.findUserByUserId(userid);
    }
}
  • User.Java
package com.wxcmybaits.mybaits_example.entity;
public class User {
    private int userid;
    private String username;
    private String password;

    public int getUserid() {
        return userid;
    }

    public void setUserid(int userid) {
        this.userid = userid;
    }

    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;
    }

    @Override
    public String toString() {
        return "User{" +
                "userid=" + userid +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
  • UserMapper.Java
package com.wxcmybaits.mybaits_example.mapper;

import com.wxcmybaits.mybaits_example.entity.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface UserMapper {
    public List<User> findAllUser();
    public List<User> findUserByUserId(int userid);
}

  • UserService.Java
package com.wxcmybaits.mybaits_example.service;

import com.wxcmybaits.mybaits_example.entity.User;
import com.wxcmybaits.mybaits_example.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
    @Autowired(required=false)
    public UserMapper userMapper;

    public List<User> findAllUser(){
        return userMapper.findAllUser();
    }

    public List<User> findUserByUserId(int userid){
        return userMapper.findUserByUserId(userid);
    }
}
  1. 建立mapper文件,在里面建立UserMapper.xml文件,这个xml文件就是映射文件,sql语句就是在这里面写的,注意具体包名位置(namespace)与刚刚建立的usemapper类要对应
    UserMapper.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.wxcmybaits.mybaits_example.mapper.UserMapper">
    <resultMap id="result" type="com.first.mybatis_example.entity.User">
        <result column="userid" jdbcType="INTEGER" property="userid" />
        <result column="username" jdbcType="VARCHAR" property="username" />
        <result column="password" jdbcType="VARCHAR" property="password" />
    </resultMap>

    <select id="findAllUser" resultType="com.first.mybatis_example.entity.User">
        select  * from user;
    </select>

    <select id="findUserByUserId" resultType="com.first.mybatis_example.entity.User">
        select * from user where userid=#{userid};
    </select>
</mapper>
  1. Mysql创建表格
CREATE TABLE `user` (
  `userid` int(11) NOT NULL AUTO_INCREMENT COMMENT 'useriduser',
  `username` char(20) NOT NULL DEFAULT '' COMMENT 'username',
  `password` char(10) NOT NULL DEFAULT '' COMMENT 'password',
  PRIMARY KEY (`userid`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

INSERT INTO `user` VALUES ('1', '4545646', '546546'), ('2', '553453', 'h5354354'), ('3', '4355354', '543643453');

在这里插入图片描述

四、运行

  • 在浏览器中输入http://localhost:8080/user/getAllUser就可以看到查询结果,查询的语句是在映射文件里的,而路径由来是UserController.Java里确定的,。
    在这里插入图片描述
  • http://localhost:8080/user/getUserByUserID/1
    在这里插入图片描述
  • 问题:
    在这里插入图片描述
    修正
    在这里插入图片描述
  • 问题
    Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could no
    修正
<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.26</version>
      <scope>runtime</scope>
    </dependency>

导入jar包同数据库版本相同

  • 问题
    在这里插入图片描述
    修正
    在这里插入图片描述

五、小结

  1. mybatis-config.xml 为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息,例如数据库连接信息。
  2. 加载映射文件。该文件中配置了操作数据库的 SQL 语句,需要在MyBatis 配置文件 mybatis-config.xml 中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。
  3. 用jdbc是需要导入一个包,而sql语句则是直接在代码里构造,用mybatis则是需要加入依赖,且需要配置,数据库的变更比较频繁时或查询的需求变化时,mybatis的使用更有利于代码的维护。

六、 参考

IDEA2019开发Spring Boot整合Mybatis实现User的CRUD(增读更删)
MyBatis从前世到今生一网打尽(全网最全,建议收藏)
2020-10-10: 传统JDBC开发存在的问题?
Mybatis解决了JDBC编程哪些问题

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-15 11:51:47  更:2021-10-15 11:53:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:57:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码