IDEA Java Mybatis传参

本文介绍了Mybatis查询数据库时的五种传参方式,重点讲解了常用的命名传参和对象传参,同时提到了不常用的简单类型传参、位置传参和Map传参及其优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis查询数据库进行传参的方式有5种,常用的有两种,其他三种都不常用。现在从简单的一一介绍一下。

第一种:传一个简单类型的参数。不常用。

    注:mybatis把java的基本数据类型和String都叫简单类型。

语法: #{任意字符}

接口中:

 

 public Student selectStudentById(int id);

 

mapper文件中:

 <select id="selectStudentById" resultType="com.gx.pojo.Student">

    select * from student where student_id=#{id}

</select>
 

测试:

public void testSelectStudentById(){

    //获取SqlSession对象

    SqlSession sqlSession = MyBatisUtil.getSqlSession();

    //使用mybatis动态代理

    StudentDao studentDao = sqlSession.getMapper(StudentDao.class);

    //执行sql,查询student_id为1003的学生

    Student student = studentDao.selectStudentById(1003);

    //输出

    System.out.println("一个简单类型传参查询的学生="+student);

}
 

结果:

第二种:命名传参,使用到@Param,在接口方法中使用。

    语法:@Param("myName") String name
    接口:
public List<Student> selectMultiParam(@Param("myName") String name, @Param("myAge") int age);

mapper文件:

<select id="selectMultiParam" resultType="com.gx.pojo.Student">

    select * from student where name=#{myName} or age=#{myAge} 

</select>

测试:

public void testSelectMultiParam(){

    //获取SqlSession对象

    SqlSession sqlSession = MyBatisUtil.getSqlSession();

    //使用mybatis动态代理

    StudentDao studentDao = sqlSession.getMapper(StudentDao.class);

    //执行sql

    List<Student> listStudent = studentDao.selectMultiParam("鲁班七号",17);

    //关闭SqlSession

    sqlSession.close();

    //遍历

    for (Student stu : listStudent) {

        System.out.println("命名参数查询的学生="+stu);

    }

}
 

结果:

第三种:使用java对象

语法:#{对象属性名称}

接口:

     
public List<Student> selectMultiObject(Student student);

mapper文件:有两种方式,一种详细写法(不常用),还有一种是简化写法(常用)代码下注释有。

注:javaType:Java对象的全限定名称;jdbcType:数据库对应类型名称

<select id="selectMultiObject" resultType="com.gx.pojo.Student">

    select * from student where

              /*name=#{name,javaType=java.lang.String,jdbcType=VARCHAR} or

                  age=#{age,javaType=java.lang.Integer,jdbcType=INTEGER}*/

                  name=#{name} or age=#{age}

     </select>

 

测试:

public void testSelectMultiObject(){
    //获取SqlSession对象
    SqlSession sqlSession = MyBatisUtil.getSqlSession();
    //使用mybatis动态代理
    StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
    //定义参数
    Student student = new Student();
    student.setName("鲁班大师");
    student.setAge(18);
    //执行sql
    List<Student> listStudent = studentDao.selectMultiObject(student);
    //关闭SqlSession
    sqlSession.close();
    //遍历
    for(Student stu : listStudent){
        System.out.println("对象传参查询的学生="+stu);
    }
}

 

结果:

第四种: 位置传参(按位置获取参数)

语法:

    mybatis.3.4版本以前#{0},#{1}
        mybatis.3.4版本以后#{arg0},#{arg1}

例如:#{0}对应name

 

接口:

public List<Student> selectMultiPosition(String name,Integer age);
 

mapper文件:

<select id="selectMultiPosition" resultType="com.gx.pojo.Student">

    select * from student where name=#{arg0} or age=#{arg1}

</select>
 

测试:

public void testSelectMultiPosition(){

    //获取SqlSession对象

    SqlSession sqlSession = MyBatisUtil.getSqlSession();

    //使用mybatis动态代理

    StudentDao studentDao = sqlSession.getMapper(StudentDao.class);

    //执行sql

    List<Student> listStudent = studentDao.selectMultiPosition("鲁班七号",17);

    //关闭SqlSession

    sqlSession.close();

    //遍历

    for(Student stu : listStudent){

        System.out.println("位置传参查询的学生="+stu);

    }

}

结果:

第五种:Map 传参

语法:Map<String,Object> map

接口:

     
public List<Student> selectMultiMap(Map<String,Object> map);

mapper文件:

<select id="selectMultiMap" resultType="com.gx.pojo.Student">

    select * from student where name=#{name} or age=#{age}

</select>

测试:

public void testSelectMultiMap(){

    //获取SqlSession对象

    SqlSession sqlSession = MyBatisUtil.getSqlSession();

    //使用mybatis动态代理

    StudentDao studentDao = sqlSession.getMapper(StudentDao.class);

    //定义查询条件

    Map<String,Object> map = new HashMap<>();

    map.put("name","鲁班七号");

    map.put("age",17);

    //执行sql

    List<Student> listStudent = studentDao.selectMultiMap(map);

    //关闭SqlSession

    sqlSession.close();

    //遍历

    for(Student stu : listStudent){

        System.out.println("Map传参查询的学生="+stu);

    }

}

结果:

    总结:

        两种常用传参方法:命名传参、对象传参

        三种不常用的方法:

1)、一个简单参数传参方式

缺点:因为名字可以不一样,所以容易忘记

2)、位置传参

缺点:容易混淆参数位置

3)、Map传参

缺点:可读性差

### 关于 IntelliJ IDEA 中的最大页数设置 在 IntelliJ IDEA 中,最大页数的设置通常与分页查询功能相关联。这种配置可能涉及多个方面,包括前端 AJAX 请求中的参数设定以及后端框架(如 MyBatis 或其他 ORM 工具)的相关配置。 #### 1. **前端 AJAX 请求中的最大页数设置** 在使用 AJAX 实现分页查询时,可以通过调整请求参数来控制每页显示的数据量和总页数。例如,在发送 AJAX 请求时,可以指定 `pageSize` 和 `pageNum` 参数[^1]: ```javascript $.ajax({ url: '/api/getData', // 后端接口地址 type: 'GET', data: { pageNum: currentPage, // 当前页码 pageSize: rowsPerPage, // 每页显示条数 maxPages: maxPageLimit // 设置最大页数限制 }, success: function(response) { console.log('数据加载成功:', response); } }); ``` 上述代码中,`maxPages` 是自定义的一个字段,用于递给服务器以限制返回的最大页数。 --- #### 2. **后端 MyBatis 的最大页数设置** 如果项目中使用了 MyBatis 并集成了 PageHelper 插件,则可以在 SQL 查询之前通过调用 `PageHelper.startPage()` 方法动态设置分页参数[^3]。同时,也可以通过全局配置的方式限定最大页数。 ##### (1)MyBatis 配置文件中的插件配置 在 `mybatis-config.xml` 文件中添加如下插件配置: ```xml <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!-- 可在此处添加额外属性 --> <property name="reasonable" value="true"/> <property name="supportMethodsArguments" value="true"/> <property name="params" value="pageNum=page;pageSize=limit;"/> </plugin> </plugins> ``` ##### (2)Java 代码中的动态分页设置 在 Java 代码中,可以通过以下方式设置分页逻辑并限制最大页数: ```java import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; public PageInfo<?> getPageData(int pageNum, int pageSize, int maxPageLimit) { if (pageNum > maxPageLimit) { // 如果当前页超出最大页数限制 throw new IllegalArgumentException("页码超出范围"); } PageHelper.startPage(pageNum, pageSize); // 开始分页 List<?> dataList = yourMapper.selectYourData(); // 执行查询 return new PageInfo<>(dataList); // 返回分页信息 } ``` --- #### 3. **Maven 仓库配置的影响** 虽然 Maven 仓库的配置主要影响项目的依赖管理,但它也可能间接影响分页功能的实现。例如,当某些分页相关的库未被正确引入时,可能导致运行时错误。因此,建议按照以下步骤检查 Maven 配置[^2]: - 进入 IntelliJ IDEA 的 Settings 页面。 - 定位到 Maven 配置区域,确保路径已更改为非 C 盘目录(如 D:\Maven\repository)。 - 将必要的分页插件(如 PageHelper)加入 `pom.xml` 文件中: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.0</version> </dependency> ``` --- #### 4. **IntelliJ IDEA 编译缓存问题** 需要注意的是,部分开发者可能会遇到因类文件未及时更新而导致的功能异常[^4]。为了避免此类问题,可在每次修改代码后执行以下操作之一: - 清理并重建项目:`Build -> Rebuild Project`。 - 刷新 Maven 依赖:右键单击 `pom.xml` 文件,选择 `Reload from Disk`。 --- ### 总结 综上所述,IntelliJ IDEA 中的最大页数设置需综合考虑前后端的具体需求和技术栈特点。无论是通过 AJAX 动态传参还是借助 MyBatis 的 PageHelper 插件,都可以灵活实现这一目标。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值