【2023.11.24】Mybatis基本连接语法学习➹

基本配置

1.如果使用Maven管理项目,需要在pom.xml中配置依赖。

2.安装Mybatis-3.5.7.jar包

3.进行XML配置:这里将文件命名为mybatis-config.xml

配置数据库连接XML文件

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="${驱动类(含包名)}"/>
        <property name="url" value="${数据库连接URL}"/>
        <property name="username" value="${用户名}"/>
        <property name="password" value="${密码}"/>
      </dataSource>
    </environment>
  </environments>

    <mappers>
        <mapper url = "file:src/com/test/mapper/TestMapper.xml"/>
        <!--    存放映射器XML文件   -->
    </mappers>

</configuration>

其中mappers标签内存放XML映射器文件

编写Java主函数

java 复制代码
package com.test;

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

import java.io.FileInputStream;
import java.io.FileNotFoundException;


public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(new FileInputStream("src/mybatis-config.xml"));
        try (SqlSession sqlSession = sqlSessionFactory.openSession(true)){
            System.out.println(sqlSession.selectList("getArtist"));//括号内填写SQL映射语句的id
        }
    }
}

1.从 XML 中构建 SqlSessionFactory

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得,创建SqlSessionFactory时会调用xml配置文件。

2.从 SqlSessionFactory 中获取 SqlSession

我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。

你可以通过 SqlSession 实例来执行已映射的 SQL 语句。SQL语句的映射需要编写映射器XML文件

编写映射器(mapper)的XML文件

XML 复制代码
<?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="src/com/test/mapper/TestMapper.xml"><!--区分不同映射器-->
    <!--条件查询-->
    <select id="getArtist" resultType="String">
        select aName from artist<!--填写SQL语句,里面的变量都是数据库的表名和字段名-->
    </select>
</mapper>

注:若xml配置文件中出现找不到映射器文件的情况,注意配置文件中mapper标签内的映射器引用格式。


接口函数

编写映射器接口:

java 复制代码
package com.test.mapper;

import com.test.artist;

import java.util.List;

public interface TestMapperInterface {
    List<artist> selectArtist();
    artist getArtistById(int a);
    int addArtist(artist newArtist);
    int deleteArtist(int d);
}

要让映射器关联上映射器接口,只需要修改映射器的namespace为接口地址:

java 复制代码
<?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="com.test.mapper.TestMapperInterface">
      <resultMap id="test" type="com.test.artist">
                <result column="aID" property="aID"/>
            </resultMap>
            <select id="selectArtist" resultMap="test">
                select * from artist
            </select>

    <!--条件查询-->
        <select id="getArtistById" resultMap="test">
        select * from artist where aID = #{a}<!--接口形参名-->
        </select>

    <!--插入操作-->
        <insert id="addArtist">
        insert into artist(aID,aName,asex) values (#{aID},#{aName},#{asex})
        </insert>

    <!--删除操作-->
        <delete id="deleteArtist" parameterType="com.test.artist">
        delete from artist where aID = #{d}
        </delete>

</mapper>

接口中的方法会自动对应上映射器中的SQL执行语句id

修改配置文件中的mapper路径:

XML 复制代码
<mapper resource = "com/test/mapper/TestMapper.xml"/>

因为接口的命名空间通常是在类路径下的某个位置,所以这里要将URL改成 resource

主函数调用映射器接口:

java 复制代码
package com.test;

import com.test.mapper.TestMapperInterface;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(new FileInputStream("src/mybatis-config.xml"));
        try (SqlSession sqlSession = sqlSessionFactory.openSession(true)){
            TestMapperInterface mapper = sqlSession.getMapper(TestMapperInterface.class);
            mapper.selectArtist().forEach(System.out::println);
            System.out.println("\n");
            System.out.println(mapper.getArtistById(2089));
        }
    }
}

MyBatis与JDBC的差异

|---------------------------------------------|----------------------------------------------|
| JDBC和Mybatis优缺点对比 ||
| JDBC | Mybatis |
| 用DriverManager驱动类连接数据库,java代码与数据库耦合 | 在配置xml文件中连接数据库,使得java代码与数据库分离 |
| 在Statement对象中执行SQL语句,java代码与SQL语句耦合 | 在映射器的xml文件中执行SQL语句,使得java代码与SQL语句分离 |
| 在ResultSet对象中接收SQL语句结果,每条结果需要指针遍历。 | 直接通过SqlSession中的方法接收SQL语句结果,结果是一个集合。 |

综上,相比于JDBC所有功能都在java代码中执行,Mybatis尽管结构更加复杂,但每个文件负责不同的功能,更加便于管理。

相关推荐
冷崖3 小时前
MySQL异步连接池的学习(五)
学习·mysql
知识分享小能手3 小时前
Vue3 学习教程,从入门到精通,Axios 在 Vue 3 中的使用指南(37)
前端·javascript·vue.js·学习·typescript·vue·vue3
焄塰7 小时前
Ansible 管理变量和事实
学习·centos·ansible
oe10198 小时前
读From GPT-2 to gpt-oss: Analyzing the Architectural Advances(续)
笔记·gpt·学习
Include everything11 小时前
Rust学习笔记(三)|所有权机制 Ownership
笔记·学习·rust
杜子不疼.12 小时前
《Python学习之文件操作:从入门到精通》
数据库·python·学习
★YUI★12 小时前
学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)8.17
java·学习·游戏·unity·c#
livemetee13 小时前
Flink2.0学习笔记:Flink服务器搭建与flink作业提交
大数据·笔记·学习·flink
柯南二号14 小时前
【Java后端】MyBatis-Plus 原理解析
java·开发语言·mybatis
INS_KF14 小时前
【C++知识杂记2】free和delete区别
c++·笔记·学习