栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

从JDBC到Mybatis

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从JDBC到Mybatis

目录

一、由JDBC到Mybatis

1.什么是Mybatis

2.JDBC查询数据库数据步骤

3.JDBC演变为Mybatis

二、IDEA环境下Mybatis与JDBC进行改造示例对比

(一)JDBC操作数据库

1.Navicat数据表

2.IDEA创建项目

3.引入JDBC的jar包

 (二) MyBatis应用

      1.创建项目

 2.Mysql建表(Navicat)

 3.配置文件

4.测试结果

 5.完整功能


一、由JDBC到Mybatis

1.什么是Mybatis

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

2.JDBC查询数据库数据步骤

  加载JDBC驱动;

  建立并获取数据库连接;

  创建 JDBC Statements 对象;

  设置SQL语句的传入参数;

  执行SQL语句并获得查询结果;

  对查询结果进行转换处理并将处理结果返回;

  释放相关资源(关闭Connection,关闭Statement,关闭ResultSet);

3.JDBC演变为Mybatis

(1)问题:数据库连接频繁的开启和关闭,造成了资源的浪费以及影响系统的性能

解决问题:数据库连接的获取和关闭我们可以使用数据库连接池来解决资源浪费的问题。通过连接池就可以反复利用已经建立的连接去访问数据库了。减少连接的开启和关闭的时间。

(2)但是现在连接池多种多样,可能存在变化,有可能采用DBCP的连接池,也有可能采用容器本身的JNDI数据库连接池

解决问题:我们可以通过DataSource进行隔离解耦,我们统一从DataSource里面获取数据库连接,DataSource具体由DBCP实现还是由容器的JNDI实现都可以,所以我们将DataSource的具体实现通过让用户配置来应对变化。

(3)我们使用JDBC进行操作数据库时,SQL语句基本都散落在各个JAVA类中,这样有三个不足之处:

第一,可读性很差,不利于维护以及做性能调优。

第二,改动Java代码需要重新编译、打包部署。

第三,不利于取出SQL在数据库客户端执行(取出后还得删掉中间的Java代码,编写好的SQL语句写好后还得通过+号在Java进行拼凑)。

解决问题:我们可以考虑不把SQL语句写到Java代码中,那么把SQL语句放到哪里呢?首先需要有一个统一存放的地方,我们可以将这些SQL语句统一集中放到配置文件或者数据库里面(以key-value的格式存放)。然后通过SQL语句的key值去获取对应的SQL语句。

(4)执行SQL语句、获取执行结果、对执行结果进行转换处理、释放相关资源是一整套下来的。假如是执行查询语句,那么执行SQL语句后,返回的是一个ResultSet结果集,这个时候我们就需要将ResultSet对象的数据取出来,不然等到释放资源时就取不到这些结果信息了。我们从前面的优化来看,以及将获取连接、设置传入参数、执行SQL语句、释放资源这些都封装起来了,只剩下结果处理这块还没有进行封装,如果能封装起来,每个数据库操作都不用自己写那么一大堆Java代码,直接调用一个封装的方法就可以搞定了。

解决问题:我们分析一下,一般对执行结果的有哪些处理,有可能将结果不做任何处理就直接返回,也有可能将结果转换成一个JavaBean对象返回、一个Map返回、一个List返回等`,结果处理可能是多种多样的。从这里看,我们必须告诉SQL处理器两点:第一,需要返回什么类型的对象;第二,需要返回的对象的数据结构怎么跟执行的结果映射,这样才能将具体的值copy到对应的数据结构上。

(5)由于我们将所有SQL语句都放到配置文件中,这个时候会遇到一个SQL重复的问题,几个功能的SQL语句其实都差不多,有些可能是SELECt后面那段不同、有些可能是WHERe语句不同。有时候表结构改了,那么我们就需要改多个地方,不利于维护。

解决问题:当我们的代码程序出现重复代码时怎么办?将重复的代码抽离出来成为独立的一个类,然后在各个需要使用的地方进行引用。对于SQL重复的问题,我们也可以采用这种方式,通过将SQL片段模块化,将重复的SQL片段独立成一个SQL块,然后在各个SQL语句引用重复的SQL块,这样需要修改时只需要修改一处即可。

二、IDEA环境下Mybatis与JDBC进行改造示例对比

(一)JDBC操作数据库

1.Navicat数据表

打开navicat,选择数据库T1,新建查询

 新建一个user表然后输入代码并运行

 user

create table user(
	id int primary key auto_increment,
	name varchar(50),
	password varchar(50),
	email varchar(60),
	birthday date
)character set utf8 collate utf8_general_ci;

 插入数据,并运行

 

代码

insert into user(name,password,email,birthday) values('zs','123456','zs@sina.com','1999-12-04');
insert into user(name,password,email,birthday) values('lisi','123456','lisi@sina.com','2001-12-04');
insert into user(name,password,email,birthday) values('wangwu','123456','wangwu@sina.com','2003-12-04');

2.IDEA创建项目

1.打开IDEA,File->New->Project         

 2.选择java,然后next->next

 3.命名项目,然后点击finish

 4.新建包右击scr->new->java class

 

 Date

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

public class Date{
    static final String driverName="org.gjt.mm.mysql.Driver";
    static final String dbUrl="jdbc:mysql://localhost:3306/t";
    static final String userName="root";
    static final String password="123456";
    public static void main(String[] args) {
        // TODO Auto-generated method stubt
       

        Connection conn = null;
        Statement stmt = null;
        try{
            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, password, email FROM user";
            ResultSet rs = stmt.executeQuery(sql);

            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                int id  = rs.getInt("id");
                String name = rs.getString("name");
                String password = rs.getString("password");
                String email = rs.getString("email");
                // 输出数据
                System.out.print("ID: " + id);
                System.out.print(", 姓名: " + name);
                System.out.print(", 密码: " +password);
                System.out.print(", 邮箱: " +email);
                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!");
    }
}



3.引入JDBC的jar包

1.file->project structure

 2.Moudles->Dependencies->+->jars or directories

 3.导入jar包

 

 4.应用成功

 

 5.运行

 6.运行结果

 

 (二) MyBatis应用

      1.创建项目

 (1)用IDEA新建项目,new-peoject->spring initializr->next

 (2)Java Version ,点击next

 (3)选择web->Sring Web->next,SQL->JDBC API,mybatis framework,mysql driver

 

 2.Mysql建表(Navicat)

1.创建学生students,插入信息

create table students(
	no int primary key auto_increment,
	name varchar(50),
	age int 
)character set utf8 collate utf8_general_ci;
insert into students(no,name,age) values('1','张三','20');
insert into students(no,name,age) values('2','李四','26');
insert into students(no,name,age) values('3','王五','29');
insert into students(no,name,age) values('4','张二','44');
insert into students(no,name,age) values('5','小小','64');

 3.配置文件

1.application.properties代码

server.port=8080
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/t?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
mybatis.mapper-locations=classpath:mapper/*Mapper.xml

 2.(1)项目src->main->java->com  下分别创建包:controller、entity、mapper、service,用来实现控制层、实体层、映射层、业务层

(2)src->main->resources  下创建mapper包用于存放*Mapper.xml文件:

(3)创建entity实体类Students

 

 Students

package com.example.demo.entity;

public class Students {
    private int no;
    private String name;
    private int age;

    public int getNo() {
        return no;
    }

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

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

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
    @Override
    public String toString() {
        return "Student{" +
                "no=" + no +
                ", name='" + name + ''' +
                ", age='" + age + ''' +
                '}';
    }

}

(4)创建Mapper映射操作StudentsMapper类:

 

package com.example.demo.mapper;

import com.example.demo.entity.Students;
import com.example.demo.entity.Students;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface StudentsMapper {
    public List findAllStudent();

    List findStudentByno(int no);
}

(5)创建Mapper映射对应的StudentsMapper.xml文件:

 




    
        
        
        
    

    
        select  * from students;
    

    
        select  * from students;
    

    
        select * from students where name=#{name};
    

    
        insert into students(name,age) values (#{name},#{age});
    

    
        update students set name=#{name},age=#{age} where no=#{no};
    

    
        delete from  where no=#{no};
    

查找:http://://localhost:8080/Student/getStudentByname/张二

插入一条信息:http://localhost:8080/Student/insertStudent?name=明明&age=123

 插入成功

 

 总结:JDBC的全称是Java数据库连接(Java Database connect),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作;MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。

参考文献:(8条消息) JDBC演变到Mybatis过程_luzhensmart的专栏-CSDN博客

MyBatis-从JDBC到Spring整合MyBatis_zgliulin-CSDN博客

IDEA数据库连接:从JDBC到Mybatis_WOOZI9600L²的博客-CSDN博客

(8条消息) IDEA实训——从JDBC到Mybatis_一只特立独行的猪 ️的博客-CSDN博客

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/343176.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号