构建运行第一个Mybatis项目

文章目录

  • 前言
  • 一、创建基础工程
    • 1. 创建一个普通的Maven项目
    • 2.配置基础工程环境
        • 1). 进入settings,更改一下默认的maven路径
        • 2). 删除src
        • 3). 导入依赖
        • 授人以渔:
  • 二、创建项目
    • 1. 创建一个模块
    • 2.编写mybatis核心配置文件
        • 1). 创建mybatis-config.xml配置文件
        • 2). 找到官网的配置数据
        • 3).将其写入创建的mybatis-config.xml文件中
        • 4).修改配置文件
    • 3. 编写mybatis工具类(构建工厂SqlSessionFactory)
          • 从 XML 中构建 SqlSessionFactory
          • 从 SqlSessionFactory 中获取 SqlSession
        • 1). 创建一个工具类
        • 2). 写入方法、获取sqlSession
    • 4.实体类
    • 5. 构建mapper
          • 探究已映射的 SQL 语句
        • 1). 构建一个UserMapper接口
        • 2). 构建一个xml配置文件
  • 三、测试
    • 测试结构
    • 构建测试类
    • 运行结果
        • 错误
          • 运行报错1:
          • 运行报错2:
  • 总结

前言

看视频学的记一下笔。

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



一、创建基础工程

1. 创建一个普通的Maven项目

构建运行第一个Mybatis项目_第1张图片
构建运行第一个Mybatis项目_第2张图片

2.配置基础工程环境

1). 进入settings,更改一下默认的maven路径

构建运行第一个Mybatis项目_第3张图片

2). 删除src

构建运行第一个Mybatis项目_第4张图片

3). 导入依赖

如下:

<dependencies>
        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>8.0.18version>
        dependency>

        
        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
            <version>3.5.6version>
        dependency>

        
        
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.13.2version>
            <scope>testscope>
        dependency>

    dependencies>
授人以渔:

如果要其他版本、依赖,可去这里找: Maven存储库
mybatis依赖:传送门
mysql依赖:传送门
junit依赖: 传送门

以mybatis为例,打开网站,选择一个版本点进去
构建运行第一个Mybatis项目_第5张图片
直接把这段复制到pom.xml配置文档中的 模块下即可
构建运行第一个Mybatis项目_第6张图片
如下
构建运行第一个Mybatis项目_第7张图片



二、创建项目

1. 创建一个模块

构建运行第一个Mybatis项目_第8张图片
构建运行第一个Mybatis项目_第9张图片
自动继承基础工程(父工程)的配置:
构建运行第一个Mybatis项目_第10张图片


2.编写mybatis核心配置文件

官网教程:传送门

1). 创建mybatis-config.xml配置文件

构建运行第一个Mybatis项目_第11张图片

2). 找到官网的配置数据

从官网找到一下核心配置
构建运行第一个Mybatis项目_第12张图片

3).将其写入创建的mybatis-config.xml文件中

构建运行第一个Mybatis项目_第13张图片

4).修改配置文件


<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
           		
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                  
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&charsetEncoding=UTF-8&serverTimezone=UTC"/>
                
				<property name="username" value="root"/>
                <property name="password" value="password"/>
            dataSource>
        environment>
    environments>




configuration>



3. 编写mybatis工具类(构建工厂SqlSessionFactory)

以下内容来源于官网: 传送门

从 XML 中构建 SqlSessionFactory

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory
的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从
XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new >SqlSessionFactoryBuilder().build(inputStream);

从 SqlSessionFactory 中获取 SqlSession

既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。例如:

try (SqlSession session = sqlSessionFactory.openSession()) {
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
}
1). 创建一个工具类

构建运行第一个Mybatis项目_第14张图片

2). 写入方法、获取sqlSession

每次在使用mybatis都要用的配置,所以直接写为一个工具类

package com.learn.utils;

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

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

/** 从sqlSessionFactory (get)--> sqlSession*/
public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory;

    // 使用mybatis必要配置:获取sqlSessionFactory对象、获取sqlSession
    static{     // 写在static中,在加载类的时候一起加载static块中的数据
        try {

            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();
    }
}



4.实体类

变量的名字应与数据库中相应表的字段所对应。
构建运行第一个Mybatis项目_第15张图片

package com.learn.pojo;

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

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", 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;
    }
}



5. 构建mapper

mapper就等价于dao

探究已映射的 SQL 语句

在上面提到的例子中,一个语句既可以通过 XML 定义,也可以通过注解定义。我们先看看 XML 定义语句的方式,事实上 MyBatis 提供的所有特性都可以利用基于 XML 的映射语言来实现,这使得 MyBatis 在过去的数年间得以流行。如果你用过旧版本的 MyBatis,你应该对这个概念比较熟悉。 但相比于之前的版本,新版本改进了许多 XML 的配置,后面我们会提到这些改进。这里给出一个基于 XML 映射语句的示例,它应该可以满足上个示例中 SqlSession 的调用



<select id="selectBlog" resultType="Blog">
		select * from Blog where id = #{id}
	select>
mapper>
1). 构建一个UserMapper接口

构建运行第一个Mybatis项目_第16张图片

package com.learn.mapper;

import com.learn.pojo.User;
import java.util.List;

public interface UserMapper {
    List<User> getUserList();
}
2). 构建一个xml配置文件

构建运行第一个Mybatis项目_第17张图片





<mapper namespace="com.learn.mapper.UserMapper">


    <select id="getUserList" resultType="com.learn.pojo.User">
        select * from mybatis.user;
    select>
mapper>




三、测试

测试结构

在test目录下构建与main中相同的目录结构
如:com.learn.mapper
构建运行第一个Mybatis项目_第18张图片

构建测试类

package com.learn.mapper;

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

import java.util.List;

public class UserMapperTest {
    @Test
    public void test(){

        // 获得SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        // 执行sql  面向接口编程,这里只需要拿到UserMapper接口即可,UserMapper.xml可看作其实现类
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        //获得结果
        List<User> userList = userMapper.getUserList();

        //输出结果
        for (User user : userList ) {
            System.out.println(user);
        }

        //关闭SqlSession流
        sqlSession.close()
    }
}

运行结果


错误
运行报错1:

org.apache.ibatis.binding.BindingException: Type interface com.learn.mapper.UserMapper is not known to the MapperRegistry
构建运行第一个Mybatis项目_第19张图片

出现这个错误的原因是这里的UserMapper.xml还没有在核心配置文件中注册。

在之前创建项目时第二步的核心配置文件中进行注册,将以下代码添加进去即可(注意路径及名字)

	<mappers>
        <mapper resource="com/learn/mapper/UserMapper.xml"/>
    mappers>

构建运行第一个Mybatis项目_第20张图片

运行报错2:

java.lang.ExceptionInInitializerError
构建运行第一个Mybatis项目_第21张图片

初始化异常,UserMapper.xml这个文件可能不存在
因为资源过滤的问题,导致UserMapper.xml没有被导出,在targe文件夹下现在是没有这个文件的,所以才会找不到
注:target文件夹是用来存放项目构建后的文件和目录、jar包、war包、编译的class文件,都是maven构建时生成的。
maven是约定大于配置的

构建运行第一个Mybatis项目_第22张图片

最直接的方式是直接把上面的UserMapper.xml复制下来,但是这个方法太笨了,不可能每次的要自己拷贝
两种方法:
1.把xml文件写到resources下,这样就不会被过滤了
2.把下面的代码写入pom.xml中,基础工程与当前项目可以两个都写上

	<build>
        <resources>
            <resource>
                <directory>src/main/javadirectory>
                <includes>
                    <include>**/*.propertiesinclude>
                    <include>**/*.xmlinclude>
                includes>
                <filtering>falsefiltering>
            resource>
        resources>
    build>
directory:指定资源所在的目录,目录的路径是相对于pom.xml文件的
includes:指定要包含哪些文件
filtering标签中:false表示不过滤,true表示过滤

构建运行第一个Mybatis项目_第23张图片

最终结果:
构建运行第一个Mybatis项目_第24张图片

总结

如果需要单独导出一个项目,就需要更改一下配置,因为有些配置是在基础工程里写的,还需要复制一下

容易出问题的地方:

  1. 核心配置文件中要注册mappers
  2. mapper.xml中注意绑定的接口、方法名、返回值类型
  3. maven的导出资源问题

步骤:

  1. 写工具类(MybatisUtils --> SqlSessionFactory)
  2. 写配置文件(mybatis-config.xml)
  3. 写实体类(User)
  4. 写mapper接口
  5. 写mapper.xml
  6. 写test

你可能感兴趣的:(笔记,java,mysql,mybatis)