初学MyBtis框架

目录

一、MyBatis 介绍

二、MyBtis特点

三、MyBtis框架原理

 四、初步了解为什么要抛弃JDBC这样传统的数据库访问模式,进化到数据持久层框架Mybatis(也包括Hibernate)

五、Mybatis如何对JDBC进行改造

1.新建工程

 2.配置项目相关信息

3.修改配置文件

4.项目编写及业务流程

5.测试

六、总结


一、MyBatis 介绍

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO 映射成数据库中的记录。
 

二、MyBtis特点

简单易学,没有任何第三方依赖,最简单安装+配置几个 SQL 映射文件即可进行开发。
易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。官方文档提供中文翻译。
灵活,MyBatis 不会对应用程序或者数据库的现有设计强加任何影响。
解除 SQL 与程序代码的耦合,SQL 和代码的分离,提高了可维护性。
提供映射标签,支持对象与数据库的 orm 字段关系映射。
提供对象关系映射标签,支持对象关系组建维护。
提供 XML 标签,支持编写动态 SQL。
 

三、MyBtis框架原理

 四、初步了解为什么要抛弃JDBC这样传统的数据库访问模式,进化到数据持久层框架Mybatis(也包括Hibernate)

1.传统的 JDBC 开发流程 

在传统的 JDBC 开发项目的过程中,SQL 语句夹杂在代码块里,导致代码之间的耦合度高,硬编码现象普遍存在。这样就导致后期代码不易维护。

2.Hibernate 开发流程 

Hibernate 意在消除 SQL,所以在使用 Hibernate 的时候所有的执行流程都由框架处理,包括 SQL 语句的编写,这些操作对用户都是不可见的。这样做是很方便,简化了程序人员的开发,但是由于 SQL 语句由框架生成,这样就导致很难对 SQL 语句进行优化,造成数据库的性能下降,并且对于非常复杂的 SQL 语句,Hibernate 处理起来也不太容易。

当然 Hibernate 也提供了 HQL 技术,把编写 SQL 语句的任务交给程序开发人员,这样就导致学习成本变高。

2.MyBatis 开发流程 

MyBatis 把编写 SQL 的任务单独提取出来交由程序人员实现,从而使 SQL 与 Java 代码分开,不仅降低了代码之间的耦合,并且在进行 SQL 优化的时候也很容易。所以说 MyBatis 功能边界划分的很清晰,这也是为什么它那么受欢迎的原因
 

五、Mybatis如何对JDBC进行改造

1.新建工程

 

 

 

 

 2.配置项目相关信息

 在pom.xml文件中 已经自动添加到我们的文件中了。下面为本项目的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.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mybatis</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>

3.修改配置文件

  application.properties文件为默认项目配置文件,默认为空的,我们可以在配置文件中配置端口、名字等一般属性,也可以配置自定义属性、参数引用、多环境配置等,可以在文件中添加端口、数据源、mydatis等相关数据,下面为文件内容。

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

 

4.项目编写及业务流程

User数据库的定义

创建User实体类实现业务流程

    一、创建项目路径包来,展示业务流程。在项目src-main-java-com-sjzeis下分别创建包:controller、entity、mapper、service,用来实现控制层、实体层、映射层、业务层。这里面简单介绍一下业务流程及各层业务的作用如下:

    1. entity实体层(别名: model层 ,domain层),用于存放我们的实体类,与数据库中的属性值基本保持一致,实现set和get的方法。如:user表的实体User。

    2. mapper映射层(别名:dao层),用于对数据库进行数据持久化操作,他的方法语句是直接针对数据库操作的,主要实现一些增删改查操作,在mybatis中方法主要与*Mapper.xml内相互一一映射。如:public interface UserMapper {...}。

    3. service业务层,用于给controller层的类提供接口进行调用。一般就是自己写的方法封装起来,就是声明一下,存放业务逻辑处理,也是一些关于数据库处理的操作,但不是直接和数据库打交道,他有接口还有接口的实现方法,在接口的实现方法中需要导入mapper层,mapper层是直接跟数据库打交道的,他也是个接口,只有方法名字,具体实现在mapper.xml文件里,service是供我们使用的方法。如:public class UserService {...}。

    4. controller控制层(别名:web 层),用于负责具体模块的业务流程控制,需要调用service逻辑设计层的接口来控制业务流程。因为service中的方法是我们使用到的,controller控制器导入service层,因为service中的方法是我们使用到的,controller通过接收前端传过来的参数进行业务操作,在返回一个指定的路径或者数据表。如:public class UserController {...}。
 

 

创建entity实体类User
 package com.sjzeis.entity;
 
public class User {
    private int userid;
    private String username;
    private String password;
 
    public int getUserid() {
        return userid;
    }
 
    public void setUserid(int userid) {
        this.userid = userid;
    }
 
    public String getUsername() {
        return username;
    }
 
    public void setUsername(String username) {
        this.username = username;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    @Override
    public String toString() {
        return "User{" +
                "userid=" + userid +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
创建Mapper映射操作UserMapper类
 package com.sjzeis.mapper;
 
import com.sjzeis.entity.User;
import org.apache.ibatis.annotations.Mapper;
 
import java.util.List;
 
@Mapper
public interface UserMapper {
    public List<User> findAllUser();
    public List<User> findUserByUserId(int userid);
}
创建Mapper映射对应的UserMapper.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.sjzeis.mapper.UserMapper">
    <resultMap id="result" type="com.sjzeis.entity.User">
        <result column="userid" jdbcType="INTEGER" property="userid" />
        <result column="username" jdbcType="VARCHAR" property="username" />
        <result column="password" jdbcType="VARCHAR" property="password" />
    </resultMap>
 
    <select id="findAllUser" resultType="com.sjzeis.entity.User">
        select  * from users;
    </select>
 
    <select id="findUserByUserId" resultType="com.sjzeis.entity.User">
        select * from users where userid=#{userid};
    </select>
</mapper>
注意该文件放在resources目录下的mapper包中,具体包名位置(namespace)要和上边的映射UserMapper类对应 。

创建service业务UserService类
 package com.sjzeis.service;
 
import com.sjzeis.entity.User;
import com.sjzeis.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.List;
 
@Service
public class UserService {
    @Autowired(required=false)
    public UserMapper userMapper;
 
    public List<User> findAllUser(){
        return userMapper.findAllUser();
    }
 
    public List<User> findUserByUserId(int userid){
        return userMapper.findUserByUserId(userid);
    }
}


创建 controller控制层UserController类

 package com.sjzeis.controller;
 
import com.sjzeis.entity.User;
import com.sjzeis.service.UserService;
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("/user")
public class UserController {
    @Autowired
    private UserService userService;
 
    @RequestMapping("/getAllUser")
    public List<User> findAll(){
        return userService.findAllUser();
    }
 
    @RequestMapping("/getUserByUserID/{userid}")
    public List<User> findUserByUserId(@PathVariable int userid){
        return userService.findUserByUserId(userid);
    }
}
 

整体结构

 

5.测试

 成功!

六、总结

通过本次对MyBtis的学习,MyBatis 把编写 SQL 的任务单独提取出来交由程序人员实现,从而使 SQL 与 Java 代码分开,不仅降低了代码之间的耦合,并且在进行 SQL 优化的时候也很容易。所以说 MyBatis 功能边界划分的很清晰,这也是为什么它那么受欢迎的原因!

参考:IDEA2019开发Spring Boot整合Mybatis实现User的CRUD(增读更删)_糖果π-CSDN博客

参考:MyBtis快速入门_点滴记录-CSDN博客_mybtis

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值