我们都是小白之Spring学习(五)

前言

本文将简单介绍什么是Mybaties和如何操作其与数据库取得联系

一、关于Mybaties

1.什么是Mybaties

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

2.Mybaties与JDBC的区别

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。MyBatis是对JDBC的封装。

3.MyBatis的优点

  1. 优化获取和释放

我们一般在访问数据库时都是通过数据库连接池来操作数据库,数据库连接池有好几种,比如C3P0、DBCP,也可能采用容器本身的JNDI数据库连接池。我们可以通过DataSource进行隔离解耦,我们统一从DataSource里面获取数据库连接,DataSource具体由DBCP实现还是由容器的JNDI实现都可以,所以我们将DataSource的具体实现通过让用户配置来应对变化。

  1. SQL统一管理,对数据库进行存取操作

我们使用JDBC对数据库进行操作时,SQL查询语句分布在各个Java类中,这样可读性差,不利于维护,当我们修改Java类中的SQL语句时要重新进行编译。

Mybatis可以把SQL语句放在配置文件中统一进行管理,以后修改配置文件,也不需要重新就行编译部署。

  1. 生成动态SQL语句

我们在查询中可能需要根据一些属性进行组合查询,比如我们进行商品查询,我们可以根据商品名称进行查询,也可以根据发货地进行查询,或者两者组合查询。如果使用JDBC进行查询,这样就需要写多条SQL语句。

  1. 能够对结果集进行映射

我们在使用JDBC进行查询时,返回一个结果集ResultSet,我们要从结果集中取出结果封装为需要的类型

在Mybatis中我们可以设置将结果直接映射为自己需要的类型,比如:JavaBean对象、一个Map、一个List等等。

二、操作Mybaties

1.使用JDBC

此处我们继续使用上次所创建的数据库和项目

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class test {
    static final String driverName="com.mysql.cj.jdbc.Driver";
    static final String dbUrl="jdbc:mysql://localhost:3306/test";
    static final String userName="root";
    static final String password="jmfl.13320324195";
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL

        Connection conn = null;
        Statement stmt = null;
        try{
            // 注册 JDBC 驱动
            Class.forName(driverName);

            // 打开链接
            System.out.println("连接数据库...");
            conn = DriverManager.getConnection(dbUrl,userName,password);

            // 执行查询
            System.out.println(" 实例化Statement对象...");
            stmt = (Statement) conn.createStatement();
            String sql;
            sql = "SELECT id, name, url FROM websites";
            ResultSet rs = stmt.executeQuery(sql);

            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                int id  = rs.getInt("id");
                String name = rs.getString("name");
                String url = rs.getString("url");

                // 输出数据
                System.out.print("ID: " + id);
                System.out.print(", 站点名称: " + name);
                System.out.print(", 站点 URL: " + url);
                System.out.print("\n");
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }catch(Exception e){
            // 处理 Class.forName 错误
            e.printStackTrace();
        }finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException se2){
            }// 什么都不做
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
        System.out.println("Goodbye!");
    }
}

在这里插入图片描述

2.使用Mybaties

  1. 创建Mybaties项目
    (1)
    在这里插入图片描述
    (2)
    在这里插入图片描述
    (3)
    在这里插入图片描述
    在这里插入图片描述

3.文件配置

  1. 添加包。在pom.xml中
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>databasedemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>databasedemo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  1. 数据库连接配置。在application.properties中
    在这里插入图片描述
server.port=8080
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=xxxxxxxxxxxxx
mybatis.mapper-locations=classpath:mapper/*Mapper.xml

4.代码书写

  1. 先在与启动类同一层中创建包controller、entity、mapper、service,用来实现控制层、实体层、映射层、业务层
    在这里插入图片描述
  2. 在资源文件下创建mapper文件夹
    在这里插入图片描述
  3. 在entity创建实体类Web
package com.example.mysql_to_mybaties.entity;

public class Web {
    private int id;
    private String name;
    private String url;
    private  int alexa;
    private String  country;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public void setUrl(String url) {
        this.url = url;
    }

    public int getAlexa() {
        return alexa;
    }

    public void setAlexa(int alexa) {
        this.alexa = alexa;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getUrl() {
        return url;
    }
    @Override
    public String toString() {
        return "websites{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", url='" + url + '\'' +
                '}';
    }

}

  1. 在Mapper包下创建映射操作WebMapper接口
package com.example.mysql_to_mybaties.mapper;
import com.example.mysql_to_mybaties.entity.Web;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface WebMapper {
    public List<Web> findAllWeb();

     List<Web> findWebByid(int id);
}

  1. 在resource文件夹下如下路径的文件夹,并创建映射操作WebMapper.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.mysql_to_mybaties.mapper.WebMapper">
    <resultMap id="result" type="com.example.mysql_to_mybaties.entity.Web">
        <result column="id" jdbcType="INTEGER" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="url" jdbcType="VARCHAR" property="url" />
    </resultMap>

    <select id="findAllWeb" resultType="com.example.mysql_to_mybaties.entity.Web">
        select  * from websites;
    </select>

        <select id="findWebByid" resultType="com.example.mysql_to_mybaties.entity.Web">
        select * from websites where id=#{id};
    </select>
</mapper>
  1. 在service创建业务WebService类
package com.example.mysql_to_mybaties.service;
import com.example.mysql_to_mybaties.entity.Web;
import com.example.mysql_to_mybaties.mapper.WebMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class WebService {

    @Autowired(required = false)
    public WebMapper webMapper;
    public List<Web> findAllStudent() {
        return webMapper.findAllWeb();
    }
    public List<Web> findWebByid(int id) {
        return webMapper.findWebByid(id);
    }

}

7.在 controller控制层创建WebController类

package com.example.mysql_to_mybaties.controller;

import com.example.mysql_to_mybaties.entity.Web;
import com.example.mysql_to_mybaties.service.WebService;
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("/Web")
class WebController {
    @Autowired
    private WebService webService;

    @RequestMapping("/getAllWeb")
    public List<Web> findAll(){
        return webService.findAllWeb();
    }
    @RequestMapping("/getWebByid/{id}")
    public List<Web> findUserByWebId(@PathVariable int id){
        return webService.findWebByid(id);
    }
}

5.运行结果

在网址输入http://localhost:8080/Web/getAllWeb/
在这里插入图片描述
在网址输入http://localhost:8080/Web/getWebByid/2/
在这里插入图片描述

代码网址–GitHub

https://github.com/J-JMF/mysql_to_mybaties

参考文章

https://blog.csdn.net/weixin_56102526/article/details/120825699?spm=1001.2014.3001.5501

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值