Mapper接口,Mapper映射文件,Service接口和实现类,Controller类,jsp页面如何编写
时间: 2024-06-17 16:02:48 浏览: 273
Mapper接口是MyBatis框架中的一种接口,用于定义数据库操作的方法。在Mapper接口中,可以定义增删改查等数据库操作的方法,并通过注解或XML配置文件与对应的SQL语句进行映射。
Mapper映射文件是MyBatis框架中用于配置SQL语句和映射关系的XML文件。在Mapper映射文件中,可以定义SQL语句、参数映射、结果集映射等内容。通过Mapper映射文件,可以将Java对象与数据库表进行映射,实现数据的读写操作。
Service接口和实现类是一种常见的设计模式,用于将业务逻辑与数据访问逻辑进行分离。Service接口定义了业务逻辑的方法,而Service实现类则实现了这些方法并调用Mapper接口中定义的数据库操作方法来完成数据的读写操作。
Controller类是Spring MVC框架中的一种类,用于处理用户请求并返回响应结果。Controller类通过注解或配置文件将请求映射到对应的处理方法,并调用Service接口中定义的业务逻辑方法来处理请求。
JSP页面是JavaServer Pages的缩写,是一种用于动态生成HTML页面的技术。在JSP页面中,可以使用Java代码和JSP标签来实现动态内容的生成和展示。JSP页面通常用于前端展示和与用户交互,可以通过Controller类调用Service接口中的方法来获取数据并展示在页面上。
相关问题
创建一个 Maven 项目,添加所需的依赖,包括 Spring、SpringMVC、MyBatis、CXF 等。 配置 Spring 配置文件,包括数据源和 MyBatis 的配置、事务管理器的配置、CXF 的配置等。 创建一个实体类和相应的 Mapper 接口,使用 MyBatis 实现数据的 CRUD 操作。 创建一个 Service 层,实现业务逻辑,调用 Mapper 层的方法进行数据操作。 创建一个 Controller 层,使用 SpringMVC 实现请求的映射和响应的处理。 配置 CXF 的服务端和客户端,实现 WebService 的发布和调用。 创建一个 JSP 页面,使用 JSTL 标签库和 EL 表达式实现页面的渲染。 部署项目到 Tomcat 等 Web 容器中,访问 JSP 页面,测试项目是否正常运行。具体代码
由于这个项目比较复杂,我无法在这里给出完整的代码。但是,我可以提供一些代码片段来帮助你理解每个步骤的实现方式。
1. Maven 项目配置
在 pom.xml 文件中添加以下依赖:
```xml
<dependencies>
<!-- Spring Framework -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- CXF -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-core</artifactId>
<version>3.3.6</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.3.6</version>
</dependency>
</dependencies>
```
2. Spring 配置文件
在 applicationContext.xml 文件中添加以下配置:
```xml
<!-- 数据源配置 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- MyBatis 配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="com.example.demo.entity" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory" />
</bean>
<!-- 事务管理器配置 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- CXF 配置 -->
<jaxws:server id="demoService" address="/DemoService">
<jaxws:serviceBean>
<bean class="com.example.demo.service.impl.DemoServiceImpl" />
</jaxws:serviceBean>
</jaxws:server>
```
3. 实体类和 Mapper 接口
创建一个实体类 Demo,代码如下:
```java
public class Demo {
private Integer id;
private String name;
private Integer age;
// getter 和 setter 略
}
```
创建一个 Mapper 接口 DemoMapper,代码如下:
```java
public interface DemoMapper {
void insert(Demo demo);
void update(Demo demo);
void deleteById(Integer id);
Demo selectById(Integer id);
List<Demo> selectAll();
}
```
使用 MyBatis 的 XML 文件实现 Mapper 接口的方法,代码如下:
```xml
<mapper namespace="com.example.demo.mapper.DemoMapper">
<insert id="insert" parameterType="com.example.demo.entity.Demo">
INSERT INTO demo(name, age) VALUES(#{name}, #{age})
</insert>
<update id="update" parameterType="com.example.demo.entity.Demo">
UPDATE demo SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete id="deleteById" parameterType="java.lang.Integer">
DELETE FROM demo WHERE id = #{id}
</delete>
<select id="selectById" parameterType="java.lang.Integer" resultType="com.example.demo.entity.Demo">
SELECT * FROM demo WHERE id = #{id}
</select>
<select id="selectAll" resultType="com.example.demo.entity.Demo">
SELECT * FROM demo
</select>
</mapper>
```
4. Service 层
创建一个 Service 接口 DemoService,代码如下:
```java
public interface DemoService {
void addDemo(Demo demo);
void updateDemo(Demo demo);
void deleteDemo(Integer id);
Demo getDemoById(Integer id);
List<Demo> getAllDemo();
}
```
创建一个 Service 实现类 DemoServiceImpl,代码如下:
```java
@Service
@Transactional
public class DemoServiceImpl implements DemoService {
@Autowired
private DemoMapper demoMapper;
@Override
public void addDemo(Demo demo) {
demoMapper.insert(demo);
}
@Override
public void updateDemo(Demo demo) {
demoMapper.update(demo);
}
@Override
public void deleteDemo(Integer id) {
demoMapper.deleteById(id);
}
@Override
public Demo getDemoById(Integer id) {
return demoMapper.selectById(id);
}
@Override
public List<Demo> getAllDemo() {
return demoMapper.selectAll();
}
}
```
5. Controller 层
创建一个 Controller 类 DemoController,代码如下:
```java
@Controller
@RequestMapping("/demo")
public class DemoController {
@Autowired
private DemoService demoService;
@RequestMapping(value = "/addDemo", method = RequestMethod.POST)
@ResponseBody
public String addDemo(@RequestBody Demo demo) {
demoService.addDemo(demo);
return "success";
}
@RequestMapping(value = "/updateDemo", method = RequestMethod.POST)
@ResponseBody
public String updateDemo(@RequestBody Demo demo) {
demoService.updateDemo(demo);
return "success";
}
@RequestMapping(value = "/deleteDemo/{id}", method = RequestMethod.GET)
@ResponseBody
public String deleteDemo(@PathVariable Integer id) {
demoService.deleteDemo(id);
return "success";
}
@RequestMapping(value = "/getDemoById/{id}", method = RequestMethod.GET)
@ResponseBody
public Demo getDemoById(@PathVariable Integer id) {
return demoService.getDemoById(id);
}
@RequestMapping(value = "/getAllDemo", method = RequestMethod.GET)
@ResponseBody
public List<Demo> getAllDemo() {
return demoService.getAllDemo();
}
}
```
6. CXF 配置
在 applicationContext.xml 文件中添加以下配置:
```xml
<jaxws:client id="demoClient" serviceClass="com.example.demo.service.DemoService"
address="http://localhost:8080/DemoService" />
<bean id="demoService" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="com.example.demo.service.DemoService" />
<property name="address" value="http://localhost:8080/DemoService" />
</bean>
```
7. JSP 页面
创建一个 JSP 页面 demo.jsp,代码如下:
```html
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Demo Page</title>
</head>
<body>
<h1>Demo Page</h1>
<form id="demoForm">
<input type="text" name="name" placeholder="name" />
<input type="text" name="age" placeholder="age" />
<button type="button" onclick="addDemo()">Add</button>
</form>
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Age</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<c:forEach items="${demoList}" var="demo">
<tr>
<td>${demo.id}</td>
<td>${demo.name}</td>
<td>${demo.age}</td>
<td>
<button type="button" onclick="editDemo(${demo.id})">Edit</button>
<button type="button" onclick="deleteDemo(${demo.id})">Delete</button>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<script>
function addDemo() {
var name = $("input[name='name']").val();
var age = $("input[name='age']").val();
$.ajax({
url: "${pageContext.request.contextPath}/demo/addDemo",
type: "POST",
contentType: "application/json",
data: JSON.stringify({name: name, age: age}),
success: function(result) {
location.reload();
}
});
}
function editDemo(id) {
// TODO: 实现编辑逻辑
}
function deleteDemo(id) {
$.ajax({
url: "${pageContext.request.contextPath}/demo/deleteDemo/" + id,
type: "GET",
success: function(result) {
location.reload();
}
});
}
</script>
</body>
</html>
```
8. 部署项目
将项目打包成 WAR 文件,部署到 Tomcat 等 Web 容器中,启动 Tomcat,访问 demo.jsp 页面,测试项目是否正常运行。
以上是一个简单的示例,具体实现方式可能会因为需求的不同而有所差异。
1、创建用户表,插入测试数据 2、创建web工程,导入所有依赖 3、创建项目包结构,dao、service、controller、entity 4、创建用户实体类 5、创建用户Dao接口,在接口中声明查询所有用户的方法 6、创建用户Service接口和实现类 7、创建用户Contorller类 8、编写项目的配置文件,UserMapper.xml、applicationContext.xml、spring-mvc.xml、web.xml 9、部署项目,并使用postman测试查询所有用户的方法
好的,以下是具体的步骤:
1. 创建用户表,插入测试数据
首先,需要在数据库中创建一个用户表,例如:
```sql
CREATE TABLE user (
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(255) NOT NULL,
password varchar(255) NOT NULL,
email varchar(255) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
然后,插入一些测试数据:
```sql
INSERT INTO user (username, password, email) VALUES ('user1', 'password1', 'user1@example.com');
INSERT INTO user (username, password, email) VALUES ('user2', 'password2', 'user2@example.com');
INSERT INTO user (username, password, email) VALUES ('user3', 'password3', 'user3@example.com');
```
2. 创建web工程,导入所有依赖
在IDE中创建一个新的web项目,然后在项目的pom.xml文件中添加所需的依赖,例如:
```xml
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<!-- 其他依赖 -->
</dependencies>
```
3. 创建项目包结构,dao、service、controller、entity
在src/main/java目录下创建以下包结构:
- dao:存放数据访问层的接口和XML文件
- service:存放服务层的接口和实现类
- controller:存放控制器类
- entity:存放实体类
4. 创建用户实体类
在entity包下创建User实体类,例如:
```java
public class User {
private Integer id;
private String username;
private String password;
private String email;
// getter和setter方法
}
```
5. 创建用户Dao接口,在接口中声明查询所有用户的方法
在dao包下创建UserDao接口,例如:
```java
public interface UserDao {
List<User> findAll();
}
```
然后,在dao包下创建UserMapper.xml文件,实现findAll方法的SQL语句,例如:
```xml
<mapper namespace="com.example.dao.UserDao">
<select id="findAll" resultType="com.example.entity.User">
SELECT * FROM user
</select>
</mapper>
```
6. 创建用户Service接口和实现类
在service包下创建UserService接口和UserServiceImpl实现类,例如:
```java
public interface UserService {
List<User> findAll();
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public List<User> findAll() {
return userDao.findAll();
}
}
```
7. 创建用户Contorller类
在controller包下创建UserController类,例如:
```java
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("")
public List<User> findAll() {
return userService.findAll();
}
}
```
8. 编写项目的配置文件,UserMapper.xml、applicationContext.xml、spring-mvc.xml、web.xml
在src/main/resources目录下创建以下配置文件:
- UserMapper.xml:数据访问层的映射文件
- applicationContext.xml:Spring的配置文件
- spring-mvc.xml:Spring MVC的配置文件
- web.xml:Web应用的部署描述文件
具体的配置可以参考以下示例:
UserMapper.xml:
```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.dao.UserDao">
<select id="findAll" resultType="com.example.entity.User">
SELECT * FROM user
</select>
</mapper>
```
applicationContext.xml:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<!-- 数据源配置 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC"/>
<property name="username" value="root" />
<property name="password" value="123456" />
</bean>
<!-- MyBatis的SqlSessionFactory配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:com/example/dao/*Mapper.xml" />
</bean>
<!-- MyBatis的MapperScannerConfigurer配置 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.dao" />
</bean>
<!-- Service和Dao的自动扫描 -->
<context:component-scan base-package="com.example.service com.example.dao" />
</beans>
```
spring-mvc.xml:
```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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 自动扫描控制器 -->
<context:component-scan base-package="com.example.controller" />
<!-- 配置视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 配置静态资源访问 -->
<mvc:resources mapping="/static/**" location="/static/" />
<!-- 配置DispatcherServlet -->
<mvc:annotation-driven />
</beans>
```
web.xml:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>SpringMVCExample</display-name>
<!-- 配置DispatcherServlet -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
```
9. 部署项目,并使用postman测试查询所有用户的方法
将项目部署到Tomcat服务器上,启动Tomcat服务器,然后使用postman等工具测试查询所有用户的方法,例如:
- URL:http://localhost:8080/users
- Method:GET
- Header:Content-Type: application/json
- Response:
```json
[
{
"id": 1,
"username": "user1",
"password": "password1",
"email": "user1@example.com"
},
{
"id": 2,
"username": "user2",
"password": "password2",
"email": "user2@example.com"
},
{
"id": 3,
"username": "user3",
"password": "password3",
"email": "user3@example.com"
}
]
```
以上就是一个简单的Spring MVC + MyBatis项目的搭建过程。
阅读全文