MyBatis的配置及简单使用

news/2024/7/24 13:02:22 标签: mybatis

1.配置myBatis

1.myBatis的作用

MyBatis 是一个开源的持久层框架,它的主要作用是简化数据库操作,使得开发者能够更方便地与数据库进行交互。 MyBatis 允许开发者使用简单的 XML 或注解配置 SQL 映射,从而实现数据库操作,而不需要手动编写繁琐的 JDBC 代码。

我们之前学习过,xml是一种用来存储映射关系的语言。而当我们和数据库做连接的时候,其实用java语言实现了很多映射关系。比如当我们用jdbc连接数据库的时候,如果把这个连接看作一个抽象的对象,这个连接对象有许多属性,比如url,用户名,密码等等。这时如果我们使用xml和myBatis来配置这些关系,就不需要专门编写一个类来连接数据库了。

再举例来说,如果我们从数据库中读取了一个用户的两个属性——用户名和密码。此时我们希望把这两个属性放入一个java的用户对象中。我们可以选择new一个user对象,向构造器传入我们刚刚读取的两个属性。但一旦从数据库中读取的内容变多,我们就需要new很多新的对象。这时我们就可以通过xml和myBatis来配置一种映射关系,当我从数据库中读取时,自动完成java对象的创建。

总体而言,MyBatis 提供了一种简单而灵活的方式来处理数据库交互,同时保持了足够的可定制性。它被广泛用于 Java 项目中,尤其在与关系型数据库的交互中表现出色。

2.下载

Releases · mybatis/mybatis-3 (github.com)

下载assets的第一个。(已经编译过的,而不是源码)找到里面的jar包,复制到工程文件的lib文件夹下(如果没有lib文件夹,就直接复制到工程的大文件夹下),然后右键,选择添加为库,就配置完成了。 

 3.配置

我们在工程文件的大目录下(最外层)创建一个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>
    <!-- XML 配置文件的根元素,包含了 MyBatis 的全局配置信息 -->
    <!-- 定义了数据库环境配置 -->
    <environments default="development">
        <!-- 默认使用的数据库环境 -->

        <!-- 定义一个数据库环境 -->
        <environment id="development">
            <!-- 事务管理器的配置 -->
            <transactionManager type="JDBC"/>

            <!-- 数据源的配置 -->
            <dataSource type="POOLED">
                <!-- 数据库驱动 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>

                <!-- 数据库连接 URL -->
                <property name="url" value="jdbc:mysql://localhost:3306"/>

                <!-- 数据库用户名 -->
                <property name="username" value="root"/>

                <!-- 数据库密码 -->
                <property name="password" value="020809"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

重点在于

 <!-- 数据库驱动 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>

                <!-- 数据库连接 URL -->
                <property name="url" value="jdbc:mysql://localhost:3306"/>

                <!-- 数据库用户名 -->
                <property name="username" value="root"/>

                <!-- 数据库密码 -->
                <property name="password" value="020809"/>

这里的内容需要根据自己的实际情况而变化。这里使用的是mysql数据库。

2.通过myBatis将sql语句返回的值自动包装成一个java对象

如果我们从数据库中读取了一个用户的两个属性——用户名和密码。此时我们希望把这两个属性放入一个java的用户对象中。我们可以选择new一个user对象,向构造器传入我们刚刚读取的两个属性。但一旦从数据库中读取的内容变多,我们就需要new很多新的对象。这时我们就可以通过xml和myBatis来配置一种映射关系,当我从数据库中读取时,自动完成java对象的创建。 

1. 创建对应的类

以上面为例。要想把数据库里的数据映射成一个java对象,首先我们需要有一个对应的java类来描述数据库中的这个对象。

package Mybatis;

import lombok.Data;

@Data
public class User {
    String username; //名称最好和数据库字段名称保持一致,不然可能会映射失败导致查询结果丢失
    String password;
}

2.Lombok 

lombok是一种可以简化代码的框架,这里的@Data注释表明:在编译时,lombok框架会自动将这个类重新编译,添加一些常用方法,如 toStringequalshashCode、以及所有字段的 getter 和 setter 方法。所以在这个类里,即使字段默认为protected的,也没有编写getter和setter方法,但是在这个类外,我们依旧可以使用getter和setter方法来编辑类。

3.mapper

我们需要一种配置文件(映射关系)来告诉myBatis:对于某一种特定的sql语句,应该把sql里user的a内容映射到 java中user类的a字段上。

我们在工程文件的大目录下创建一个配置文件Mapper.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">
<!--
    MyBatis 映射器(Mapper)XML 文件,用于定义 SQL 映射配置。
    映射器文件通常用于将数据库操作与 Java 方法关联起来。
-->

    <!-- 定义映射器命名空间,通常与对应的 Java 接口或类的全限定名一致 -->
<mapper namespace="User">

    <!--
        定义一个查询操作,id 属性为该操作的唯一标识符。
        resultType 属性指定查询结果的返回类型,这里是 com.test.entity.Student。
    -->
    <select id="selectUser" resultType="Mybatis.User">
        select * from user
    </select>
    <!--
        在实际项目中,查询语句通常更为复杂,可以包含条件、关联查询等。
        这里的示例是一个简单的查询所有user的语句。
    -->

</mapper>

注意这一段:

 <!-- 定义映射器命名空间,通常与对应的 Java 接口或类的全限定名一致 -->
<mapper namespace="User">

    <!--
        定义一个查询操作,id 属性为该操作的唯一标识符。
        resultType 属性指定查询结果的返回类型
    -->
    <select id="selectUser" resultType="Mybatis.User">
        select * from user
    </select>

 namespace是这个mapper的名字

id指的是“select * from user”这条语句的名字,起了这个名字后,我们就可以在后面的java代码里用这个名字指代这条sql语句

resultType是需要映射成的类型的位置(不是电脑里的路径,是在java里的位置,哪个包(也可能不在包里,看你自己),哪个类),在这个例子里User是类名,Mybatis是User类所在的包名,这个地方每个人不一样,根据你的类的位置来决定。

4.在myBatis配置文件里添加mapper

当我们完成mapper之后,我们需要告诉java:我配置好了这个一个mapper。而myBatis和java连接就是靠我们一开始配置的哪个xml配置文件,所以我们在那个配置文件里添加如下语句:

   <mappers>
        <mapper url="file:UserMapper.xml"/>
    </mappers>

 “file:”表明这里的mapper是一个本地的file,冒号后可以跟mapper文件的相对路径或绝对路径。(这里是相对路径)(不是上面说的Java里的位置)(不是上面namespace属性里mapper的名字)

路径example:C:\Users\86136\projects\IdeaProjects\javaWeb\UserMapper.xml

添加完成后的完整的myBatis配置文件如下:

<?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>
    <!-- XML 配置文件的根元素,包含了 MyBatis 的全局配置信息 -->
    <!-- 定义了数据库环境配置 -->
    <environments default="development">
        <!-- 默认使用的数据库环境 -->

        <!-- 定义一个数据库环境 -->
        <environment id="development">
            <!-- 事务管理器的配置 -->
            <transactionManager type="JDBC"/>

            <!-- 数据源的配置 -->
            <dataSource type="POOLED">
                <!-- 数据库驱动 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>

                <!-- 数据库连接 URL -->
                <property name="url" value="jdbc:mysql://localhost:3306"/>

                <!-- 数据库用户名 -->
                <property name="username" value="root"/>

                <!-- 数据库密码 -->
                <property name="password" value="020809"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper url="file:UserMapper.xml"/>
    </mappers>
</configuration>

5.SqlSessionFactory

我们已经配置好了myBatis,当我们希望使用myBatis的时候,我们就会创建一个SqlSessionFactory类,在这个类里使用myBatis的各种功能。

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的,我们可以通过SqlSessionFactory来创建多个新的会话——SqlSession对象,你可以认为这就是之前JDBC中的Statement对象,会话之间相互隔离,没有任何关联。(我可以通过mysql的用户界面访问数据库,创建会话,也可以通过idea来访问数据库,这两种访问方式虽然都访问了相同的数据库,但相互没有关联)。

package Mybatis;

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;
import java.util.List;

/**
 * 我们已经配置好了myBatis,当我们希望使用myBatis的时候,
 * 我们就会创建一个SqlSessionFactory类,在这个类里使用myBatis的各种功能。
 */
public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        //寻找配置文件
        SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(new FileInputStream("myBatis_config.xml"));
        
        //sqlSession就像之前的statement一样,创建一个连接,执行sql语句,它也需要关闭,所以写进try
        try (SqlSession sqlSession = sqlSessionFactory.openSession(true)){
            
            //这里的参数是mapper里指定的那个sql语句的名称
            //也就是UserMapper.xml里的id字段的名称
            List<User> student = sqlSession.selectList("selectUser");

            //这行代码使用了 Java 8 引入的新特性之一,称为方法引用(Method Reference)。
            // 具体来说,System.out::println 是一个静态方法引用,用于将 println 方法关联到 System.out 对象上。
            //在这里,System.out::println 等效于 lambda 表达式 (s) -> System.out.println(s)。
            // 它表示将遍历 student 集合的每个元素,并将每个元素传递给 System.out.println 方法,实现在控制台上打印每个元素的效果。
            student.forEach(System.out::println);
        }
    }
}

运行后应该可以打印出数据库的全部内容,并且list中存放了和数据库等大小的user对象:


http://www.niftyadmin.cn/n/5326099.html

相关文章

失踪人员信息发布与管理系统:计算机毕设课题的研究与实践 springboot+java+vue+mysql

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

逻辑回归(解决分类问题)

定义&#xff1a;逻辑回归是一种用于解决分类问题的统计学习方法。它通过对数据进行建模&#xff0c;预测一个事件发生的概率。逻辑回归通常用于二元分类问题&#xff0c;即将数据分为两个类别。它基于线性回归模型&#xff0c;但使用了逻辑函数&#xff08;也称为S形函数&…

presto/trino 入门介绍实战

引言 Presto是一款分布式SQL查询引擎&#xff0c;它能够在大规模数据集上实现快速、交互式的查询。本文将介绍Presto的基本概念并结合一些实际的代码示例&#xff0c;能够让的大家快速入门并在实际项目中应用。 官网&#xff1a;Launch Presto: Local download, JDBC, Docker…

【前端发版】vue前端发版 步骤

1、 提交代码 代码合并通过之后到deb分支 2、git checkout 切换到dev分支上 运行起来看看自己刚刚提交的代码有没有错误 3、拉取最新代码 git pull 3、yarn run build 4、打包好的文件叫dist 重新命名为服务器里替换包名 5、登录文件传输 开始替换 替换的过程中 首先删除备…

遥感卫星影像现拍,哪里想看拍哪里!

我们为大家分享了查看实时卫星影像的方法。 虽然这个网站的卫星影像10分钟一更新&#xff0c;让世界尽收眼底&#xff0c;但分辨率却非常有限。 如果项目中需要更高清的卫星影像&#xff0c;且对时效性又有较高的要求&#xff0c;那么可以考虑用卫星专门拍摄。 光学遥感卫星…

TypeScript 中的“as”语法是什么?

在TypeScript中&#xff0c;as是一种类型断言语法&#xff0c;用于告诉编译器某个值的确切类型。它类似于类型转换&#xff0c;但不会对值进行运行时的实际转换&#xff0c;而只在编译时起作用。 as语法有两种形式&#xff1a; 类型断言&#xff1a;value as Type 这种形式的a…

Grind75第10天 | 133.克隆图、994.腐烂的橘子、79.单词搜索

133.克隆图 题目链接&#xff1a;https://leetcode.com/problems/clone-graph 解法&#xff1a; 这个题是对无向图的遍历&#xff0c;可以用深度优先搜索和广度有限搜索。 下面这个图比较清楚的说明了两种方法的区别。 DFS&#xff1a;从A开始克隆&#xff0c;遍历两个邻居…

浙江宁波象山县福利院部署清雷科技数字医养解决方案

“通过前台触屏电脑一体机&#xff0c;可以实时查看每位长者的生命体征情况&#xff0c;包括呼吸、心率、在离床状态、睡眠质量报告等&#xff0c;对呼吸异常、跌倒风险异常的长者还会特别标注提醒&#xff0c;不仅提高了照护人员的工作效率&#xff0c;还提升了对长者的安全保…