框架初学——Mybatis(一)

一.Mybatis

1.1 什么是Mybatis:

在这里插入图片描述

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
详情见官网:

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

1.2 Mybatis的获取:

1.Maven仓库:

< !--  https://mvnrepository.com/artifact/org.mybatis/mybatis -->   
< dependency>
      < groupId>org.mybatis</groupId>
      < artifactId>mybatis</artifactId>
      < version>3.5.2</version>   
      < /dependency>

2.Github:

https://github.com/mybatis/mybatis-3/releases

1.3 持久化:

数据持久化
持久化就是程序的数据在持久状态和瞬时状态的过程
内存:断电即失
数据库(jdbc),io文件持久化。
为什么需要持久化:不能丢掉一些对象

1.4 持久层:

Dao层,Service层,Controller层…
完成持久化工作的代码块
层界限十分明显

1.5 Mybatis的优点:

1.方便
2.简化传统复杂的JDBC代码,自动化
3.将数据存入到数据库中
4.简单易学
5. 灵活
6. sql和代码的分离,提高了可维护性。
7. 提供映射标签,支持对象与数据库的orm字段关系映射
8. 提供对象关系映射标签,支持对象关系组建维护
9. 提供xml标签,支持编写动态sql。

二.第一个Mybatis程序

思路:搭建环境–>导入Mybatis–>编写代码–>测试

2.1 搭建环境:
1.搭建数据库:

1.打开SQLyog
在这里插入图片描述

2.创建一个名叫mybatis的数据库

在数据库中创建一个表名叫usera
用户含三个字段,id、name、pwd
ENGINE是引擎
最后插入数据
代码如下:

CREATE DATABASE `mybatis`;

USE `mybatis`;

CREATE TABLE `usera`(
  `id` INT(20) NOT NULL PRIMARY KEY,
  `name` VARCHAR(30) DEFAULT NULL,
  `pwd` VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `usera`(`id`,`name`,`pwd`) VALUES 
(1,'嘻嘻','1234'),
(2,'嘿嘿','1234'),
(3,'哈哈','1234')
3.创建完成:

在这里插入图片描述

2.2 新建Maven项目:

1.新建maven项目
a.
在这里插入图片描述
b.不用点击Create from archetype在这里插入图片描述
c.创建一个名叫Mybatis-study01的工程在这里插入图片描述
d.点击ENable Auto-Import自动导入在这里插入图片描述
e.点击Settings->Build,Exception,Deployment
点击Maven
观察Maven home dierctory是否用的是自己下载的Maven
在这里插入图片描述

2.删除src

在这里插入图片描述

3.导入依赖

a.点击pom.xml文件
在这里插入图片描述
b.输入代码(version显红不用担心,会自动下载)

 <!--    导入依赖-->
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
  </dependencies>

c.点击Maven,观察Dependencies是否导入在这里插入图片描述

2.3 创建一个模块:
1.编写mybatis的核心配置文件

a.在父工程下新建一个Maven项目
在这里插入图片描述

b.观察新建工程Maven Dependecies发现仍然有父工程导入的依赖在这里插入图片描述
d.在resource目录下新建一个File在这里插入图片描述
e.名叫mybatis-config.xml在这里插入图片描述
f.输入代码进行配置(这是官方文档中的配置文件,只需要改动value)

<?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="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
</configuration>

在这里插入图片描述
e.点击Database->Data Source->MySQL在这里插入图片描述
f.输入User和Password测试连接在这里插入图片描述
g.点击Schemas勾选mybatis点击ok
在这里插入图片描述
h.点击图标在这里插入图片描述
i.就可以看到URL了在这里插入图片描述

2.编写一个mybatis工具类

a.在src->main->java下创建三级包目录在这里插入图片描述
b.在xin包下新建一个Utils包,创建一个java类名叫MybatisUtils
在这里插入图片描述
c.输入代码,获取SqlSessionFactory实例化对象:

package com.xin.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

//工具类sqlSeesionFactory-->sqlSession
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static{
        try {
            //使用mybatis获取对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }catch(IOException e) {
            e.printStackTrace();
        }
    }
//    既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
//    SqlSession 提供了在数据库执行 SQL 命令所需的所有方法
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();

    }

}

2.4 编写代码

实体类–>Dao接口–>接口实现类

1.在com.xin目录下新建一个pojo包在这里插入图片描述
2.输入代码:
package com.xin.pojo;

public class User {
    private int id;
    private String name;
    private String pwd;
    public User(){

    }
    public User(int id,String name,String pwd){
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}

3.在com.xin.dao目录下新建UserDao接口和User Mapper.xml配置文件

在这里插入图片描述
配置文件代码:
namespace=绑定一个对应的Dao/Mapper接口

<?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.xin.dao.UserDao">
    <select id="getUserList" resultType="com.xin.pojo.User">
        select * from mybatis.usera
    </select>
</mapper>

接口代码:

package com.xin.dao;

import com.xin.pojo.User;

import java.util.List;

public interface UserDao {
    List<User> getUserList();

}

2.5 测试:
1.在test目录下创建跟java目录下一样结构的包,在dao包下创建一个java类UseDaoTest

在这里插入图片描述

2.代码如下:
package com.xin.dao;

import com.xin.pojo.User;
import com.xin.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserDaoTest {
    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserDao userDao = sqlSession.getMapper(UserDao.class);

        List<User> userList = userDao.getUserList();

        for (User user : userList) {
            System.out.println(user);

        }
        sqlSession.close();

    }
}

3.点击运行,发现错误

在这里插入图片描述
回到mybatis-config.xml配置文件,添加代码,每一个Mapper.xml都需要在Mybatis核心文件中注册
在这里插入图片描述
再次运行,发现错误:
在这里插入图片描述
因为Maven约定大于配置导致配置文件可能发生无法被导出或者生效的问题
打开pom.xml文件:添加代码:

<build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

点击运行,运行成功:
在这里插入图片描述

4.不支持发行版本错误

这是我自己在运行代码时出现的错误
这个博主有很详细的讲解:

https://blog.csdn.net/DD04567/article/details/107205871?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159585410519725247664593%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159585410519725247664593&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v3~pc_rank_v2-1-107205871.first_rank_ecpm_v3_pc_rank_v2&utm_term=Error%3Ajava%3A+%E9%94%99%E8%AF%AF%3A+%E4%B8%8D%E6%94%AF%E6%8C%81%E5%8F%91%E8%A1%8C%E7%89%88%E6%9C%AC+5&spm=1018.2118.3001.4187

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值