Skip to content
← 返回Java列表
开发实践历史记录

历史记录 · 保留原版本与环境,供查阅参考。

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
<?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 与插件配置。

xhtml
<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包 ​

html
  <dependency>
    <groupId>redis.clients</groupId>
     <artifactId>jedis</artifactId>
     <version>2.9.0</version>
   </dependency>

redis.properties ​

shell
    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=true

spring-redis.xml ​

以下是原项目的自定义包装类接线片段,JedisPoolWriper 和 JedisUtil 不属于 Jedis 依赖,本文没有提供它们的源码,不能单靠该配置创建可用连接池。先恢复这些类并核对构造器、jedisPool 属性及 redis.database 是否被使用;当前三个构造参数没有传入 database。${...} 还需属性占位符加载器,下面明确加入 redis.properties 的加载。

xml
<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 机制。

继续阅读