【Spring】作业记录:spring项目从创建、配置到功能实现、测试

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 【Spring】作业记录:spring项目从创建、配置到功能实现、测试

提前声明:

1.这只是文档一次作业记录,也许会有不太恰当的地方,所以仅供参考。

2.适合不知道怎么创建配置的参考。仅仅是参考,而不是抄代码。

目录

项目创建


w2.png

配置pom.xml

<dependencies>
<!--    数据库驱动:MySQL-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
    </dependency>
<!--    数据库框架:mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.9</version>
    </dependency>
<!--    Spring框架:Spring-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.18</version>
    </dependency>
<!--    Spring JDBC-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.3.17</version>
    </dependency>
<!--    Spring整合Mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.7</version>
    </dependency>
<!--    Spring AOP框架-->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.9</version>
    </dependency>
<!--    日志:log4g-->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
    </dependency>
<!--    测试:junit-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
    </dependency><!--    分页插件-->
    <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.3.0</version>
    </dependency>
    <!--        Json序列化工具:fastJson-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>2.0.1</version>
    </dependency>
</dependencies>

连接数据库


w1.png

快速创建实例化对象

q6.png

选择目录

q5.png

q4.png

创建完毕后需要去修改它们的包名

q3.png

q2.png

配置


目录

q1.png

database.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/edu_smbms
jdbc.username=edu_smbms
jdbc.password=**********

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?><!--XML文件声明,版本号,编码-->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd"><!--该XML文件约束是dtd文件规则,和Spring中的约束不一样,但是功能一样-->
<configuration>
    <settings>
<!--    开启Log4j日志-->
        <setting name="logImpl" value="LOG4J"/>
<!--    开启延迟加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>
    <typeAliases>
<!--        <typeAlias type="" alias=""/>-->
        <package name="cc.mllt.pojo"/><!--如果jdbc包下有Link类,则别名为link,不区分大小写-->
    </typeAliases>
    <mappers>
        <package name="cc.mllt.mapper"/>
    </mappers>
</configuration>

Spring-dao.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 https://www.springframework.org/schema/context/spring-context.xsd">
    <!--引入数据库配置文件-->
    <context:property-placeholder location="classpath:database.properties"/>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <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>
    <!--配置sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--指定数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!--指定Mybatis全局配置文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--        <property name="mapperLocations" value="classpath:cc/mllt/mapper/*.xml"/>-->
    </bean>
    <!--配置mapper扫描,动态实现了mapper接口可以注册到spring容器中  -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <!--  要扫描的mapper  -->
        <property name="basePackage" value="cc.mllt.mapper"/>
    </bean>
    <!--sqlSession-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <!--只能使用构造器注入SQLSessionFactory。因为它没有set方法-->
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
</beans>

log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

applicationContext.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 https://www.springframework.org/schema/context/spring-context.xsd">
    <!--启用spring的一些annotation -->
    <context:annotation-config/>
    <import resource="spring-dao.xml"/>
<!--    <import resource="spring-mvc.xml"/>-->
    <bean id="providerMapperBean" class="cc.mllt.impl.ProviderImpl">
        <property name="sqlSessionTemplate" ref="sqlSession"/>
    </bean>
</beans>

接口、映射、实现类


ProviderMapper.java

package cc.mllt.mapper;
import cc.mllt.pojo.SmbmsProvider;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface ProviderMapper {
    /**
     * 查询供应商信息
     * @param way 查询方式。1:根据供应商公司名称模糊查询 2:根据供应商负责人名字模糊查询 3:根据电话模糊查询
     * @param npc 查询的关键字
     * @return Provider
     */
    public List<SmbmsProvider> getProviderByNCP(@Param("way") int way, @Param("npc") String npc);
}

ProviderMapper.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="cc.mllt.mapper.ProviderMapper">
<!--    public List<SmbmsProvider> getProviderByNCP(@Param("way") int way,@Param("npc") String npc);-->
    <select id="getProviderByNCP" resultType="SmbmsProvider">
        select * from smbms_provider 
        <choose>
            <when test="way==1">
                where proName like concat('%',#{npc},'%')
            </when>
            <when test="way==2">
                where proContact like concat('%',#{npc},'%')
            </when>
            <when test="way==3">
                where proPhone like concat('%',#{npc},'%')
            </when>
            <otherwise>
                where proName like #concat('%',#{npc},'%')
            </otherwise>
        </choose>
    </select>
</mapper>

ProviderImpl.java

package cc.mllt.impl;
import cc.mllt.mapper.ProviderMapper;
import cc.mllt.pojo.SmbmsProvider;
import org.mybatis.spring.SqlSessionTemplate;
import java.util.List;
//实现类
public class ProviderImpl implements ProviderMapper {
    private SqlSessionTemplate sqlSessionTemplate;
    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate){
        this.sqlSessionTemplate=sqlSessionTemplate;
    }
    @Override
    public List<SmbmsProvider> getProviderByNCP(int way, String npc) {
        ProviderMapper providerMapper = sqlSessionTemplate.getMapper(ProviderMapper.class);
        return providerMapper.getProviderByNCP(way,npc);
    }
}

测试

@Test
    public void getProviderByNCPTest(){
        ClassPathXmlApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");
        ProviderMapper providerMapper = context.getBean("providerMapperBean",ProviderMapper.class);
        List<SmbmsProvider> result = providerMapper.getProviderByNCP(2,"王");
        for(SmbmsProvider smbmsProvider:result){
            System.out.println(smbmsProvider);
        }
    }
C:\Users\xrilang\.jdks\openjdk-17.0.2\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:D:\SoftwareInstall\JetBrains\Toolbox\apps\IDEA-U\ch-1\221.5080.210\lib\idea_rt.jar=8953:D:\SoftwareInstall\JetBrains\Toolbox\apps\IDEA-U\ch-1\221.5080.210\bin -Dfile.encoding=UTF-8 -classpath D:\SoftwareInstall\JetBrains\Toolbox\apps\IDEA-U\ch-1\221.5080.210\lib\idea_rt.jar;D:\SoftwareInstall\JetBrains\Toolbox\apps\IDEA-U\ch-1\221.5080.210\plugins\junit\lib\junit5-rt.jar;D:\SoftwareInstall\JetBrains\Toolbox\apps\IDEA-U\ch-1\221.5080.210\plugins\junit\lib\junit-rt.jar;N:\JavaEE\MyStudyCode\pra-mybatis-smbms\target\test-classes;N:\JavaEE\MyStudyCode\pra-mybatis-smbms\target\classes;A:\100_env\framework\java\MyMavenJarLib\mysql\mysql-connector-java\8.0.28\mysql-connector-java-8.0.28.jar;A:\100_env\framework\java\MyMavenJarLib\com\google\protobuf\protobuf-java\3.11.4\protobuf-java-3.11.4.jar;A:\100_env\framework\java\MyMavenJarLib\org\mybatis\mybatis\3.5.9\mybatis-3.5.9.jar;A:\100_env\framework\java\MyMavenJarLib\org\springframework\spring-webmvc\5.3.18\spring-webmvc-5.3.18.jar;A:\100_env\framework\java\MyMavenJarLib\org\springframework\spring-aop\5.3.18\spring-aop-5.3.18.jar;A:\100_env\framework\java\MyMavenJarLib\org\springframework\spring-beans\5.3.18\spring-beans-5.3.18.jar;A:\100_env\framework\java\MyMavenJarLib\org\springframework\spring-context\5.3.18\spring-context-5.3.18.jar;A:\100_env\framework\java\MyMavenJarLib\org\springframework\spring-core\5.3.18\spring-core-5.3.18.jar;A:\100_env\framework\java\MyMavenJarLib\org\springframework\spring-jcl\5.3.18\spring-jcl-5.3.18.jar;A:\100_env\framework\java\MyMavenJarLib\org\springframework\spring-expression\5.3.18\spring-expression-5.3.18.jar;A:\100_env\framework\java\MyMavenJarLib\org\springframework\spring-web\5.3.18\spring-web-5.3.18.jar;A:\100_env\framework\java\MyMavenJarLib\org\springframework\spring-jdbc\5.3.17\spring-jdbc-5.3.17.jar;A:\100_env\framework\java\MyMavenJarLib\org\springframework\spring-tx\5.3.17\spring-tx-5.3.17.jar;A:\100_env\framework\java\MyMavenJarLib\org\mybatis\mybatis-spring\2.0.7\mybatis-spring-2.0.7.jar;A:\100_env\framework\java\MyMavenJarLib\org\aspectj\aspectjweaver\1.9.9\aspectjweaver-1.9.9.jar;A:\100_env\framework\java\MyMavenJarLib\log4j\log4j\1.2.12\log4j-1.2.12.jar;A:\100_env\framework\java\MyMavenJarLib\junit\junit\4.13.2\junit-4.13.2.jar;A:\100_env\framework\java\MyMavenJarLib\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;A:\100_env\framework\java\MyMavenJarLib\com\github\pagehelper\pagehelper\5.3.0\pagehelper-5.3.0.jar;A:\100_env\framework\java\MyMavenJarLib\com\github\jsqlparser\jsqlparser\4.2\jsqlparser-4.2.jar;A:\100_env\framework\java\MyMavenJarLib\com\alibaba\fastjson\2.0.1\fastjson-2.0.1.jar;A:\100_env\framework\java\MyMavenJarLib\com\alibaba\fastjson2\fastjson2-extension\2.0.1\fastjson2-extension-2.0.1.jar;A:\100_env\framework\java\MyMavenJarLib\com\alibaba\fastjson2\fastjson2\2.0.1\fastjson2-2.0.1.jar com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 MappperProviderTest,getProviderByNCPTest
DEBUG 04-26 19:01:09,419 Creating a new SqlSession (Logger.java:49) 
DEBUG 04-26 19:01:09,423 SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2e2ff723] was not registered for synchronization because synchronization is not active (Logger.java:49) 
DEBUG 04-26 19:01:10,882 JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@55b5e331] will not be managed by Spring (Logger.java:49) 
DEBUG 04-26 19:01:10,905 ==>  Preparing: select * from smbms_provider where proContact like concat('%',?,'%') (BaseJdbcLogger.java:137) 
DEBUG 04-26 19:01:10,937 ==> Parameters: 王(String) (BaseJdbcLogger.java:137) 
DEBUG 04-26 19:01:11,054 <==      Total: 3 (BaseJdbcLogger.java:137) 
DEBUG 04-26 19:01:11,055 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2e2ff723] (Logger.java:49) 
SmbmsProvider{id=2, proCode='HB_GYS001', proName='石家庄帅益食品贸易有限公司', proDesc='长期合作伙伴,主营产品:饮料、水饮料、植物蛋白饮料、休闲食品、果汁饮料、功能饮料等', proContact='王军', proPhone='13309094212', proAddress='河北省石家庄新华区', proFax='0311-67738876', createdBy=1, creationDate=2016-04-13 04:20:40.0, modifyDate=null, modifyBy=0}
SmbmsProvider{id=7, proCode='BJ_GYS003', proName='北京国粮食用油有限公司', proDesc='初次合作伙伴,主营产品:花生油、大豆油、小磨油等', proContact='王驰', proPhone='13344441135', proAddress='北京大兴青云店开发区', proFax='010-588134111', createdBy=1, creationDate=2016-04-13 00:00:00.0, modifyDate=null, modifyBy=0}
SmbmsProvider{id=15, proCode='ZJ_GYS002', proName='乐摆日用品厂', proDesc='长期合作伙伴,主营产品:各种中、高档塑料杯,塑料乐扣水杯(密封杯)、保鲜杯(保鲜盒)、广告杯、礼品杯', proContact='王世杰', proPhone='13212331567', proAddress='浙江省金华市义乌市义东路', proFax='0579-34452321', createdBy=1, creationDate=2016-08-22 10:01:30.0, modifyDate=null, modifyBy=0}
进程已结束,退出代码0
相关文章
|
6月前
|
人工智能 测试技术 项目管理
测试不再碎片化:AI智能体平台「项目资料套件」功能上线!
在实际项目中,需求文档分散、整理费时、测试遗漏等问题常困扰测试工作。霍格沃兹推出AI智能体测试平台全新功能——项目资料套件,可将多个关联文档打包管理,并一键生成测试用例,提升测试完整性与效率。支持套件创建、文档关联、编辑删除及用例生成,适用于复杂项目、版本迭代等场景,助力实现智能化测试协作,让测试更高效、更专业。
|
5月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
616 2
|
6月前
|
测试技术 UED 开发者
性能测试报告-用于项目的性能验证、性能调优、发现性能缺陷等应用场景
性能测试报告用于评估系统性能、稳定性和安全性,涵盖测试环境、方法、指标分析及缺陷优化建议,是保障软件质量与用户体验的关键文档。
|
10月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
319 32
|
8月前
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
327 0
|
8月前
|
人工智能 数据可视化 测试技术
UAT测试排程工具深度解析:让验收测试不再失控,项目稳稳上线
在系统交付节奏加快的背景下,“测试节奏混乱”已成为项目延期的主因之一。UAT测试排程工具应运而生,帮助团队结构化拆解任务、清晰分配责任、实时掌控进度,打通需求、测试、开发三方协作闭环,提升测试效率与质量。本文还盘点了2025年热门UAT工具,助力团队选型落地,告别靠表格和群聊推进测试的低效方式,实现有节奏、有章法的测试管理。
|
10月前
|
安全 Java API
Spring Boot 功能模块全解析:构建现代Java应用的技术图谱
Spring Boot不是一个单一的工具,而是一个由众多功能模块组成的生态系统。这些模块可以根据应用需求灵活组合,构建从简单的REST API到复杂的微服务系统,再到现代的AI驱动应用。
1244 8
|
9月前
|
监控 安全 Java
Java 开发中基于 Spring Boot 3.2 框架集成 MQTT 5.0 协议实现消息推送与订阅功能的技术方案解析
本文介绍基于Spring Boot 3.2集成MQTT 5.0的消息推送与订阅技术方案,涵盖核心技术栈选型(Spring Boot、Eclipse Paho、HiveMQ)、项目搭建与配置、消息发布与订阅服务实现,以及在智能家居控制系统中的应用实例。同时,详细探讨了安全增强(TLS/SSL)、性能优化(异步处理与背压控制)、测试监控及生产环境部署方案,为构建高可用、高性能的消息通信系统提供全面指导。附资源下载链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
1920 0
|
11月前
|
SQL 前端开发 Java
深入理解 Spring Boot 项目中的分页与排序功能
本文深入讲解了在Spring Boot项目中实现分页与排序功能的完整流程。通过实际案例,从Service层接口设计到Mapper层SQL动态生成,再到Controller层参数传递及前端页面交互,逐一剖析每个环节的核心逻辑与实现细节。重点包括分页计算、排序参数校验、动态SQL处理以及前后端联动,确保数据展示高效且安全。适合希望掌握分页排序实现原理的开发者参考学习。
719 4