Java第三十六天,Mybatis框架系列,何为Mybatis?

一、什么是框架?

框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法。另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义

简而言之,框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。

框架是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。今天我们学的Mybatis框架是用来解决持久层的问题,简单来说就是数据库的问题

二、三层架构

表现层

用于展示数据

业务层

用于处理业务数据

持久层

用于存储数据(典型代表就是数据库)

三、为何要用Mybatis框架?用JDBC解决数据库问题存在问题么?

学习过JDBC的人都知道,想要执行一段数据库代码增删查改相关数据需要书写十几行甚至几十行代码,而真正有用的也就一句核心数据库语句而已!那么这就是学习框架的原因。当然这也只是选择框架的一个原因而已!

四、Mybatis概述

mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement等繁杂的过程。

mybatis 通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis 框架执行sql并将结果映射为java对象并返回。

采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbcapi底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作。

ORM:Object Relational Mappging 对象关系映射。即将数据库和实体类对应起来。让我们用操作类的方式操作数据库

五、Mybatis入门案例

1.打开IDEA,新建项目,选择Maven,直接Next

2.可以默认也可以自定义。GroupId尽量为域名反写,点击finish

3.编辑pom.xml配置文件添加如下属性:

①打包方式

<packaging>jar</packaging>

②导入mybatis坐标

进入mybatis官网

https://mybatis.org/mybatis-3/zh/index.html

选中入门,将依赖码复制到pom.xml <dependencies></dependencies> 标签中,如下:

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.0</version>
    </dependency>
</dependencies>

其中version可以自行编辑选择合适的版本

③导入Mysql坐标

在pom.xml <dependencies></dependencies> 标签中添加如下内容

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.0.7</version>
</dependency>

其中 version 版本自选适合当前项目的

④导入日志坐标(可选)

在pom.xml <dependencies></dependencies> 标签中添加如下内容

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.5</version>
</dependency>

其中 version 版本自选适合当前项目的

⑤导入单元测试坐标(可选)

在pom.xml <dependencies></dependencies> 标签中添加如下内容

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
    <scope>test</scope>
</dependency>

其中 version 版本自选适合当前项目的

4.创建好要操作的数据库及其表

示例:

create database student character set utf8;

use student;

create table baseinfo (
        student_id int unsigned not null primary key,
        name       char(10) not null,
        sex        char(4) not null,
        birth      date    not null,
        politily   char(20) not null
);


insert into baseinfo values (201080701,"张三","男","1994-12-2","自动化1");
insert into baseinfo values (201080702,"李四","男","1989-10-8","自动化2");
insert into baseinfo values (201080703,"王五","男","1994-8-8","自动化2");
insert into baseinfo values (201080704,"路人1","女","1994-7-9","自动化2");
insert into baseinfo values (201080705,"路人2","男","1994-12-8","自动化2");
insert into baseinfo values (201080706,"路人3","女","1994-11-8","自动化2");
insert into baseinfo values (201080707,"路人4","男","1992-1-23","自动化2");

5.创建实体Java类开始进行逻辑操作

技巧:

①定义相关属性

②利用IDEA功能自动添加get、set、toString方法

③实体类中的属性名称要和数据库表中的属性名称一一对应且完全相同(注意)

package Main;
import java.util.Date;

public class Student {

    int student_id;
    String name;
    String sex;
    Date birth;
    String politily;

    public int getStudent_id() {
        return student_id;
    }

    public void setStudent_id(int student_id) {
        this.student_id = student_id;
    }

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public String getPolitily() {
        return politily;
    }

    public void setPolitily(String politily) {
        this.politily = politily;
    }

    @Override
    public String toString() {
        return "Student{" +
                "student_id=" + student_id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", birth=" + birth +
                ", politily='" + politily + '\'' +
                '}';
    }
}

③创建持久层接口(行业规则为Dao包下xxxDao接口)

package Dao;

import Main.Student;

import java.util.List;

public interface StuDao {

    List<Student> findAll();
}

6.在resources包下新建持久层XML管理文件(行业规则为SqlMapConfig.xml)

SqlMapConfig.xml 文件内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <!--主配置文件-->
    <!--配置环境-->
    <environments default="mysql">  <!--可为任意值,但该值必须出现在下面的 environment 标签中-->
        <!--配置mysql环境-->
        <environment id="mysql">
            <!--事务类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置m数据源(连接池)-->
            <dataSource type="POOLED">
                <!--配置连接数据库的基本信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/> <!--数据库驱动-->
                <property name="url" value="jdbc:mysql://localhost:/3306/student"/> <!--指明哪个数据库-->
                <property name="username" value="root"/>    <!--数据库用户名-->
                <property name="password" value="123456"/>  <!--数据库用户名密码-->
            </dataSource>
        </environment>
    </environments>

    <!--指明映射配置文件路径,映射配置文件是指每个Dao独立的配置文件-->
    <mappers>
        <mapper resource="Dao/StuDao.xml"/> <!--该配置文件顶层路径是指resources当前目录下;本例中StuDao.xml的所在目录为src/xxx/resources/Dao/目录-->
    </mappers>
</configuration>

StuDao.xml(由SqlMapConfig文件指定) 文件内容如下:

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="Dao.StuDao">     <!--namespace是指Dao的全限定域名,其中 .  代表目录,类似于 /-->
    <!--查询-->
    <select id="findAll" resultType="Main.Student">    <!--id 必须和相应 JAVA Dao 接口文件抽象方法同名--> <!--resultType告知将程序的查询结果返回到Main.Student实体类对象中-->
        select * from Student;  <!--sql语句结尾的封号可有可无-->
    </select>
</mapper>

注意事项:

①IDEA里创建目录时,小数点不具有分级目录功能,即创建的目录时单级的

②IDEA里创建包时,小数点具有分级目录功能,即创建的目录是多级的

③mybatis映射配置文件路径必须和Dao接口配置文件路径结构相同;例如:

④映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名

⑤映射配置文件的id属性的取值必须是dao接口的方法名

posted @ 2020-06-12 12:21  IT蓝月  阅读(163)  评论(0编辑  收藏  举报
Live2D