前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >10. Mybatis 参数处理

10. Mybatis 参数处理

作者头像
捞月亮的小北
发布于 2024-06-25 07:05:55
发布于 2024-06-25 07:05:55
9800
代码可运行
举报
文章被收录于专栏:捞月亮的小北捞月亮的小北
运行总次数:0
代码可运行

环境准备: 创建模块 ,引入相关依赖 和 配置文件 创建数据库表:t_student ​

​ 向数据库表中填充数据 ​

1. 单个简单类型参数

简单类型包括:

  • byte short int long float double char
  • Byte Short Integer Long Float Double Character
  • String
  • java.util.Date
  • java.sql.Date

通过下面所写代码测试得知,简单类型对于mybatis来说都是可以自动类型识别的:

  • 也就是说对于mybatis来说,它是可以自动推断出ps.setXxxx()方法的。ps.setString()还是ps.setInt()。它可以自动推断。

其实SQL映射文件中的配置比较完整的写法是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<select id="selectByName" resultType="student" parameterType="java.lang.String">
  select * from t_student where name = #{name, javaType=String, jdbcType=VARCHAR}
</select>

其中sql语句中的javaType,jdbcType,以及select标签中的parameterType属性,都是用来帮助mybatis进行类型确定的。不过这些配置多数是可以省略的。因为mybatis它有强大的自动类型推断机制。

  • javaType:可以省略
  • jdbcType:可以省略
  • parameterType:可以省略

如果参数只有一个的话,#{} 里面的内容就随便写了。对于 ${} 来说,注意加单引号。

StudentMapper接口 , 需求:根据name查、根据id查、根据birth查、根据sex查

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.north.mybatis.mapper;

import com.north.mybatis.pojo.Student;

import java.util.Date;
import java.util.List;

/**
 * @Author North
 * @Date 2024/4/7
 */
public interface StudentMapper {
    Student selectById(Long id);
    List<Student> selectByName(String name);
    List<Student> selectByBirth(Date birth);
    List<Student> selectBySex(char sex);
}

StudentMapper.xml 映射文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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.north.mybatis.mapper.StudentMapper">
    <select id="selectById" resultType="Student">
        select * from t_student where id = #{id}
    </select>

    <select id="selectByName" resultType="Student">
        select * from t_student where name = #{name}
    </select>

    <select id="selectByBirth" resultType="Student">
        select * from t_student where birth = #{birth}
    </select>

    <select id="selectBySex" resultType="Student">
        select * from t_student where sex = #{sex}
    </select>
</mapper>

测试类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.north.mybatis.test;

import com.north.mybatis.mapper.StudentMapper;
import com.north.mybatis.pojo.Student;
import com.north.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @Author North
 * @Date 2024/4/7
 */
public class StudentMapperTest {
    @Test
    public void testSelectBySex() {
        SqlSession sqlSession = SqlSessionUtil.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List<Student> students = mapper.selectBySex('女');
        students.forEach(student -> System.out.println(student));
        sqlSession.close();
    }

    @Test
    public void testSelectByBirth() throws ParseException {
        SqlSession sqlSession = SqlSessionUtil.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date birth = simpleDateFormat.parse("2001-8-16");
        List<Student> students = mapper.selectByBirth(birth);
        students.forEach(student -> System.out.println(student));
        sqlSession.close();
    }

    @Test
    public void testSelectByName() {
        SqlSession sqlSession = SqlSessionUtil.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List<Student> names = mapper.selectByName("陈平安");
        System.out.println(names);
        sqlSession.close();
    }

    @Test
    public void testSelectById() {
        SqlSession sqlSession = SqlSessionUtil.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        Student student = mapper.selectById(1L);
        System.out.println(student);
        sqlSession.close();
    }
}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java线程池-ThreadPoolExecutor源码解析(基于Java8)
所以需要通过线程池协调多个线程,并实现类似主次线程隔离、定时执行、周期执行等任务.
JavaEdge
2018/05/16
6.8K1
Java线程池-ThreadPoolExecutor源码解析(基于Java8)
如何优雅的使用线程池!!!
在前面使用的例子用,我们已经使用过线程池,基本上就是初始化线程池实例之后,把任务丢进去,等待调度执行就可以了,使用起来非常简单、方便。虽然使用很简单,但线程池涉及到的知识点非常多。需要分析其实现。
用户2242639
2021/06/29
1.6K0
透彻Java线程池的实现原理
其实java线程池的实现原理很简单,说白了就是一个线程集合workerSet和一个阻塞队列workQueue。当用户向线程池提交一个任务(也就是线程)时,线程池会先将任务放入workQueue中。
挨踢小子部落阁
2023/03/15
2850
透彻Java线程池的实现原理
深度解读Java线程池思想及实现
相信很多Java从业者都听说过或者使用过Java的线程池,但真正了解线程池的并不多,这篇文章详细解读Java线程池设计思想及源码实现。线程池是一个非常重要的工具,也是一把双刃剑,解决了很多生产系统运行的问题,但很多线上问题都是因为没有用好线程池导致的,要成为一个好的工程师,还是得比较好地掌握这个知识。
迟恩
2020/07/01
8340
把线程池的底ku扒个底朝天-源码解析
上一篇我们介绍了线程池的使用,这一篇我们接着分析下线程池的实现原理。首先从创建线程池的核心类ThreadPoolExecutor类说起。
码农飞哥
2021/08/18
2860
Java线程池深入理解
之前面试baba系时遇到一个相对简单的多线程编程题,即"3个线程循环输出ADC",自己答的并不是很好,深感内疚,决定更加仔细的学习《并发编程的艺术》一书,到达掌握的强度。(之前两月休息时间都花在了lo
用户1216676
2018/01/24
1.8K0
面试题-关于Java线程池一篇文章就够了
线程池是一种多线程处理形式,处理过程中将任务提交到线程池,任务的执行交由线程池来管理。
程序新视界
2019/12/20
1.9K0
面试题-关于Java线程池一篇文章就够了
Java线程池深度揭秘
Executor 是一个接口(主要用于定义规范),定义了 execute 方法,用于接收 Runnable 对象。
一猿小讲
2020/08/10
3230
Java线程池深度揭秘
从源码看JDK提供的线程池(ThreadPoolExecutor) 一丶什么是线程池二丶ThreadPoolExecutor的使用三丶从源码来看ThreadPoolExecutor
一丶什么是线程池 (1)博主在听到线程池三个字的时候第一个想法就是数据库连接池,回忆一下,我们在学JavaWeb的时候怎么理解数据库连接池的,数据库创建连接和关闭连接是一个比较耗费资源的事情,对于那些数量多且时间短暂的任务,会导致频繁获取和释放连接,这样使得处理事务的效率大大降低,多以我们创建一个连接池,里面放了指定数目的连接,当应用需要数据库连接的时候去里面获取,使用完毕后再放到连接池里,这样就避免了重复的获取连接和释放连接,至于要获取什么样的连接池我们可以根据应用的特征,设置参数来决定。 (2)线程池
MindMrWang
2018/04/19
9840
从源码看JDK提供的线程池(ThreadPoolExecutor)
		一丶什么是线程池二丶ThreadPoolExecutor的使用三丶从源码来看ThreadPoolExecutor
【每周三面】源码角度说说Java线程池
本文来源:http://yeming.me/2016/05/07/threadPool1/
趣学程序-shaofeer
2020/05/18
4360
【每周三面】源码角度说说Java线程池
Java的Executor框架和线程池实现原理
Executor接口是Executor框架中最基础的部分,定义了一个用于执行Runnable的execute方法,它没有实现类只有另一个重要的子接口ExecutorService
全栈程序员站长
2022/11/17
4530
Java的Executor框架和线程池实现原理
Java线程池
线程池的核心实现类,基于ThreadPoolExecutor可以实现满足不同场景的线程池
spilledyear
2020/02/10
9500
相关推荐
Java线程池-ThreadPoolExecutor源码解析(基于Java8)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验