快速搭建第一个Mybatis程序

举报
Java的学习之路 发表于 2022/03/30 15:52:51 2022/03/30
【摘要】 一、简介以Mybatis3.5.7为例环境:jdk8.0Mysql8.0maven3.8.4IDEA回顾:JDBCMysqlJava基础MavenJunit 1.初识MybatisMyBatis 是一款优秀的持久层框架它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作MyBatis 可以通过简单的 XML 或注解来配置...

一、简介

以Mybatis3.5.7为例
环境:

  • jdk8.0
  • Mysql8.0
  • maven3.8.4
  • IDEA

回顾:

  • JDBC
  • Mysql
  • Java基础
  • Maven
  • Junit

1.初识Mybatis

在这里插入图片描述

  • MyBatis 是一款优秀的持久层框架
  • 它支持自定义 SQL、存储过程以及高级映射。
  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作
  • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
  • MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。
  • 2013年11月迁移到Github。所以要找Mybatis得去Github

怎么获得Mybatis?

  • maven仓库
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
</dependency>

2.持久化

数据持久化

  • 持久化就是把程序的数据在持久状态和瞬时状态转化的过程
  • 内存:断电后数据就消失了
  • 数据库(jdbc),IO文件持久化

为什么需要持久化

  • 内存断电后数据就丢失了,有一些对象我们不能让他丢掉
  • 内存太贵了

3.持久层

Dao层,Service层,Controller层

4.为什么需要Mybatis

  • 帮助程序员把数据存入到数据库中
  • 方便
  • 传统的JDBC代码太复杂了,框架可以简化操作,自动化。
  • 不使用Mybatis也可以,更容易上手。
  • 优点:
    • sql和代码分类,提高可维护性
    • 提供映射标签,支持对象与数据库的orm字段关系映射
    • ORM是对象关系映射的意思
      O ------ object就是 java对象
      R -------relational 关系型数据
      M -------mappering 映射
    • 提供哦那个对象关系映射标签,支持对象关系组建维护
    • 提供xml标签,支持编写动态sql

二、第一个Mybatis程序

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

1.搭建环境

先提供一个数据库和用来操作的表
新建项目
1.File->new Project 新建maven项目
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
下面这一堆代码是构建maven项目以后,自带的

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.kuang</groupId>
    <artifactId>Mybatis-study</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>

在这里插入图片描述

2.删除src,这样就可以当成父工程了
3.导入maven依赖
第一次加入依赖的时候,项目会爆红,记得重新加载项目,这样就不会爆红了

<!--导入依赖-->
    <dependencies>
<!--         mysql驱动-->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>

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

        <!--        junit驱动-->
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

2.创建一个新模块

在这里插入图片描述
在这里插入图片描述
父项目的pox.xml就会多出来这样的代码

 <modules>
        <module>mybatis-01</module>
        <module>mybatis-01</module>
        <module>mybatis-01</module>
    </modules>
  • 编写mybatis核心配置文件
    在这里插入图片描述
    把下面的代码拷贝到刚刚新建的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代表核心配置文件-->
<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>
    <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>

上面那一个从官网复制过来的,相当于是一个模板,但是里面具体的信息需要我们自己去设置,比如说我们要连接的数据库的用户名,密码等信息需要手动配置
在这里插入图片描述

<?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代表核心配置文件-->
<configuration>
<!--    环境可以有多个,我们用默认的环境-->
<!--    配置连接数据库的环境-->
    <environments default="development">
        <environment id="development">
<!--            事务管理器,类型是JDBC-->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai&amp;useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="a87684009."/>
<!--                数据源就是连接是连接数据库的信息-->
            </dataSource>
        </environment>
        <environment id="test">
            <transactionManager type="JDBC"/>
<!--            type=POOLED表示使用数据库连接池-->
            <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>
<!--    引入映射文件-->
<!--    每一个Mapper.xml都需要在Mybatis的核心配置文件中注册-->
    <mappers>
        <mapper resource="com/kuang/dao/UserMapper.xml"/>
    </mappers>
</configuration>

3.编写代码

  • 编写mybatis工具类
//工厂模式
//sqlSessionFactory---->sqlSession
public class MybatisUtils {
    public static SqlSessionFactory sqlSessionFactory;

    static {

        try {
            //读取配置文件
            //下面三句话是固定的
            //使用Mybatis第一步:获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 既然有了SqlSessionFactory,顾名思义,我们就可以从中获取SqlSession的实例了
     * SqlSession完全包含了面向数据库执行sql命令所需要的所有方法
     */
    public static SqlSession getSqlSession() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return  sqlSession;
    }


}

  • 实体类(domain,pojo,domain)每一个类都和数据库中的一张表相关联
package com.kuang.pojo;

/**实体类
 * @author zengyihong
 * @create 2022--03--28 17:14
 */
public class User {
 private int id;
 private String username;
 private String password;

 public User() {
 }

 public User(int id, String username, String password) {
  this.id = id;
  this.username = username;
  this.password = password;
 }

 public int getId() {
  return id;
 }

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

 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{" +
          "id=" + id +
          ", username='" + username + '\'' +
          ", password='" + password + '\'' +
          '}';
 }
}

  • DAO接口(对数据库表的CRUD操作,对user表的操作就对应一个userDao)
package com.kuang.dao;

import com.kuang.pojo.User;

import java.util.List;

/**这个类用来操作数据库中对象的实体
 * @author zengyihong
 * @create 2022--03--28 17:16
 */
//dao等价于mapper
public interface UserDao {
    List<User> getUserList();
}

  • 接口实现类由原来的UserDaoImpl转换成为一个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">
<!--命名空间要绑定一个对应的DAO/Mapper接口-->
<mapper namespace="com.kuang.dao.UserDao">
<!--     select查询语句 id对应原来的方法名字-->
    <select id="getUserList"  resultType="com.kuang.pojo.User">
        select  * from mybatis.user
    </select>

</mapper>

可能大家看到上面那些有点懵,那我们就来复习一下 ,具体的大家可以看我博客中JDBC的内容,里面有关于分层的讲解。

在这里插入图片描述
在这里插入图片描述

4.Junit测试

package com.kuang.dao;

import com.kuang.pojo.User;
import com.kuang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;

import java.util.List;

/**
 * @author zengyihong
 * @create 2022--03--29 9:55
 */
public class UserDaoTest {
    @Test
    public void test(){
//        SqlSession
//                第一步:获得SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //方式一:执行SQL getMapper
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        List<User> userList = mapper.getUserList();
        for (User user:userList){
            System.out.println(user);
        }
        //关闭SqlSession

        sqlSession.close();

    }

}

在这里插入图片描述

三、可能遇到的问题

1.配置文件没有注册
2.绑定接口错误
3.方法名错误
4.返回类型错误
5.maven导出资源错误
在pox.xml中,加入下面代码即可

 <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。