第一个Mybatis程序

1.导入Maven库

<dependencies>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</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>
            <scope>test</scope>
        </dependency>
    </dependencies>

需要导入mysql,mybatis和junit三个包,是在父级pom.xml上配置的

2.创建mybatis-config.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="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=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="dao/UserMapper.xml"></mapper>
    </mappers>
</configuration>

这个配置是在resources文件夹下的;
XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器。
当然,还有很多可以在 XML 文件中配置的选项,上面的示例仅罗列了最关键的部分。 注意 XML 头部的声明,它用来验证 XML 文档的正确性。environment 元素体中包含了事务管理和连接池的配置。mappers 元素则包含了一组映射器(mapper),这些映射器的 XML 映射文件包含了 SQL 代码和映射定义信息。


注意:jdbc:mysql://localhost:3306 这个数据库连接的符号一定要仔细仔细再仔细,就在这个的一个“:”浪费了我1个小时的时间来排错。真是痛苦啊!

  <mappers>
        <mapper resource="dao/UserMapper.xml"></mapper>
    </mappers>

这个配置后面会再讲到。

3.手动连接数据库

在这里插入图片描述
在这个位置添加你所对应的数据库,并连接。

注意:测试连接的时候,有问题也许是时区的问题。
解决办法:在 url 上追加 ‘?serverTimezone=GMT’
在这里插入图片描述

4.创建MybatisUtils工具类

在这里插入图片描述

这个是目录结构,后面就不再一一的说明了。

从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。 但也可以使用任意的输入流(InputStream)实例,比如用文件路径字符串或 file:// URL 构造的输入流。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。

package 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;

public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static{

        try {
            //1.使用Mybatis的第一步:获取SqlSessionFactory对象
            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();
    }
}

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


注意: SqlSessionFactory sqlSessionFactory 这个工程创建不要创建两次,在try里面就直接

sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

这样就可以了。因为如果你要是写成这样:

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

那么外面的sqlSessionFactory就是null了,那么下面的方法再引用sqlSessionFactory,就会报错指针异常,这个问题也是让我找了好长时间的BUG.

5.创建实体类User

package 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 + '\'' +
                '}';
    }
}

注意:IDEA里面有快捷键可以一键生成;

6.创建Dao接口UserDao

package dao;

import pojo.User;

import java.util.List;

//操作数据库
public interface UserDao{
    List<User> getUserlist();
}

7.创建UserMappper.xml—绑定对应的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="dao.UserDao">

    <select id="getUserlist" resultType="pojo.User">
        select * from mybatis.user
    </select>
</mapper>

这个UserMappper.xml可以理解成接口UserDao的实现类,之前学JDBC的时候,需要创建实现接口的类,现在我们就通过.xml文件来作为实现类,在里面会有一些增删改查的操作.
注意:

namespace=“dao.UserDao”
通过这个namespace来与对应的接口进行绑定,这个连接的是" . " ,不是“/”.

这时候就需要在mybatis-config.xml文件中把这个mappers绑定写进去。

 <mappers>
        <mapper resource="dao/UserMapper.xml"></mapper>
    </mappers>

8.编写测试类UserDaoTest

import dao.UserDao;
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 org.junit.Test;
import pojo.User;
import utils.MybatisUtils;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

//测试类
public class UserDaoTest {
    
    @Test
    public void test() {
        //第一步:获得SqlSession  对象
        
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        
        //方式一:getMapper
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> userList = userDao.getUserlist();
        for (User user : userList) {
            System.out.println(user);
        }
        //方式二:
        //  List<User> userList = sqlSession.selectList("dao.UserDao.getUserList");

        //关闭sqlSession

        sqlSession.close();
    }

}

9.在pom.xl的build中配置resources

maven由于他的约定大于配置,我们可能遇到我们写的配置文件,无法被导出或者生效的问题,解决方案如下:

 <build>
        <resources>
            <resource>

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

10.最后运行程序

在这里插入图片描述
成功在数据库里导出数据,皆大欢喜!!!
在这个过程中可能会遇到各种各样的问题,请记住心态一定不要崩,看下面的错误报告,从最下面的错误一步一步往上解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值