jsp 语言 JSP 与 MyBatis 实现动态表名查询示例

JSP阿木 发布于 2025-07-03 11 次阅读


JSP 与 MyBatis 实现动态表名查询示例

在Java Web开发中,数据库操作是必不可少的环节。随着业务需求的不断变化,动态表名查询成为了一种常见的需求。本文将结合JSP和MyBatis框架,实现一个动态表名查询的示例,帮助读者了解如何在Java Web项目中实现这一功能。

环境准备

在开始编写代码之前,我们需要准备以下环境:

1. JDK 1.8及以上版本

2. MySQL数据库

3. Tomcat服务器

4. MyBatis框架

1. 创建数据库和表

我们需要在MySQL数据库中创建一个名为`dynamic_table`的表,用于存储数据。

sql

CREATE TABLE dynamic_table (


id INT PRIMARY KEY AUTO_INCREMENT,


name VARCHAR(50),


age INT


);


2. 创建实体类

接下来,我们需要创建一个实体类`DynamicTable`,用于映射数据库中的`dynamic_table`表。

java

public class DynamicTable {


private Integer id;


private String name;


private Integer age;

// 省略getter和setter方法


}


3. 创建MyBatis配置文件

在项目的`src/main/resources`目录下创建一个名为`mybatis-config.xml`的配置文件,用于配置MyBatis的相关信息。

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>


<environments default="development">


<environment id="development">


<transactionManager type="JDBC"/>


<dataSource type="POOLED">


<property name="driver" value="com.mysql.jdbc.Driver"/>


<property name="url" value="jdbc:mysql://localhost:3306/your_database"/>


<property name="username" value="your_username"/>


<property name="password" value="your_password"/>


</dataSource>


</environment>


</environments>


<mappers>


<mapper resource="com/example/mapper/DynamicTableMapper.xml"/>


</mappers>


</configuration>


4. 创建Mapper接口和XML文件

在项目的`src/main/java/com/example/mapper`目录下创建一个名为`DynamicTableMapper.java`的接口,用于定义动态表名查询的方法。

java

package com.example.mapper;

import com.example.entity.DynamicTable;


import org.apache.ibatis.annotations.Param;


import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface DynamicTableMapper {


List<DynamicTable> selectByTableName(@Param("tableName") String tableName);


}


在`src/main/resources/com/example/mapper`目录下创建一个名为`DynamicTableMapper.xml`的XML文件,用于配置动态表名查询的SQL语句。

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">


<mapper namespace="com.example.mapper.DynamicTableMapper">


<select id="selectByTableName" resultType="com.example.entity.DynamicTable">


SELECT FROM ${tableName}


</select>


</mapper>


5. 创建JSP页面

在项目的`src/main/webapp`目录下创建一个名为`dynamicTable.jsp`的JSP页面,用于展示动态表名查询的结果。

jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


<html>


<head>


<title>动态表名查询示例</title>


</head>


<body>


<form action="dynamicTable.jsp" method="post">


表名:<input type="text" name="tableName" />


<input type="submit" value="查询" />


</form>


<%


String tableName = request.getParameter("tableName");


if (tableName != null && !tableName.isEmpty()) {


// 获取MyBatis的SqlSession


SqlSession sqlSession = MyBatisUtil.getSqlSession();


try {


// 获取Mapper接口的实例


DynamicTableMapper mapper = sqlSession.getMapper(DynamicTableMapper.class);


// 调用动态表名查询的方法


List<DynamicTable> list = mapper.selectByTableName(tableName);


// 遍历查询结果并展示


for (DynamicTable dynamicTable : list) {


out.println("ID: " + dynamicTable.getId() + ", Name: " + dynamicTable.getName() + ", Age: " + dynamicTable.getAge() + "<br/>");


}


} finally {


sqlSession.close();


}


}


%>


</body>


</html>


6. 编写工具类

在项目的`src/main/java/com/example/utils`目录下创建一个名为`MyBatisUtil.java`的工具类,用于获取MyBatis的SqlSession。

java

package com.example.utils;

import org.apache.ibatis.session.SqlSession;


import org.apache.ibatis.session.SqlSessionFactory;


import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {


private static SqlSessionFactory sqlSessionFactory;

static {


try {


sqlSessionFactory = new SqlSessionFactoryBuilder().build(MyBatisUtil.class.getClassLoader().getResourceAsStream("mybatis-config.xml"));


} catch (Exception e) {


e.printStackTrace();


}


}

public static SqlSession getSqlSession() {


return sqlSessionFactory.openSession();


}


}


总结

本文通过JSP和MyBatis框架,实现了一个动态表名查询的示例。在实际项目中,我们可以根据需求修改实体类、Mapper接口和XML文件,以满足不同的业务场景。希望本文能对您有所帮助。