Java数据库操作——从JDBC到Mybatis

本文详细介绍了JDBC访问数据库的步骤及其存在的问题,如资源浪费和SQL硬编码。为了解决这些问题,引入了MyBatis,概述了MyBatis的主要特性,包括SQL与代码分离、参数映射和结果集映射等。进一步,文章展示了如何在IDEA中使用Spring集成MyBatis,包括项目初始化、配置、Mapper接口、Service和Controller的创建。总结部分强调了MyBatis在数据库变更频繁时的优势,便于代码维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、JDBC访问数据库

  • Java连接数据库之前已经说过,通过JDBC查询数据库数据,一般需要以下七个步骤:
    (1) 加载JDBC驱动
    (2) 建立并获取数据库连接
    (3) 创建 JDBC Statements 对象
    (4) 设置SQL语句的传入参数
    (5) 执行SQL语句并获得查询结果
    (6) 对查询结果进行转换处理并将处理结果返回
    (7) 释放相关资源(关闭Connection,关闭Statement,关闭ResultSet)

  • 存在的问题

1.数据库连接频繁的开启和关闭本身就造成了资源的浪费,影响系统的性能。
2.Sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

  • 解决方法

1.数据库连接的获取和关闭我们可以使用数据库连接池来解决资源浪费的问题。通过连接池就可以反复利用已经建立的连接去访问数据库了。减少连接的开启和关闭的时间
2.我们可以考虑不把SQL语句写到Java代码中,而是将这些SQL语句统一集中放到配置文件或者数据库里面(以key-value的格式存放)。然后
通过SQL语句的key值去获取对应的SQL语句。

二、mybatis连接数据库

1. mybatis特性:

(1) 使用连接池对连接进行管理
(2) SQL和代码分离,集中管理(mapper.xml)
(3) 参数映射和动态SQL
(4) 结果集映射
(5) 缓存管理
(6) 重复SQL提取
(7) 插件机制

2. MyBatis工作原理

(1) 读取 MyBatis 配置文件:mybatis-config.xml 为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息,例如数据库连接信息。
(2) 加载映射文件。映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在MyBatis 配置文件 mybatis-config.xml 中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。
(3) 构造会话工厂:通过 MyBatis 的环境等配置信息构建会话工厂 SqlSessionFactory。
(4) 创建会话对象:由会话工厂创建 SqlSession 对象,该对象中包含了执行 SQL 语句的所有方法。
(5) Executor 执行器:MyBatis 底层定义了一个 Executor 接口来操作数据库,它将根据 SqlSession传递的参数动态地生成需要执行的 SQL 语句,同时负责查询缓存的维护。
(6) MappedStatement 对象:在 Executor 接口的执行方法中有一个MappedStatement 类型的参数,该参数是对映射信息的封装,用于存储要映射的 SQL 语句的 id、参数等信息。
(7)输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。输入参数映射过程类似于 JDBC 对 preparedStatement 对象设置参数的过程。
(8) 输出结果映射:输出结果类型可以是 Map、 List 等集合类型,也可以是基本数据类型和 POJO 类型。输出结果映射过程类似于 JDBC 对结果集的解析过程。
在这里插入图片描述

3. Spring 集成Mybatis(IDEA)

  • 新建项目,选择spring initializr,initializr service URL使用default就行
    在这里插入图片描述
  • 项目元数据界面的选择,其实选择默认的,不过我Java Version改为了8,Artifa 改为了mybatis_demo,注意项目名不能大小写混杂,然后点next就行了
    在这里插入图片描述
  • 选择依赖,web里面要把spring web选上,然后在SQL里面把Mybatis Framework、MySQL Driver、JDBC API选上,最后可以在旁边的selected Dependence里查看自己选择的项,点击next之后点击finish就完成项目建立了。
    在这里插入图片描述
  • 打开查看pom.xml文件,可以看到刚刚我们选择的依赖已经自动添加到我们的文件中了
    在这里插入图片描述
  • 修改application.properties文件,application.properties是项目自带的配置文件,也可以建立其他的配置文件,可以在文中添加端口、数据源、mydatis等相关数据
  • 建立项目文件User.Java
    在这里插入图片描述
package com.example.mybatis_demo.user;

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.example.mybatis_demo.mapper;

import com.example.mybatis_demo.user.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.example.mybatis_demo.service;

import com.example.mybatis_demo.mapper.UserMapper;
import com.example.mybatis_demo.user.User;
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);
    }
}
  • 新建UserController.Java
    在这里插入图片描述
package com.example.mybatis_demo.controller;

import com.example.mybatis_demo.service.UserService;
import com.example.mybatis_demo.user.User;
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);
    }
}
  • 建立mapper文件,在里面建立UserMapper.xml,这个xml文件就是映射文件,sql语句就是在这里面写的,注意具体包名位置(namespace)与刚刚建立的usemapper类要对应。
    在这里插入图片描述
<?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.example.mybatis_demo.mapper.UserMapper">
    <resultMap id="result" type="com.example.mybatis_demo.user.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.example.mybatis_demo.user.User">
        select  * from user;
    </select>

    <select id="findUserByUserId" resultType="com.example.mybatis_demo.user.User">
        select * from user where userid=#{userid};
    </select>
</mapper>
  • MySQL方面,首先是创建表格,结构如下,表名为user
    在这里插入图片描述
  • 在浏览器中输入http://localhost:8080/user/getAllUser就可以看到查询结果,查询的语句是在映射文件里的,而路径由来是UserController.Java里确定的,查询结果如下图。
    在这里插入图片描述

三、总结

在IDEA里用jdbc和用mybatis连接区别还是蛮大的:用jdbc是需要导入一个包,而sql语句则是直接在代码里构造;而用mybatis则是需要加入依赖,且需要配置,但sql语句与代码是分开的,直接在映射文件里更改sql就行了。当数据库的变更比较频繁时或查询的需求变化时,mybatis的使用更有利于代码的维护。


参考文献
从JDBC到Mybatis的改进
MyBatis-从JDBC到Spring整合MyBatis
IDEA使用mybatis连接MySQL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值