jsp 语言 JSP 与 MyBatis 实现动态 SQL 参数绑定示例

JSP阿木 发布于 12 天前 3 次阅读


JSP 与 MyBatis 实现动态 SQL 参数绑定示例

JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,从而实现动态内容的生成。MyBatis 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在Java Web开发中,JSP与MyBatis的结合使用可以大大提高开发效率。本文将围绕JSP与MyBatis实现动态SQL参数绑定进行探讨,并通过一个示例来展示如何实现这一功能。

环境准备

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

1. JDK 1.8 或更高版本

2. Tomcat 8.5 或更高版本

3. MySQL 5.7 或更高版本

4. Maven 3.6 或更高版本

项目结构

以下是项目的目录结构:


mybatis-jsp-example


├── src


│ ├── main


│ │ ├── java


│ │ │ └── com


│ │ │ └── example


│ │ │ ├── controller


│ │ │ │ └── UserListController.java


│ │ │ ├── mapper


│ │ │ │ └── UserMapper.java


│ │ │ ├── model


│ │ │ │ └── User.java


│ │ │ └── service


│ │ │ └── UserService.java


│ │ └── resources


│ │ ├── mapper


│ │ │ └── UserMapper.xml


│ │ └── web.xml


│ └── test


│ └── java


│ └── com


│ └── example


│ └── UserMapperTest.java


└── pom.xml


1. 创建实体类

我们需要创建一个实体类`User`,用于表示用户信息。

java

package com.example.model;

public class User {


private Integer id;


private String name;


private Integer age;

// 省略getter和setter方法


}


2. 创建Mapper接口

接下来,我们需要创建一个Mapper接口`UserMapper`,用于定义数据库操作方法。

java

package com.example.mapper;

import com.example.model.User;


import java.util.List;

public interface UserMapper {


List<User> selectUsersByAgeRange(Integer minAge, Integer maxAge);


}


3. 创建Mapper XML文件

在`resources/mapper`目录下创建`UserMapper.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.UserMapper">


<select id="selectUsersByAgeRange" resultType="com.example.model.User">


SELECT FROM users WHERE age BETWEEN {minAge} AND {maxAge}


</select>


</mapper>


4. 创建Service层

在`com.example.service`包下创建`UserService`类,用于封装业务逻辑。

java

package com.example.service;

import com.example.mapper.UserMapper;


import com.example.model.User;


import org.apache.ibatis.session.SqlSession;


import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

public class UserService {


private SqlSessionFactory sqlSessionFactory;

public UserService(SqlSessionFactory sqlSessionFactory) {


this.sqlSessionFactory = sqlSessionFactory;


}

public List<User> getUsersByAgeRange(Integer minAge, Integer maxAge) {


try (SqlSession session = sqlSessionFactory.openSession()) {


UserMapper mapper = session.getMapper(UserMapper.class);


return mapper.selectUsersByAgeRange(minAge, maxAge);


}


}


}


5. 创建Controller层

在`com.example.controller`包下创建`UserListController`类,用于处理用户请求。

java

package com.example.controller;

import com.example.model.User;


import com.example.service.UserService;


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 java.util.List;

@Controller


public class UserListController {


@Autowired


private UserService userService;

@GetMapping("/users")


public String listUsers(Model model) {


List<User> users = userService.getUsersByAgeRange(20, 30);


model.addAttribute("users", users);


return "userList";


}


}


6. 创建JSP页面

在`src/main/webapp`目录下创建`userList.jsp`页面,用于展示用户信息。

jsp

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


<html>


<head>


<title>User List</title>


</head>


<body>


<h1>User List</h1>


<table border="1">


<tr>


<th>ID</th>


<th>Name</th>


<th>Age</th>


</tr>


<c:forEach items="${users}" var="user">


<tr>


<td>${user.id}</td>


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


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


</tr>


</c:forEach>


</table>


</body>


</html>


7. 配置web.xml

在`src/main/webapp/WEB-INF`目录下创建`web.xml`文件,用于配置Spring和MyBatis。

xml

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

<context-param>


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


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


</context-param>

<listener>


<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>


</listener>


</web-app>


8. 配置Spring和MyBatis

在`src/main/resources`目录下创建`applicationContext.xml`文件,用于配置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"/>


<context:property-placeholder location="classpath:db.properties"/>

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


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


<property name="mapperLocations" value="classpath:mapper/.xml"/>


</bean>

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


<property name="driverClassName" value="${jdbc.driver}"/>


<property name="url" value="${jdbc.url}"/>


<property name="username" value="${jdbc.username}"/>


<property name="password" value="${jdbc.password}"/>


</bean>


</beans>


9. 配置数据库连接

在`src/main/resources`目录下创建`db.properties`文件,用于配置数据库连接信息。

properties

jdbc.driver=com.mysql.cj.jdbc.Driver


jdbc.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC


jdbc.username=root


jdbc.password=root


10. 运行项目

启动Tomcat服务器,访问`http://localhost:8080/mybatis-jsp-example/users`,即可看到动态生成的用户列表。

总结

本文通过一个示例展示了如何使用JSP和MyBatis实现动态SQL参数绑定。在实际项目中,我们可以根据需求调整SQL语句和参数,实现更丰富的动态查询功能。希望本文对您有所帮助。