御神楽的学习记录之从JDBC到Mybatis


前言

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

一、JDBC到Mybatis的改进

1.JDBC编程的步骤

1) 加载数据库驱动
2) 创建并获取数据库链接
3) 创建jdbc statement对象
4) 设置sql语句
5) 设置sql语句中的参数(使用preparedStatement)
6) 通过statement执行sql并获取结果
7) 对sql执行结果进行解析处理
8) 释放资源(resultSet、preparedstatement、connection)

2.Mybatis对JDBC的改进

1) 使用数据库连接池来解决资源浪费
JDBC方式的数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,而使用数据库连接池可以反复利用已经建立的连接去访问数据库了。减少连接的开启和关闭的时间。
2) 使用XML配置文件封装SQL语句
Mybatis将SQL语句写在配置文件中通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。这样当需要更改SQL时,只需要更改配置文件。(不影响接口的情况下)
3) 通过Mapped Statement对sql执行输出结果进行定义
Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
Mybatis架构
在这里插入图片描述

二、IDEA下的Mybatis使用

1.新建Spring-Mybatis项目

1) File–>New–>Project
在这里插入图片描述
2) 编辑项目信息
在这里插入图片描述
java版本选择version 8

3) 选择依赖Dependencies
首先选择Web,勾选Spring Web
在这里插入图片描述
然后点击SQL,勾选Spring Data JDBCMybatis Framework
在这里插入图片描述
选择完成后点击next
在这里插入图片描述
4) 设置项目名称和保存位置,点击Finish完成项目创建
在这里插入图片描述
5) 新建四个包分别为beancontrollermapperservice
在这里插入图片描述
**6)**在对应的包中创建类和接口如下所示:
在这里插入图片描述

2.配置代码

Account

package com.example.springboot.bean;

public class Account {
    String no;
    String name;
    String password;
    String root;

    public void setNo(String no) {
        this.no = no;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setRoot(String root) {
        this.root = root;
    }

    public String getRoot() {
        return root;
    }

    public String getPassword() {
        return password;
    }

    public String getName() {
        return name;
    }

    public String getNo() {
        return no;
    }

    @Override
    public String toString() {
        return "Account{" +
                "no='" + no + '\'' +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", root='" + root + '\'' +
                '}';
    }
}

DataBaseLink

package com.example.springboot.bean;

import java.sql.Connection;
import java.sql.DriverManager;

public class DataBaseLink {
    static public Connection getConn() {
        String serverName="com.mysql.jdbc.Driver";
        String dbURL="jdbc:mysql://localhost:3306/studentadmin";
        String userName="用户名";
        String userPwd="数据库连接密码";
        try {
            Class.forName(serverName);
            Connection tmp = DriverManager.getConnection(dbURL, userName, userPwd);
            System.out.println("成功连接数据库");
            return tmp;
        }
        catch(Exception e) {
            System.out.println("连接数据库失败");
            System.out.println(e);
        }
        return null;
    }
}

AccountController

package com.example.springboot.controller;

import com.example.springboot.bean.Account;
import com.example.springboot.bean.DataBaseLink;
import com.example.springboot.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
@RestController
public class AccountController {
    @Autowired
    private AccountService accountService;

    @ResponseBody
    @RequestMapping(value = "/get",method = RequestMethod.GET)
    public List<Account> get(){
        Connection conn= DataBaseLink.getConn();
        if(conn!=null){
            String sql="select name from account";
            try {
                PreparedStatement pst = conn.prepareStatement(sql);
                ResultSet results = pst.executeQuery();
                while (results.next()){
                    System.out.println(results.getString("name"));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return accountService.getAllAccounts();
    }

}

AccountMapper

package com.example.springboot.mapper;

import com.example.springboot.bean.Account;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface AccountMapper {
    List<Account> getAllAccounts();

}

AccountService

package com.example.springboot.service;

import com.example.springboot.bean.Account;
import com.example.springboot.mapper.AccountMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class AccountService {
    @Autowired
    AccountMapper accountMapper;
    public List<Account> getAllAccounts(){
        return accountMapper.getAllAccounts();
    }
}

另外需要在resources文件下新建文件mapper用于存放sql语句的xml文件
在这里插入图片描述
AccountMapper.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.example.springboot.mapper.AccountMapper">
    <select id="getAllAccounts" resultType="com.example.springboot.bean.Account">
      select * from user

    </select>

</mapper>

接着配置文件
在这里插入图片描述
输入

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/studentAdmin?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT&useSSL=false
spring.datasource.username=用户名
spring.datasource.password=数据库连接密码
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
mybatis.typeAliasesPackage=com.example.springboot.bean
mybatis.mapperLocations=classpath:mapper/*.xml
server.port=8080

3.测试

1) 目标数据库
在这里插入图片描述
2) 连接测试
后台:

关于ssl 服务错误
Establishing SSL connection without server’s identity verification is not recommended.
在连接数据库的地址中加入&ssl=false即可
ssl连接问题解决方式

在这里插入图片描述
浏览器输入http://localhost:8080/get
在这里插入图片描述
访问正常


总结

从JDBC到Mybatis,通过将代码中的SQL语句封装在外部的xml文件当中,简化了需要修改java源代码的麻烦步骤,并且更加高效的利用了数据库连接的资源。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息。

参考

https://blog.csdn.net/qq_47281915/article/details/120782706
https://blog.csdn.net/u010176014/article/details/52028854

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值