mybatis基本使用的快速入门

1.基本使用快速入门(基于Mybatis3方式)

1.1 创建一个数据库并新建表格

CREATE
DATABASE `mybatis`;
    
USE`mybatis`;
    
CREATE TABLE `t_emp`
(
    emp_id     INT AUTO_INCREMENT,
    emp_name   CHAR(100),
    emp_salary DECIMAL(10, 2),
    PRIMARY KEY (emp_id)
);
INSERT INTO `t_emp`(emp_name, emp_salary)
VALUES ("tom", 200.33);
INSERT INTO `t_emp`(emp_name, emp_salary)
VALUES ("jerry", 666.66);
INSERT INTO `t_emp`(emp_name, emp_salary)
VALUES ("andy", 777.77);

1.2 新建项目

1.3 创建与表格对应的实体类

public class Emp{
    
    private Integer empId;
    
    private String empName;
    
    private String empSalary;
    
    //创建与之对应的set|get方法
    //可以看情况使用lombok的@Data注解,更方便
}

1.4 导入依赖

在pom.xml导入以下依赖


<dependencies>
    <!-- mybatis依赖 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.11</version>
    </dependency>
    <!-- MySQL驱动 mybatis底层依赖jdbc驱动实
    现,本次不需要导入连接池,mybatis自带! -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.25</version>
    </dependency>
    <!--junit5测试-->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.3.1</version>
    </dependency>
</dependencies>

mybatis前身叫ibatis,在导入类的时候发现后面的包名带有ibatis时,可以放心选择

1.5 准备Mapper接口和MapperXML文件

MyBatis 框架下,SQL语句编写位置发生改变,从原来的Java类,改成XML或者注解定义!

推荐在XML文件中编写SQL语句,让用户能更专注于 SQL 代码,不用关注其他的JDBC代码。

如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码!!

一般编写SQL语句的文件命名:XxxMapper.xml Xxx一般取表名!!

Mybatis 中的 Mapper 接口相当于以前的 Dao。但是区别在于,Mapper 仅仅只是建接口即可,我们不需要提供实现类,具体的SQL写到对应的Mapper文件,该用法的思路如下图所示:

请添加图片描述

1.5.1 定义mapper接口

包:com.xxx.mapper

//xxx为自己所在的单位或项目的名称,感兴趣可以去了解一下该命名规范

package com.csi.mapper;

import com.csi.domain.Emp;
/**
 * t_emp表对应数据库SQL语句映射接口!
 * 接口只规定方法,参数和返回值!
 * mapper.xml中编写具体SQL语句!
 */
public interface EmpMapper {
    /**
     * 根据员工id查询员工数据方法
     * @param empId 员工id
     * @return 员工实体对象
     */
    Employee selectEmp(Integer empId);
}
1.5.2 定义mapper xml

位置: resources/mappers/EmpMapper.xml

个人学习的是使用上下对应的位置来创建mapper文件,使用此方式在编译后,两个文件会在一个文件夹下
请结合自身项目来输入类或是xml名称,下方的EmployeeMapper是编者的练习,与本教程中的并不相同

请添加图片描述
在这里插入图片描述

如果想使用这种方式来创建文件夹,那么在创建下面的文件夹的时候,一定要使用com/csi/mapper的形式创建文件夹,使用com.csi.mapper会导致创建出来的是一个叫com.csi.mapper的文件夹

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTDMapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace等于mapper接口类的全限定名,这样实现对应 -->
<mapper namespace="com.csi.mapper.EmpMapper">
    <!-- 查询使用 select标签
    id = 方法名
    resultType = 返回值类型
    标签内编写SQL语句
    -->
    <select id="selectEmp" resultType="com.csi.domain.Emp">
        select emp_id empId,emp_name empName, emp_salary empSalary from t_emp where emp_id = #{empId}
        <!--如果使用mybatis时开启了日志,那么在运行时可以发现,#{empId} 被替换为一个?-->
        <!--该问号是一个占位符,会把输入的数据更改在该位置上,将初始语句补全,以实现数据库查找-->
        <!--括号里的empId是一个自定义的变量名称,只是为了方便区分,和传入的方法参数名无关-->
        <!--传入多个参数时,会按传入顺序依次更改为参数,更具体的可以去百度 jdbc中?的用法-->
    </select>
</mapper>

注意:

  • 方法名和SQL的id一致

  • 方法返回值和resultType一致

  • 方法的参数和SQL的参数一致

  • 接口的全类名和映射配置文件的名称空间一致

1.6 准备mybatis配置文件

mybatis框架配置文件: 数据库连接信息,性能配置,
mapper.xml配置等!

习惯上命名为 mybatis-config.xml,这个文件名仅仅只是建议,并
非强制要求。将来整合 Spring 之后,这个配置文件可以省略,所
以操作时可以直接复制、粘贴。

<?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表示配置Mybatis的开发环境,可以配置多个环境,在众多具体环境中,
    使用default属性指定实际运行时使用的环境。default属性的取值是environment标签的id属性的值。 -->
    <environments default="development">
        <!-- environment表示配置Mybatis的一个具体的环境-->
        <environment id="development">
            <!-- Mybatis的内置的事务管理器 -->
            <transactionManager type="JDBC"/>
            <!-- 配置数据源 -->
            <dataSource type="POOLED">
                <!-- 建立数据库连接的具体信息 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <!--此为数据库名称,写自己的-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <!--下方为mysql的用户名和密码,写自己的,没有改过则默认为root-->
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- Mapper注册:指定Mybatis映射文件的具体位置 -->
        <!-- mapper标签:配置一个具体的Mapper映射文件 -->
        <!-- resource属性:指定Mapper映射文件的实际存储位
        置,这里需要使用一个以类路径根目录为基准的相对路径 -->
        <!-- 对Maven工程的目录结构来说,resources目录
        下的内容会直接放入类路径,所以这里我们可以以resources目
        录为基准 -->
        <!--<mapper resource="mappers/EmpMapper.xml"/>-->
        <mapper resource="com/csi/mapper/EmpMapper.xml"/>
    </mappers>
</configuration>

1.7运行和测试

import com.csi.domain.Emp;
import com.csi.mapper.EmpMapper;
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;

/**
 * projectName: com.csi.test
 *
 * description: 测试类
 */
public class MyBatisTest {

    @Test
    public void testSelectEmp() throws IOException {
        // 1.创建SqlSessionFactory对象
        // ①声明Mybatis全局配置文件的路径
        String mybatisConfigFilePath = "mybatisconfig.xml";
        // ②以输入流的形式加载Mybatis配置文件
        InputStream inputStream = Resources.getResourceAsStream(mybatisConfigFilePath);
        // ③基于读取Mybatis配置文件的输入流创建SqlSessionFactory对象
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 2.使用SqlSessionFactory对象开启一个会话
        SqlSession session = sessionFactory.openSession();
        // 3.根据EmpMapper接口的Class对象获取Mapper接口类型的对象(动态代理技术)
        EmpMapper empMapper = session.getMapper(EmpMapper.class);
        // 4. 调用代理类方法既可以触发对应的SQL语句
        Emp emp = empMapper.selectEmp(1);
        System.out.println("emp = " + emp);
        // 4.关闭SqlSession
        session.commit(); //提交事务 [DQL不需要,其他需要]
        session.close(); //关闭会话
    }
}

说明:

  • SqlSession:代表Java程序和数据库之间的会话。
    (HttpSession是Java程序和浏览器之间的会话)
  • SqlSessionFactory:是“生产”SqlSession的“工厂”。
  • 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。

1.8 SqlSession和HttpSession区别

  • HttpSession:工作在Web服务器上,属于表述层。
    • 代表浏览器和Web服务器之间的会话。
  • SqlSession:不依赖Web服务器,属于持久化层。
    • 代表Java程序和数据库之间的会话。

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值