Mybatis框架的基本使用方法

发布时间 2024-01-02 14:51:27作者: LANE_AZUR

2024-01-02

IDE:IDEA 2022.2.5

JDK version:19

Maven version:3.6.3

 

项目结构:

一、使用Maven构建项目

需要导入的依赖
<!-- mybatis的依赖 -->
<dependencies>
    <!-- mybatis依赖 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.11</version>
    </dependency>

    <!-- MySQL驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.25</version>
    </dependency>

    <!--junit5测试  可以直接使用@Test进行程序调试-->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.3.1</version>
    </dependency>
</dependencies>

 导入依赖后记得点击刷新

 

二、创建mapper接口以及POJO

 

EmployeeMapper接口
 public interface EmployeeMapper {

    /**
     * 根据id返回员工信息
     * @param id 员工id
     * @return 返回员工信息
     */
    Employee queryById(Integer id);

    /**
     * 根据id删除员工信息
     * @param id 员工id
     * @return
     */
    int deleteById(Integer id);
}
Employee实体类
 public class Employee {

    private Integer empId;

    private String empName;

    private Double empSalary;

    public Integer getEmpId() {
        return empId;
    }

    public void setEmpId(Integer empId) {
        this.empId = empId;
    }

    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public Double getEmpSalary() {
        return empSalary;
    }

    public void setEmpSalary(Double empSalary) {
        this.empSalary = empSalary;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "empId=" + empId +
                ", empName='" + empName + '\'' +
                ", empSalary=" + empSalary +
                '}';
    }


}

 

三、创建EmployeeMapper.xml和mybatis-config.xml文件

 创建位置如左图所示

1.EmployeeMapper接口中的方法需要有相应的SQL语句来实现其操作,EmployeeMapper.xml文件就是来实现相关的SQL语句的

例如要实现按id查找员工的全部信息、按id删除员工的全部信息(均在单表下进行操作)

查看代码
 <?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">
<!-- namespace = mapper接口类的全限定名,这样实现对应 -->
<mapper namespace="com.ssm.mapper.EmployeeMapper">
    <!-- 声明标签写sql语句
        CRUD creat(insert) read(select) update delete
        每个标签对应一个接口的方法 对应接口中方法的实现
        id="queryById" resultType="com.ssm.pojo.Employee"   id 方法名   resultType 返回值类型
        mapper接口 不能重载!!!!  因为mapper.xml只根据方法名来识别

    -->
    <select id="queryById" resultType="com.ssm.pojo.Employee">
        <!-- #{empId}代表动态传入的参数,并且进行赋值!-->
        select emp_id empId,emp_name empName, emp_salary empSalary from
        t_emp where emp_id = #{id}
        <!--
        select emp_id, emp_name, emp_salary from
        t_emp where emp_id = #{id} 这样写返回值为空
        -->
    </select>

    <delete id="deleteById">
        delete from t_emp where emp_id = #{id}
    </delete>


</mapper>

2.mybatis-config.xml

mybatis框架配置文件: 数据库连接信息,性能配置,mapper.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>

    <settings>
        <!-- 开启mybatis的日志输出,选择使用system进行控制台输出-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!-- environments表示配置Mybatis的开发环境,可以配置多个环境,在众多具体环境中,使用default属性指定实际运行时使用的环境。default属性的取值是environment标签的id属性的值。 -->
    <environments default="development">
        <!-- environment表示配置Mybatis的一个具体的环境 -->
        <environment id="development">
            <!-- Mybatis的内置的事务管理器
                 MANAGED  不会自动开启事务 | JDBC 自动开启事务  需要自己提交事务
            -->
            <transactionManager type="JDBC"/>
            <!-- 配置数据源
                 type = POOLED mybatis帮助我们维护一个连接池  |  UNPOOLED 每次都要新建或释放连接
            -->
            <dataSource type="POOLED">
                <!-- 建立数据库连接的具体信息 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis-example"/>
                <property name="username" value="root"/>
                <property name="password" value="24843464"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- Mapper注册:指定Mybatis映射文件的具体位置 -->
        <!-- mapper标签:配置一个具体的Mapper映射文件 -->
        <!-- resource属性:指定Mapper映射文件的实际存储位置,这里需要使用一个以类路径根目录为基准的相对路径 -->
        <!--    对Maven工程的目录结构来说,resources目录下的内容会直接放入类路径,所以这里我们可以以resources目录为基准 -->
        <mapper resource="mappers/EmployeeMapper.xml"/>
    </mappers>

</configuration>

四、进行测试

查看代码
 public class MybatisTest {

    @Test
    public void test01() throws IOException {
        // 1.读取配置文件(mapper-config.xml)
        InputStream ips = Resources.getResourceAsStream("mybatis-config.xml");

        // 2.创建sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ips);

        // 3.根据sqlSessionFactory创建sqlSession(每次业务创建一个,通完就释放)
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 4.获取接口的代理对象
        // 内部拼接接口的全限定符,方法名 去查找sql语句标签 1.拼接  类的全限定符.方法名 -> 整合参数 -> 调用ibatis对应的方法
        // JDK动态代理技术生成的mapper代理对象
        // mybatis底层依然调用ibatis
        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee employee = mapper.queryById(1);
        System.out.println("employee = " + employee);

        // 5.提交事务(非DQL Data Query Language 数据查询语言)和释放资源
        sqlSession.commit();
        sqlSession.close();
    }

五、测试结果

查询id值为1的员工全部信息,结果如下