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

JSP阿木 发布于 25 天前 5 次阅读


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

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

环境准备

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

1. JDK 1.8及以上版本

2. MySQL数据库

3. Tomcat服务器

4. MyBatis框架

项目结构

以下是项目的目录结构:


src/


|-- main/


| |-- java/


| | |-- com/


| | | |-- example/


| | | | |-- controller/


| | | | | |-- DynamicTableController.java


| | | | |-- mapper/


| | | | | |-- DynamicTableMapper.java


| | | | |-- model/


| | | | | |-- DynamicTable.java


| | | | |-- service/


| | | | | |-- DynamicTableService.java


| | | | |-- service/impl/


| | | | | |-- DynamicTableServiceImpl.java


| |-- resources/


| | |-- mybatis-config.xml


| | |-- mapper/


| | | |-- DynamicTableMapper.xml


| |-- web.xml


|-- webapp/


| |-- WEB-INF/


| | |-- views/


| | | |-- dynamicTable.jsp


| |-- index.jsp


1. 创建数据库表

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

sql

CREATE TABLE dynamic_table (


id INT PRIMARY KEY AUTO_INCREMENT,


name VARCHAR(50),


age INT


);


2. 创建实体类

在`com.example.model`包下创建一个名为`DynamicTable.java`的实体类,用于映射数据库表。

java

package com.example.model;

public class DynamicTable {


private Integer id;


private String name;


private Integer age;

// 省略getter和setter方法


}


3. 创建MyBatis Mapper接口

在`com.example.mapper`包下创建一个名为`DynamicTableMapper.java`的Mapper接口,用于定义动态表名查询的方法。

java

package com.example.mapper;

import com.example.model.DynamicTable;


import org.apache.ibatis.annotations.Param;


import org.apache.ibatis.annotations.Select;

public interface DynamicTableMapper {


@Select("SELECT FROM ${tableName}")


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


}


4. 创建MyBatis Mapper XML

在`resources/mapper`目录下创建一个名为`DynamicTableMapper.xml`的Mapper 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.model.DynamicTable">


SELECT FROM ${tableName}


</select>


</mapper>


5. 创建Service接口和实现类

在`com.example.service`包下创建一个名为`DynamicTableService.java`的Service接口,用于定义动态表名查询的方法。

java

package com.example.service;

import com.example.model.DynamicTable;


import java.util.List;

public interface DynamicTableService {


List<DynamicTable> selectByTableName(String tableName);


}


在`com.example.service.impl`包下创建一个名为`DynamicTableServiceImpl.java`的Service实现类,用于实现动态表名查询的方法。

java

package com.example.service.impl;

import com.example.mapper.DynamicTableMapper;


import com.example.model.DynamicTable;


import com.example.service.DynamicTableService;


import org.springframework.beans.factory.annotation.Autowired;


import org.springframework.stereotype.Service;

import java.util.List;

@Service


public class DynamicTableServiceImpl implements DynamicTableService {


@Autowired


private DynamicTableMapper dynamicTableMapper;

@Override


public List<DynamicTable> selectByTableName(String tableName) {


return dynamicTableMapper.selectByTableName(tableName);


}


}


6. 创建Controller

在`com.example.controller`包下创建一个名为`DynamicTableController.java`的Controller类,用于处理动态表名查询的请求。

java

package com.example.controller;

import com.example.model.DynamicTable;


import com.example.service.DynamicTableService;


import org.springframework.beans.factory.annotation.Autowired;


import org.springframework.stereotype.Controller;


import org.springframework.ui.Model;


import org.springframework.web.bind.annotation.GetMapping;


import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@Controller


public class DynamicTableController {


@Autowired


private DynamicTableService dynamicTableService;

@GetMapping("/dynamicTable")


public String dynamicTable(@RequestParam("tableName") String tableName, Model model) {


List<DynamicTable> dynamicTables = dynamicTableService.selectByTableName(tableName);


model.addAttribute("dynamicTables", dynamicTables);


return "dynamicTable";


}


}


7. 创建JSP页面

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

jsp

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


<html>


<head>


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


</head>


<body>


<h1>动态表名查询结果</h1>


<table border="1">


<tr>


<th>姓名</th>


<th>年龄</th>


</tr>


<c:forEach items="${dynamicTables}" var="dynamicTable">


<tr>


<td>${dynamicTable.name}</td>


<td>${dynamicTable.age}</td>


</tr>


</c:forEach>


</table>


</body>


</html>


8. 配置web.xml

在`webapp/WEB-INF`目录下创建一个名为`web.xml`的配置文件,用于配置Spring和MyBatis。

xml

<?xml version="1.0" encoding="UTF-8"?>


<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"


xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"


xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee


http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"


version="3.1">


<servlet>


<servlet-name>dispatcher</servlet-name>


<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>


<init-param>


<param-name>contextConfigLocation</param-name>


<param-value>classpath:applicationContext.xml</param-value>


</init-param>


<load-on-startup>1</load-on-startup>


</servlet>


<servlet-mapping>


<servlet-name>dispatcher</servlet-name>


<url-pattern>/</url-pattern>


</servlet-mapping>


</web-app>


9. 配置applicationContext.xml

在`resources`目录下创建一个名为`applicationContext.xml`的Spring配置文件,用于配置Spring和MyBatis。

xml

<?xml version="1.0" encoding="UTF-8"?>


<beans xmlns="http://www.springframework.org/schema/beans"


xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"


xmlns:context="http://www.springframework.org/schema/context"


xsi:schemaLocation="http://www.springframework.org/schema/beans


http://www.springframework.org/schema/beans/spring-beans.xsd


http://www.springframework.org/schema/context


http://www.springframework.org/schema/context/spring-context.xsd">

<!-- 扫描包 -->


<context:component-scan base-package="com.example"/>

<!-- 配置数据源 -->


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">


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


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


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


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


</bean>

<!-- 配置SqlSessionFactory -->


<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">


<property name="dataSource" ref="dataSource"/>


<property name="configLocation" value="classpath:mybatis-config.xml"/>


</bean>

<!-- 配置Mapper扫描器 -->


<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">


<property name="basePackage" value="com.example.mapper"/>


<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>


</bean>


</beans>


10. 配置mybatis-config.xml

在`resources`目录下创建一个名为`mybatis-config.xml`的MyBatis配置文件,用于配置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/test"/>


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


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


</dataSource>


</environment>


</environments>


<mappers>


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


</mappers>


</configuration>


总结

通过以上步骤,我们成功实现了JSP与MyBatis结合的动态表名查询示例。在实际项目中,可以根据需求调整数据库表结构、实体类、Mapper接口、Mapper XML、Service接口和实现类等。希望本文能对您有所帮助。