Mybatis参数处理的几种方法小结

 更新时间:2023年08月20日 15:47:15   作者:yjg_  
在Mybatis中如何处理参数是一个非常重要的环节,本文将详细介绍 Mybatis 的参数处理机制,包括传入参数和返回参数的处理方式,具有一定的参考价值,感兴趣的可以了解一下

环境配置

项目结构

导入依赖

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.10</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.projectLombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.26</version>
    </dependency>
</dependencies>

jdbc.properties文件

方便给mybatis配置文件设置值

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/hqyj03?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimeZone=Asia/Shanghai
password=yjg
username=root

mybatis配置文件

常见的配置项

在 MyBatis 的配置文件(通常是 mybatis-config.xml)中,可以配置多个标签来定义 MyBatis 的行为和功能。以下是常见的一些 <configuration> 标签及其含义:

  • <properties>:用于定义配置文件中使用的属性。
  • <settings>:用于设置 MyBatis 的全局配置项,如开启缓存、启用自动生成主键等。
  • <typeAliases>:用于设置类型别名,简化在映射文件中的类型引用。
  • <typeHandlers>:用于配置类型处理器,用于在 Java 对象和数据库列之间进行类型转换。
  • <objectFactory>:用于指定创建结果对象的工厂方法。
  • <plugins>:用于配置插件,可以在 MyBatis 的执行过程中添加额外的功能或扩展。
  • <environments>:用于配置不同的数据库环境,包括数据源、事务管理器等。
  • <databaseIdProvider>:用于根据数据库厂商的不同选择不同的语句。
  • <mappers>:用于注册映射器接口或者映射文件,让 MyBatis 能够找到它们并加载。

添加配置项一

&lt;setting name="mapUnderscoreToCamelCase" value="true"/&gt; 

是 MyBatis 的配置项,用于设置是否将数据库中的下划线命名转换为驼峰命名。
默认情况下,MyBatis 会将数据库中的下划线命名方式(例如user_name)映射到 Java 对象的驼峰命名方式(例如userName)。
如果将value值 设置为 false(默认值),则不会进行自动的下划线到驼峰的转换,需要在映射文件或代码中手动指定对应的字段名称,数据库表字段和 Java 类中的属性名称需要保持一致。

添加配置项二

<setting name="logImpl" value="STDOUT_LOGGING"/> 

是 MyBatis 的配置项,用于设置 MyBatis 的日志输出实现。
在 MyBatis 中,可以通过配置不同的日志输出实现来记录 MyBatis 的运行日志,包括 SQL 语句、参数值、执行时间等信息。
将日志输出到标准输出(控制台)上,方便开发者在控制台中查看日志信息。这是 MyBatis 内置的一个基于 Java 标准库的日志输出实现。
除了 “STDOUT_LOGGING”,MyBatis 还提供了其他的日志输出实现选项,例如:

  • SLF4J_LOGGING: 将日志输出到 SLF4J(Simple Logging Facade for Java)框架,可以配合各种日志框架(如 Logback、Log4j、Log4j2)使用。
  • LOG4J2_LOGGING: 将日志输出到 Log4j2 日志框架。    
  • COMMONS_LOGGING: 将日志输出到 Apache Commons Logging 日志框架。
  • LOG4J_LOGGING: 将日志输出到 Log4j 1.x 日志框架。
  • JDK_LOGGING: 将日志输出到 Java 标准库的 java.util.logging 包。

添加配置项三

<!--设置映射类型别名-->
    <typeAliases>
       <!--设置pojo包下的类型别名-->
        <package name="com.yjg.mybatis.pojo"/>
    </typeAliases>

使用 <typeAliases> 元素来设置映射类型别名。

类型别名的作用是为 Java 类型(通常是实体类)指定一个简短的别名,以便在 XML 映射文件中使用这些别名来引用相应的类型。

<package name="com.yjg.mybatis.pojo"/> 表示将 com.yjg.mybatis.pojo 包下的所有类都注册为类型别名。

假设在 com.yjg.mybatis.pojo 包中有一个叫做 User 的类,它的完整类名是 com.yjg.mybatis.pojo.User。通过上述配置,我们可以在 XML 映射文件中使用 <User> 来引用该类,而无需使用完整的类名 com.yjg.mybatis.pojo.User

配置文件完整内容

<?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配置内容时,有顺序限制-->
<configuration>
      <!--读取jdbc.properties配置文件-->
 <properties resource="jdbc.properties"></properties>
<settings>
    <!--配置sql日志打印-->
    <setting name="logImpl" value="STDOUT_LOGGING"/>
    <!--下划线驼峰映射stu_name映射stuName-->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
    <!--设置映射类型别名-->
    <typeAliases>
       <!--设置pojo包下的类型别名-->
        <package name="com.yjg.mybatis.pojo"/>
    </typeAliases>
    <!--mybatis环境,default属性指定一个环境-->
    <environments default="development">
        <!--id属性自定义的环境唯一标识符-->
        <environment id="development">
            <!--指定使用jdbc事务管理-->
            <transactionManager type="JDBC"/>
            <!--使用mybatis内部带连接池功能的数据源-->
            <dataSource type="POOLED">
                <!--获取配置驱动-->
                <property name="driver" value="${driver}"/>
                <!--获取配置url-->
                <property name="url" value="${url}"/>
                <!--获取配置账号-->
                <property name="username" value="${username}"/>
                <!--获取配置密码-->
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--映射器,映射器的 XML 映射文件包含了 SQL 代码和映射定义信息-->
    <mappers>
        <mapper resource="com/yjg/mybatis/mapper/StudentMapper.xml"/>
    </mappers>
</configuration>

编写代码

数据库代码

CREATE TABLE `student` (
  `stu_id` int(11) NOT NULL AUTO_INCREMENT,
  `stu_name` varchar(255) DEFAULT NULL,
  `stu_age` varchar(255) DEFAULT NULL,
  `stu_salary` decimal(10,2) DEFAULT NULL,
  `stu_birth` date DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`stu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

数据显示

实体类

import lombok.Data;
import java.util.Date;
@Data
//@Alias 注解是 MyBatis 提供的一个注解,用于为类或接口指定一个别名。
//@Alias("s")
public class Student {
    private Integer stuId;
    private String  stuName;
    private Integer stuAge;
    private Double  stuSalary;
    private Date  stuBirth;
    private Date createTime;
}

接口文件

public interface StudentMapper {
    //插入用户
    int insertStudent();
    //查询全部类型
    List<Student> queryStudent();
    //通过id查询学生,传递单个参数
    Student queryStudentById(Integer id);
   /*
   通过名字和age进行查询
     1.方法中的参数会将存储到map集合中,key值设置为arg0 , arg1.....或者设置为param1, param2. ...
     2.sql语句中是通过#{map的key值}来获取到参数值,例如#{arg0}
     3.可以通过@Param注解更改参数在map中的key
     @Param("name")可以修改名称
   */
    Student queryStudentByNameAndAge(@Param("name") String name,@Param("age") int age);
}

映射文件

<?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.yjg.mybatis.mapper.StudentMapper">
    <insert id="insertStudent">
        insert into student values(null, 'zhangsan',18,' 200','2020-01-01 ' , now())
    </insert>
    <select id="queryStudent" parameterType="integer" resultType="Student">
              select * from student;
    </select>
      <!--拿到方法的形参,单个参数,#{id}-->
    <select id="queryStudentById" resultType="Student">
          select * from student where stu_id=#{id}
    </select>
     <!--拿到参数的值,多个参数的时候-->
    <select id="queryStudentByNameAndAge" resultType="student">
          select * from student where stu_name=#{name} and stu_age=#{age};
    </select>
</mapper>

在 MyBatis 中,类型别名是对大小写不敏感的。无论是使用大写、小写或混合大小写,都可以正确地引用对应的实体类。如果使用使用 <typeAliases> 元素来设置映射类型别名。将包名 com.yjg.mybatis.pojo 下的 Student 类设置为类型别名,那么在映射文件中使用 student 或 Student 都是可以的,并且都会正确地映射到对应的实体类。

映射文件参数

  • 使用 #{paramName} 占位符:在 SQL 语句中使用 #{paramName} 占位符来表示参数。当调用映射器接口方法时,MyBatis 将自动解析 SQL 语句,并根据方法参数的名称和注解来匹配占位符和参数,此时MyBatis 使用预编译的方式执行 SQL 语句,将实际的参数值填充到占位符处,并执行查询或更新操作。

  • 使用 ${paramName} 占位符:在 SQL 语句中使用 ${paramName} 占位符来表示参数。这种方式不会进行预编译,而是直接将参数的值替换到 SQL 语句中。存在 SQL 注入的风险,应谨慎使用。

  • 使用 @Param 注解:在方法参数上使用 @Param("paramName") 注解来指定参数的名称。在映射文件中可以通过参数名称来引用相应的参数

  • 在 <select><update><insert><delete> 等操作标签中,可以通过 parameterType 属性来明确指定传入参数的类型。该属性用于告诉 MyBatis 针对具体操作需要接收哪种类型的参数。

测试方法

public class Test1 {
    SqlSession sqlSession;
    @Before
    public void test1() throws Exception{
        InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory build = builder.build(inputStream);
       sqlSession = build.openSession(true);
    }
     //    添加数据
    @Test
    public void test2(){
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        int i = mapper.insertStudent();
        System.out.println(i);
    }
     //    查询所有学生
    @Test
    public void test3(){
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List<Student> students = mapper.queryStudent();
        students.forEach(System.out::println);
    }
    //    根据id查询
    @Test
    public void test4(){
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        Student student = mapper.queryStudentById(2);
        System.out.println(student);
    }
    //    根据多个参数查询
    @Test
    public void test5(){
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        Student student = mapper.queryStudentByNameAndAge("kun", 18);
        System.out.println(student);
    }
}

 到此这篇关于Mybatis参数处理的几种方法小结的文章就介绍到这了,更多相关Mybatis参数处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • SpringCloud gateway+zookeeper实现网关路由的详细搭建

    SpringCloud gateway+zookeeper实现网关路由的详细搭建

    这篇文章主要介绍了SpringCloud gateway+zookeeper实现网关路由,本文通过图文实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 基于Java语言开发的一个高效的敏感词过滤工具

    基于Java语言开发的一个高效的敏感词过滤工具

    这篇文章主要为大家详细介绍了如何基于Java语言开发的一个高效的敏感词过滤工具,文中的示例代码简洁易懂,有需要的小伙伴可以参考一下
    2025-01-01
  • Java实现导出Word文档的示例代码

    Java实现导出Word文档的示例代码

    poi-tl是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库,你可以非常方便的加入到你的项目中。本文就利用它实现导出Word文档功能,需要的可以参考一下
    2023-02-02
  • Mybatis-Plus读写Mysql的Json字段的操作代码

    Mybatis-Plus读写Mysql的Json字段的操作代码

    这篇文章主要介绍了Mybatis-Plus读写Mysql的Json字段的操作代码,文中通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • SpringBoot中的五种对静态资源的映射规则的实现

    SpringBoot中的五种对静态资源的映射规则的实现

    这篇文章主要介绍了SpringBoot中的五种对静态资源的映射规则的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 一文让你彻底明白Java中的值传递和引用传递

    一文让你彻底明白Java中的值传递和引用传递

    这篇文章主要给大家介绍了关于Java中值传递和引用传递的相关资料,值传递是指在调用函数时将实际参数复制一份传递到函数中,引用传递是指在调用函数时将实际参数的引用直接传递到函数中,需要的朋友可以参考下
    2023-10-10
  • Java8新特性之字符串去重介绍

    Java8新特性之字符串去重介绍

    这篇文章主要介绍了Java8新特性之字符串去重介绍,新的字符串去重特性可以帮助减少应用中String对象的内存占用,目前该特性只适用于G1垃圾收集器,并且默认不被开启,需要的朋友可以参考下
    2014-09-09
  • java+jdbc+mysql+socket搭建局域网聊天室

    java+jdbc+mysql+socket搭建局域网聊天室

    这篇文章主要为大家详细介绍了java+jdbc+mysql+socket搭建局域网聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • 深入理解happens-before和as-if-serial语义

    深入理解happens-before和as-if-serial语义

    本文大部分整理自《Java并发编程的艺术》,温故而知新,加深对基础的理解程度。下面可以和小编来一起学习下
    2019-05-05
  • Java中实现代码优化的技巧分享

    Java中实现代码优化的技巧分享

    这篇文章主要跟大家谈谈优化这个话题,那么我们一起聊聊Java中如何实现代码优化这个问题,小编这里有几个实用的小技巧分享给大家,需要的可以参考一下
    2022-08-08

最新评论