ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

从JDBC到Mybatis

2021-10-22 21:34:58  阅读:150  来源: 互联网

标签:JDBC name gender public emp Mybatis com id


文章目录

一、介绍

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
在这里插入图片描述
选择项目所需要的依赖,这个页面是选择你工程中需要用到的依赖,因为我们的目标是web项目使用MyBatis所以在web模块中勾选Spring Web.
在这里插入图片描述
在SQL中勾选Jdbc API、Mybatis Framework、Mysql Driver。
在这里插入图片描述
点击Next,等待加载完成。
在这里插入图片描述

(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);

在这里插入图片描述

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

1.创建entity实体层:用于存放实体类,与数据库中属性值基本保持一致,实现set和get的方法。
在这里插入图片描述
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内相互一一映射。
在这里插入图片描述
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文件
在这里插入图片描述
注意该文件放在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层的类提供接口进行调用。
在这里插入图片描述
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逻辑设计层的接口来控制业务流程。
在这里插入图片描述

三、运行测试

通过点击IDEA右上角的启动按钮来启动项目
在这里插入图片描述
在浏览器输入:http://localhost:8080/website/getAllWebsite,显示如下
在这里插入图片描述
在网址栏输入:http://localhost:8080/website//getWebsiteById/1,显示如下
在这里插入图片描述

四、总结

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

标签:JDBC,name,gender,public,emp,Mybatis,com,id
来源: https://blog.csdn.net/weixin_46075647/article/details/120910935

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有