从JDBC到Mybatis

文章目录

一、介绍

mybatis是什么?有什么特点?

它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低

什么是ORM?

Object Relation Mapping,对象关系映射。对象指的是Java对象,关系指的是数据库中的关系模型,对象关系映射,指的就是在Java对象和数据库的关系模型之间建立一种对应关系,比如用一个Java的Student类,去对应数据库中的一张student表,类中的属性和表中的列一一对应。Student类就对应student表,一个Student对象就对应student表中的一行数据

为什么mybatis是半自动的ORM框架?

用mybatis进行开发,需要手动编写SQL语句。而全自动的ORM框架,如hibernate,则不需要编写SQL语句。用hibernate开发,只需要定义好ORM映射关系,就可以直接进行CRUD操作了。由于mybatis需要手写SQL语句,所以它有较高的灵活性,可以根据需要,*地对SQL进行定制,也因为要手写SQL,当要切换数据库时,SQL语句可能就要重写,因为不同的数据库有不同的方言(Dialect),所以mybatis的数据库无关性低。虽然mybatis需要手写SQL,但相比JDBC,它提供了输入映射和输出映射,可以很方便地进行SQL参数设置,以及结果集封装。并且还提供了关联查询和动态SQL等功能,极大地提升了开发的效率。并且它的学习成本也比hibernate低很多

二、MyBatis项目实例

(1)创建项目

File->New Project->Spring Initializr->next
Java Version选择8
从JDBC到Mybatis
选择项目所需要的依赖,这个页面是选择你工程中需要用到的依赖,因为我们的目标是web项目使用MyBatis所以在web模块中勾选Spring Web.
从JDBC到Mybatis
在SQL中勾选Jdbc API、Mybatis Framework、Mysql Driver。
从JDBC到Mybatis
点击Next,等待加载完成。
从JDBC到Mybatis

(2)配置文件

在application.properties中加入如下代码:

server.port=8080
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
#3306端口号后为数据库名
spring.datasource.username=root  //账户
spring.datasource.password=123456  //密码
mybatis.mapper-locations=classpath:mapper/*Mapper.xml


(3)创建数据库

1、创建tb1_dept表

CREATE TABLE `tbl_emp` (
  `emp_id` int(16) NOT NULL AUTO_INCREMENT,
  `emp_name` varchar(64) DEFAULT NULL,
  `gender` varchar(1) DEFAULT NULL,
  `email` varchar(128) DEFAULT NULL,
  `d_id` int(16) DEFAULT NULL,
  PRIMARY KEY (`emp_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;;
INSERT INTO `tbl_emp` (`emp_id`, `emp_name`, `gender`, `email`, `d_id`) VALUES (1, '王路', 'M', 'a@b.com', 2);
INSERT INTO `tbl_emp` (`emp_id`, `emp_name`, `gender`, `email`, `d_id`) VALUES (2, '李心', 'F', 'a@b.com', 2);
INSERT INTO `tbl_emp` (`emp_id`, `emp_name`, `gender`, `email`, `d_id`) VALUES (3, '杨杰', 'F', 'a@b.com', 1);
INSERT INTO `tbl_emp` (`emp_id`, `emp_name`, `gender`, `email`, `d_id`) VALUES (4, '候诚', 'F', 'a@b.com', 2);
INSERT INTO `tbl_emp` (`emp_id`, `emp_name`, `gender`, `email`, `d_id`) VALUES (5, '张严', 'M', 'a@b.com', 1);
INSERT INTO `tbl_emp` (`emp_id`, `emp_name`, `gender`, `email`, `d_id`) VALUES (6, '何宽', 'F', 'a@b.com', 2);
INSERT INTO `tbl_emp` (`emp_id`, `emp_name`, `gender`, `email`, `d_id`) VALUES (7, '李微', 'M', 'a@b.com', 1);
INSERT INTO `tbl_emp` (`emp_id`, `emp_name`, `gender`, `email`, `d_id`) VALUES (8, '刘虹', 'M', 'a@b.com', 1);
INSERT INTO `tbl_emp` (`emp_id`, `emp_name`, `gender`, `email`, `d_id`) VALUES (9, '黄羽', 'F', 'a@b.com', 2);
INSERT INTO `tbl_emp` (`emp_id`, `emp_name`, `gender`, `email`, `d_id`) VALUES (10, '吴莉', 'F', 'a@b.com', 3);
INSERT INTO `tbl_emp` (`emp_id`, `emp_name`, `gender`, `email`, `d_id`) VALUES (11, '阿里', 'M', 'a@b.com', 3);

从JDBC到Mybatis

2.创建实体类实现业务流程

1.创建entity实体层:用于存放实体类,与数据库中属性值基本保持一致,实现set和get的方法。
从JDBC到Mybatis
2、创建Website类:

package com.example.mybatistest1.entity;

public class Website {
    private int emp_id;
    private String emp_name;
    private String gender;
    private int email;
    private String d_id;

    public int getEmp_id(){
        return emp_id;
    }
    public void setEmp_id(){
        this.emp_id = emp_id;
    }
    public String  getEmp_name(){
        return emp_name;
    }
    public void setEmp_name(){
        this.emp_name = emp_name;
    }
    public String getGender(){
        return gender;
    }
    public void setGender(){
        this.gender = gender;
    }
    public int getEmail(){
        return email;
    }
    public void setEmail(){
        this.email =email;
    }
    public String getD_id(){
        return d_id;
    }
    public void setD_id(){
        this.d_id= d_id;
    }
    @Override
    public String toString() {
        return "WebSite{" +
                "name=" + emp_id +
                ", url='" + gender + '\'' +
                ", Alexa='" + email + '\'' +
                ",country=" + d_id + '\'' +
                '}';
    }
}

2.创建mapper映射层:用于对数据库进行数据持久化操作,他的方法语句是直接针对数据库操作的,主要实现一些增删改查操作,在mybatis中方法主要与*Mapper.xml内相互一一映射。
从JDBC到Mybatis
WebsiteMapper接口:

package com.example.mybatistest1.mapper;

import com.example.mybatistest1.entity.Website;

import java.util.List;

public interface WebsiteMapper {
    public List<Website> findAllWebsite();
    public List<Website> findWebsiteById(int id);
}

3.创建Mapper映射对应的WebsiteMapper.xml文件
从JDBC到Mybatis
注意该文件放在resources目录下的mapper包中,具体包名位置namespace要和上边的映射类对应。
WebsiteMapper.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.mybatis_test.mapper.WebsiteMapper">
    <resultMap id="result" type="com.example.mybatis_test.entity.Website">
        <result column="id" jdbcType="INTEGER" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="url" jdbcType="VARCHAR" property="url" />
        <result column="alexa" jdbcType="INTEGER" property="alexa" />
        <result column="country" jdbcType="VARCHAR" property="country" />
    </resultMap>

    <select id="findAllWebsite" resultType="com.example.mybatis_test.entity.Website">
        select  * from websites;
    </select>

    <select id="findWebsiteById" resultType="com.example.mybatis_test.entity.Website">
        select * from websites where id=#{id};
    </select>
</mapper>

4.创建service业务层:用于给controller层的类提供接口进行调用。
从JDBC到Mybatis
WebsiteService:

package com.example.mybatistest1.service;
import com.example.mybatistest1.entity.Website;
import com.example.mybatistest1.mapper.WebsiteMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class WebsiteService {
    @Autowired(required=false)
    public WebsiteMapper websiteMapper;

    public List<Website> findAllWebsite(){
        return websiteMapper.findAllWebsite();
    }
    public List<Website> findWebsiteById(int emp_id){
        return websiteMapper.findWebsiteById(emp_id);
    }
}

5.创建controller控制层:用于负责具体模块的业务流程控制,需要调用service逻辑设计层的接口来控制业务流程。
从JDBC到Mybatis

三、运行测试

通过点击IDEA右上角的启动按钮来启动项目
从JDBC到Mybatis
在浏览器输入:http://localhost:8080/website/getAllWebsite,显示如下
从JDBC到Mybatis
在网址栏输入:http://localhost:8080/website//getWebsiteById/1,显示如下
从JDBC到Mybatis

四、总结

MyBtis内部封装了JDBC,连接数据库时不用自己去加载驱动,创建连接等,只需要写sql语句就行,用起来很方便。

五、参考链接

https://blog.csdn.net/mahaokun/article/details/103221874/%E2%80%9D%EF%BC%9B%E6%95%B0%E6%8D%AE%E6%BA%90%E5%8F%AF%E4%BB%A5%E7%81%B5%E6%B4%BB%E6%94%B9%E7%94%A8%E8%87%AA%E5%B7%B1%E6%97%A2%E6%9C%89%E7%9A%84mysql%E8%A1%A8%E3%80%82
https://mooc1.chaoxing.com/ueditorupload/read?objectId=2a3aaf533699a406f0a1302068cfa466&fileOriName=%E4%BB%8EJDBC%E5%88%B0Mybatis%E4%BB%8B%E7%BB%8D-.pdf
https://mooc1.chaoxing.com/ueditorupload/read?objectId=817e6e5a13a3238c78dbc9a56038471b&fileOriName=MyBatis-%E4%BB%8EJDBC%E5%88%B0Spring%E6%95%B4%E5%90%88MyBatis.pdf

上一篇:多表查询练习


下一篇:2021/10/23 北京 mysql索引和视图