文章目录
一、介绍
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