第一个Mybatis项目

(一)为什么要用Mybatis?

(1)Mybatis对比JDBC而言,sql(单独写在xml的配置文件中)和java编码分开,功能边界清晰,一个专注业务,一个专注数据。
(2)Mybatis是持久层框架,避免了大部分JDBC代码和手动设置参数以及获取结果集。
(3)Mybatis可以用简单的XML或注解进行配置和原始映射,将接口和Java对象映射成数据库中的记录。(不用像JDBC中实体类属性一 一对应表列名)
(4)Mybatis是一个半自动的ORM框架。

(二)Mybatis项目构建

1、开发环境准备
(1)单击SSM2项目名,右键new一个module,选择“Maven Archetype”,命名为mybatis01,并给其指定gav:
第一个Mybatis项目_第1张图片(2)在pom.xml中导入相关jar包:

<!--导入MyBatisHelloWorld相关jar包-->
    <dependencies>
        <!--导入MySQL的驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
        </dependency>

        <!--导入MyBatis的jar包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>

        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!--log4j-->
        <!--日志记录:查看sql语句,参数绑定,查询结果查看-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

(3)创建ssm数据库及两个表
在这里插入图片描述
(4)创建实体类
对应employees表在src的main下面的java文件夹下新建com.atguigu.bean文件夹,里面新建一个实体类Employee,对应表的列名新建对应属性。
第一个Mybatis项目_第2张图片
2、MyBatis框架的搭建
(1)创建持久层接口
在src的main下面的java文件夹下新建com.atguigu.dao文件夹,在里面新建EmployeeDao接口,里面只写了一个根据主键查询Employee对象的抽象方法:

public interface EmployeeDao {
    //根据主键查询Employee对象
    Employee getById(Integer id);
}

(2)创建接口的实现类
Mybatis通过映射文件替代持久层接口的实现类(将sql语句写在配置文件内)。
在main的resource文件夹下新建EmployeeDao.xml文件,里面要写的头信息去哪里找呢?
去官网链接,选择“入门”,找到“探究已映射的SQL”:
第一个Mybatis项目_第3张图片里面的代码就是我们需要的,复制一份到EmployeeDao.xml中,进行修改:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--mapper标签就是根节点,有一个namespace的属性:指定映射文件对应的持久层接口是谁?所以属性值是接口全类名-->
<mapper namespace="com.atguigu.dao.EmployeeDao">
    <!--实现该抽象方法:Employee getById(Integer id); -->
    <select id="getById" parameterType="int" resultType="com.atguigu.bean.Employee">
        select id,last_name lastName,email,gender,salary,dept_id deptId from employees where id=#{id}
    </select>
</mapper>

3、创建Mybatis的核心配置文件
设置你要连接的数据库是哪个,加载映射文件。
在main的resource文件夹下新建mybatis-config.xml文件,里面要写的头信息去哪里找呢?
去官网链接,选择“入门”,找到“从XML中构建SqlSessionFactory”:
第一个Mybatis项目_第4张图片
将代码复制一份到mybatis-config.xml中,进行修改:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--环境:设置数据库的连接信息:讲完Spring之后,不用这个了-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--加载映射文件-->
    <mappers>
        <mapper resource="EmployeeDao.xml"/>
    </mappers>
</configuration>

4、测试
在test文件夹下的java文件夹下新建com.atguigu文件夹,在里面新建MyBatisTest类进行测试。

public class MyBatisTest {
    //下面的代码,后面将Spring之后都不用写,只是暂时对MyBatis做测试
    @Test
    public void testMyBatis(){
        try {
            //1. 加载MyBatis的核心配置文件
            InputStream input = Resources.getResourceAsStream("mybatis-config.xml");//注意:Resource导的是ibatis那个类里的,别导错了
            //2. 创建SqlSessionFactory工厂对象(设计模式之工厂模式)
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(input);
            //3. 从工厂内获得一个SqlSession对象(看做之前的Connection)
            SqlSession sqlSession = factory.openSession();
            //4. 通过SqlSession对象获取到EmployeeDao的对象
            //  (获得的肯定是EmployeeDao的实现类对象,MyBatis根据映射文件生成的)
            EmployeeDao employeeDao = sqlSession.getMapper(EmployeeDao.class);
            //5. 通过EmployeeDao调用方法即可
            Employee employee = employeeDao.getById(1);
            System.out.println("employee="+employee);
            //6. sqlSession对象需要关闭(按照常理应该在finally中关)
            sqlSession.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }
}

执行Test,可以看到控制台输出了id=1的Employee对象了:
在这里插入图片描述

你可能感兴趣的:(SSM,mybatis)