Eclipse中Maven项目创建 · 配置mappers/UserMapper.xml至Redis
这是 2019 年的 SSM/Redis 配置记录,保留截图和旧版本用于辨认已有项目。它使用 Spring 4、javax.servlet、MySQL Connector/J 5 和 Jedis 2,不适用于直接复制到 Spring Boot 3/Jakarta 项目。文中没有交付 User 实体、Mapper 接口、登录拦截器、控制器、JSP 和建表 SQL,因此不是完整可启动应用;需结合原项目补齐这些文件。新学习项目可阅读带版本的完整任务 API。本轮只静态核对,未安装或运行旧依赖。
配置mappers/UserMapper.xml
这个配置文件主要是和接口对应起来,UserMapper.xml类似的xml文件主要是写SQL语句 关于一些Xml语句的增删改查写法请查阅先关资料
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="cn.myssm.store.mapper.UserMapper">
<!-- 插入用户数据 -->
<!-- Integer insert(User user) -->
<insert id="insert"
parameterType="cn.myssm.store.entity.User"
useGeneratedKeys="true"
keyProperty="id">
INSERT INTO t_user (
username,
password,
email,
phone,
gender,
avatar,
salt,
status,
is_delete,
created_user,
created_time,
modified_user,
modified_time
) VALUES (
#{username},
#{password},
#{email},
#{phone},
#{gender},
#{avatar},
#{salt},
#{status},
#{isDelete},
#{createdUser},
#{createdTime},
#{modifiedUser},
#{modifiedTime}
)
</insert>
</mapper>pom.xml
pom文件管理jar依赖。Servlet API 使用 provided,由兼容 javax.servlet 的容器提供运行实现;不能用 Tomcat 10+ 的 Jakarta API 直接替换。本片段没有固定编译器和 WAR 插件版本,恢复旧工程时还需核对原 JDK 与插件配置。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myssm.hyper</groupId>
<artifactId>myssm</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- SpringMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<!-- Spring-JDBC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<!-- JUnit:单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- MyBatis整合Spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- DBCP -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- Jackson:供 MVC 消息转换器进行 JSON 序列化;编码由响应配置决定 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.7</version>
</dependency>
<!-- 文件上传 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
</dependencies>
</project>包结构

Redis
操作系统安装Redis
下方为 Redis 5.0.3 的历史源码构建步骤,未在本轮执行,不是当前安装建议。Redis 服务端使用 C 工具链,gcc-c++ 不是语言层面的必要条件,具体构建依赖按该版本源码说明及发行版确认。是否通过 SSH 客户端连接 Linux 与 Redis 的安装机制无关。
- 电脑主系统是Windows因此为了方便,在Windows系统安装SecureCRT来链接Linux系统。
- 下载redis压缩包:http://www.redis.cn/download.html
- 安装redis需要gcc环境,因此Linux系统中需要安装gcc环境:yum install gcc-c++
$ wget http://download.redis.io/releases/redis-5.0.3.tar.gz
$ tar xzf redis-5.0.3.tar.gz
$ cd redis-5.0.3
$ make$ src/redis-server
修改后台启动Redis
修改redis.conf文件 daemonize yes(大概在100+行) 
pom.xml文件中添加jar包
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>redis.properties
redis.hostname=127.0.0.1
redis.port=6379
redis.database=0
redis.pool.maxActive=600
redis.pool.maxIdle=300
redis.pool.maxWait=3000
redis.pool.testOnBorrow=truespring-redis.xml
以下是原项目的自定义包装类接线片段,JedisPoolWriper 和 JedisUtil 不属于 Jedis 依赖,本文没有提供它们的源码,不能单靠该配置创建可用连接池。先恢复这些类并核对构造器、jedisPool 属性及 redis.database 是否被使用;当前三个构造参数没有传入 database。${...} 还需属性占位符加载器,下面明确加入 redis.properties 的加载。
<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-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<context:property-placeholder location="classpath:redis.properties" />
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${redis.pool.maxActive}" />
<property name="maxIdle" value="${redis.pool.maxIdle}" />
<property name="maxWaitMillis" value="${redis.pool.maxWait}" />
<property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
</bean>
<bean id="jedisWritePool" class="com.imooc.myo2o.cache.JedisPoolWriper"
depends-on="jedisPoolConfig">
<constructor-arg index="0" ref="jedisPoolConfig" />
<constructor-arg index="1" value="${redis.hostname}" />
<constructor-arg index="2" value="${redis.port}" type="int" />
</bean>
<bean id="jedisKeys" class="com.imooc.myo2o.cache.JedisUtil$Keys"
scope="singleton">
<constructor-arg ref="jedisUtil"></constructor-arg>
</bean>
<bean id="jedisStrings" class="com.imooc.myo2o.cache.JedisUtil$Strings"
scope="singleton">
<constructor-arg ref="jedisUtil"></constructor-arg>
</bean>
<bean id="jedisLists" class="com.imooc.myo2o.cache.JedisUtil$Lists"
scope="singleton">
<constructor-arg ref="jedisUtil"></constructor-arg>
</bean>
<bean id="jedisSets" class="com.imooc.myo2o.cache.JedisUtil$Sets"
scope="singleton">
<constructor-arg ref="jedisUtil"></constructor-arg>
</bean>
<bean id="jedisHash" class="com.imooc.myo2o.cache.JedisUtil$Hash"
scope="singleton">
<constructor-arg ref="jedisUtil"></constructor-arg>
</bean>
<bean id="jedisUtil" class="com.imooc.myo2o.cache.JedisUtil"
scope="singleton">
<property name="jedisPool">
<ref bean="jedisWritePool" />
</property>
</bean>
</beans>web.xml中配置 spring-redis.xml、redis.properties即可
这里应区分 XML 配置与 properties 数据文件:已有 classpath:spring-*.xml 会匹配 spring-redis.xml,不要把 redis.properties 当 Spring XML 传给 contextConfigLocation。properties 由上面的 property-placeholder 读取。连接池包装类还需提供关闭方法并配置销毁回调,借出的 Jedis 连接需按其版本约定归还池;本文未给出包装实现,不能宣称这些清理已经完成。
同理,现有 spring-service.xml 只有扫描,并未启用事务。多条 Mapper 写操作若需原子性,要配置与 SqlSessionFactoryBean 使用同一 ds 的 DataSourceTransactionManager、tx:annotation-driven,并让调用经过服务代理上的事务边界;扫描或使用 MyBatis 本身不等于多步骤自动回滚。参考 MyBatis-Spring 事务说明与 DispatcherServlet 机制。
继续阅读
- 开发实践Eclipse中Maven项目创建 · 历史版本
- 开发实践
- 排错