通过myBatis将sql语句返回的值自动包装成一个java对象(1)以及SqlSessionFactory

这篇具有很好参考价值的文章主要介绍了通过myBatis将sql语句返回的值自动包装成一个java对象(1)以及SqlSessionFactory。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如果我们从数据库中读取了一个用户的两个属性——用户名和密码。此时我们希望把这两个属性放入一个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对象:

通过myBatis将sql语句返回的值自动包装成一个java对象(1)以及SqlSessionFactory,oracle,数据库文章来源地址https://www.toymoban.com/news/detail-802729.html

到了这里,关于通过myBatis将sql语句返回的值自动包装成一个java对象(1)以及SqlSessionFactory的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【IDEA优化】:解决MyBatis Mapper 的XML文件SQL语句无法自动提示问题(独家方案,亲测可用)

    IDEA中MyBatis编写mapper的SQL语句的时候无法提示SQL和数据库 无法正常方便的使用IDEA的提示功能,更准确无误的编写代码 亲测可用,一劳永逸(IDEA版本 IntelliJ IDEA 2021.1.3 ) 目的在于对 Mybatis的Mapper.XML中sql语句进行提示 网上的各种解决方案本质上其实都是配置SQL方言和SQL解析范

    2024年02月16日
    浏览(46)
  • mysql 自定义函数,返回值为sql查询后的某个字段的值

    函数框架:如果使用的是 Navicat 等可视化工具,通过点击界面填写相应的条件就可以得到函数框架 1、definer 翻译成中文是“定义者”的意思。MySQL中,创建视图(view)、函数(function)、存储过程(procedure)、触发器(trigger)、事件(event)时,都可以指定 DEFINER = user 选项,即指定此对象

    2024年01月18日
    浏览(32)
  • Coalesce:处理Null值,返回传入的多个字段(属性)中第一个非空的值

    Coalesce函数是SQL中的一个函数,用于返回参数列表中第一个非空的表达式的值。Coalesce函数接受两个或多个参数,它会按顺序依次检查每个参数,返回第一个非空的参数值。如果所有参数都为空,则返回NULL。 Coalesce函数可以用于在SQL中处理空值的情况。在实际的数据处理中,

    2024年02月09日
    浏览(34)
  • MyBatis中相关SQL语句

    1.between... and... 2.and   or 3.like ---两种写法 完整示例:   前端传入cust_no为1019,后端实际查询语句 注意:由于一开始where语句只写了 if test=\\\"reportRule != null没有写reportRule != \\\'\\\'\\\" ,导致查询结果出错,所以我们如果用到动态查询的话,一定要搞清楚前端传的是空值还是null值,如

    2024年02月12日
    浏览(28)
  • MyBatis 中如何执行 SQL 语句

    MyBatis 是一个基于 Java 的持久层框架,它提供了多种方式来执行 SQL 语句,包括直接使用 SqlSession 执行、使用映射器(Mapper)执行、使用 SqlSessionTemplate 执行等。本文将介绍 MyBatis 中常见的 SQL 执行方式及其使用方法。 在 MyBatis 中,可以通过 SqlSession 对象直接执行 SQL 语句。S

    2024年02月13日
    浏览(23)
  • 【Mybatis】Sql返回count()数量的处理

    【Mybatis】Sql返回count(*)数量的处理 如果把SQL写在类中或是注解中,当要取 select count(*) .... 类型SQL的返回值,直接指定函数的返回类型为 int/long 即可; 但对于把sql语句写在XML文件的情况,如果要取 select count(*) .... 的返回值,必须要指明结果类型 resultType=\\\"java.lang.Integer ,否则

    2024年02月12日
    浏览(28)
  • 【Mybatis】调试查看执行的 SQL 语句

    1. 问题场景: 记录日常开发过程中 Mybatis 调试 SQL 语句,想要查看Mybatis 中执行的 SQL语句,导致定位问题困难 2. 解决方式 双击shift 找到mybatis源码中的 MappedStatement 的 getBoundSql() 方法 Mybatis 的底层都会把 Mapper.xml 配置文件中的SQL 标签转化为基于 JDBC 执行的语句, boundSql 变量可

    2024年02月13日
    浏览(28)
  • MyBatis XML 映射文件中的 SQL 语句可以分为动态语句和静态语句

    目录 静态查询: 动态查询: 静态更新: 动态更新: 静态删除: 动态删除: 动态语句和静态语句在 MyBatis 中的作用如下: 静态查询: 静态查询是指在 SQL 语句中执行固定的查询操作,查询的条件和内容是预先确定的,不会随着用户输入或其他条件的改变而改变。以下是一

    2024年01月18日
    浏览(50)
  • Mybatis 开启控制台打印sql语句

    org.jeecg.modules.hdx.mapper为@mapper注解下面的类,或者继承BaseMapper,或者@MapperScan扫描包的类 2-1:在pom文件引入依赖 3-1:pom配置(包含分页)

    2024年02月13日
    浏览(43)
  • IDEA全局设置MyBatis中写SQL语句提示

    第一步:把这两个设置改成MySQL即可:   第二步:找到设置=编辑器=语言注入=店家加号,选择MySQL 

    2024年02月13日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包