spring+springmvc+mybatis构建系统

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:   今天和大家分享的是spring+springmvc+mybatis搭建框架的例子,说到这里不得不说现在市面上一流大公司还有很多用这种架子,创业型公司大部分都用springboot集成的mvc+mybatis来构建应用,形成了两种“趋势”没有统一;因此在后面会有一章springboot+mybatis构建系统的文章,希望多多支持。

  今天和大家分享的是spring+springmvc+mybatis搭建框架的例子,说到这里不得不说现在市面上一流大公司还有很多用这种架子,创业型公司大部分都用springboot集成的mvc+mybatis来构建应用,形成了两种“趋势”没有统一;因此在后面会有一章springboot+mybatis构建系统的文章,希望多多支持。

  • mybatis-generator逆向工程生成实体和配置文件
  • spring+springmvc+mybatis一系列配置
  • 访问静态资源的两种配置方式
  • 引入事物注解
  • 打成war包部署到tomcat

mybatis-generator逆向工程生成实体和配置文件

  java项目中mybatis很常用,要说靠手动来配置实体,映射文件那可繁琐了,为此有了快速生成实体和mapper文件的generator工具;首先我们新建项目,初始化项目结构如:

  

  然后创建名称mybatis-generator.xml的配置文件,里面内容如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
 3         "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
 4 <generatorConfiguration>
 5     <!--引入数据源-->
 6     <!--<properties resource="classpath:application.properties"/>-->
 7     <!--<properties url="D:\my_study\study_java\springcloud_demo\mybatis_demo\src\main\resources\application.properties"/>-->
 8     <context id="DB2Tables" targetRuntime="MyBatis3">
 9         <!--自动实现Serializable接口-->
10         <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
11         <!-- 去除自动生成的注释 -->
12         <commentGenerator>
13             <property name="suppressAllComments" value="true"/>
14             <property name="suppressDate" value="true"/>
15         </commentGenerator>
16         <!--数据库基本信息-->
17         <jdbcConnection driverClass="com.mysql.jdbc.Driver"
18                         connectionURL="jdbc:mysql://119.111.111.111:3306/shenniu003_db"
19                         userId="root"
20                         password="root">
21         </jdbcConnection>
22         <javaTypeResolver>
23             <property name="forceBigDecimals" value="false"/>
24         </javaTypeResolver>
25         <!--生成实体类的位置以及包的名字-->
26         <javaModelGenerator targetPackage="model" targetProject="src\main\java">
27             <property name="enableSubPackages" value="true"/>
28             <property name="trimStrings" value="true"/>
29         </javaModelGenerator>
30         <!--生成map的位置-->
31         <sqlMapGenerator targetPackage="dao.mapper.xml" targetProject="src\main\java">
32             <property name="enableSubPackages" value="true"/>
33         </sqlMapGenerator>
34         <!--生成Dao类存放位置-->
35         <javaClientGenerator type="XMLMAPPER" targetPackage="dao.mapper"  targetProject="src\main\java">
36             <property name="enableSubPackages" value="true"/>
37         </javaClientGenerator>
38 
39         <!--&lt;!&ndash;对应的表名,以及实体名&ndash;&gt;-->
40         <table tableName="StoreUser" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
41         enableUpdateByExample="false" >
42         </table>
43     </context>
44 </generatorConfiguration>

  具体节点表示的作用请看备注信息,当有了配置文件我们有两种方式可以执行通过这个xml配置来生成mapper等文件,mvn是java开发很好的一种工具,这里也使用mvn来运行这个配置工具,仅仅需要在pom.xml中如下配置:

 1       <!--代码生成器-->
 2                 <plugin>
 3                     <groupId>org.mybatis.generator</groupId>
 4                     <artifactId>mybatis-generator-maven-plugin</artifactId>
 5                     <version>1.3.5</version>
 6                     <dependencies>
 7                         <dependency>
 8                             <groupId>mysql</groupId>
 9                             <artifactId>mysql-connector-java</artifactId>
10                             <version>5.1.35</version>
11                         </dependency>
12                         <dependency>
13                             <groupId>org.mybatis.generator</groupId>
14                             <artifactId>mybatis-generator-core</artifactId>
15                             <version>1.3.5</version>
16                         </dependency>
17                     </dependencies>
18 
19                     <!--作为DOM对象的配置-->
20                     <configuration>
21                         <!--允许移动生成的文件-->
22                         <verbose>true</verbose>
23                         <!--是否覆盖-->
24                         <overwrite>true</overwrite>
25                         <!--自动生成的配置-->
26                         <configurationFile>
27                             ${basedir}/src/main/resources/mybatis-generator.xml
28                         </configurationFile>
29                     </configuration>
30                 </plugin>

  通过mvn的mybatis-generator-maven-plugin插件来运行生成,当配置完成mvn后,我们能在idea中的mvn管理器中看到如下选项:

  

  双击运行即可,只要数据库连接没问题,就能正常生成文件:

  

spring+springmvc+mybatis一系列配置

  要说这个ssm已经流行了很多年了,大公司也还在继续使用它,小型创业公司估计都往springboot上去靠了,因为springboot集成了很多东西带来了很多便利;上家公司的某java中级工程师都还没用过springboot,真让人吃惊;在resources目录中创建一个spring的文件夹,里面分别存放3个文件:spring-web.xml,spring-service.xml,spring-dao.xml;代码以此如下,spring-web.xml:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
 6     <!--配置spring mvc-->
 7     <!--开启springmvc注解模式 xml,json的默认读写支持-->
 8     <mvc:annotation-driven/>
 9 
10     <!--默认servlet配置静态资源-->
11     <mvc:default-servlet-handler/>
12 
13     <!--配置JSP 显示ViewResolver-->
14     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
15         <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
16         <property name="prefix" value="/WEB-INF/view/"/>
17         <property name="suffix" value=".jsp"/>
18     </bean>
19 
20     <!--扫描web相关的bean-->
21     <context:component-scan base-package="controller"/>
22 
23     <!--指定静态资源映射-->
24     <!--<mvc:resources mapping="/**/*.js" location="/"/>-->
25 </beans>

  spring-service.xml:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
 5        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/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
 6     <!--扫描service包下所有使用注解的类型-->
 7     <context:component-scan base-package="service"/>
 8 
 9     <!--配置事务管理器-->
10     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
11         <!--注入数据库连接池-->
12         <property name="dataSource" ref="dataSource"/>
13     </bean>
14 
15     <!--配置基于注解的声明式事务
16     默认使用注解来管理事务行为-->
17     <tx:annotation-driven transaction-manager="transactionManager"/>
18 </beans>

  spring-dao.xml:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
 5        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/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
 6     <!--数据库参数-->
 7     <!--<context:property-placeholder location="classpath:application.properties"/>-->
 8     <bean id="propertyConfigurer"
 9           class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
10         <property name="location" value="classpath:application.properties" />
11     </bean>
12 
13     <!--数据库连接池-->
14     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
15           destroy-method="close">
16         <!--配置连接池属性-->
17         <property name="driverClassName" value="${driver}" />
18         <property name="url" value="${url}" />
19         <property name="username" value="${username}" />
20         <property name="password" value="${password}" />
21     </bean>
22 
23     <!--SqlSessionFactory对象-->
24     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
25         <!--往下才是mybatis和spring真正整合的配置-->
26         <!--注入数据库连接池-->
27         <property name="dataSource" ref="dataSource"/>
28         <!--配置mybatis全局配置文件:mybatis-config.xml-->
29         <property name="configLocation" value="classpath:mybatis-config.xml"/>
30         <!--扫描sql配置文件:mapper需要的xml文件-->
31         <property name="mapperLocations" value="classpath*:dao/mapper/xml/*.xml"/>
32     </bean>
33 
34     <!--配置扫描Dao接口包,注入到spring容器-->
35     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
36         <!--注入SqlSessionFactory-->
37         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
38         <!-- 给出需要扫描的Dao接口-->
39         <property name="basePackage" value="dao"/>
40     </bean>
41 
42     <!--&lt;!&ndash; 配置Spring的事务管理器 &ndash;&gt;-->
43     <!--<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">-->
44         <!--<property name="dataSource" ref="dataSource" />-->
45     <!--</bean>-->
46 
47     <!--&lt;!&ndash; 注解方式配置事物 Service支持Transiactional &ndash;&gt;-->
48      <!--<tx:annotation-driven transaction-manager="transactionManager" />-->
49 </beans>

  spring-dao.xml里面涉及到了数据库连接,这里通过property引入一个数据库连接串配置文件:

<bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:application.properties" />
    </bean>

  application.properties配置文件内容如:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://119.111.1111.111:3306/shenniu003_db
username=root
password=1111.

  需要注意的dao.xml中有对前面生成的mybatis实体和mapper扫描操作,具体看配置信息;这里我还分离出了一个mybatis-config.xml,主要是mybatis全局配置信息,mybatis-config.xml:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <!--配置全局属性-->
 7     <settings>
 8         <!--使用jdbc的getGeneratekeys获取自增主键值-->
 9         <setting name="useGeneratedKeys" value="true"/>
10         <!--使用列别名替换列名  默认值为true-->
11         <setting name="useColumnLabel" value="true"/>
12         <!--开启驼峰命名转换Table:create_time到 实体的createTime-->
13         <setting name="mapUnderscoreToCamelCase" value="true"/>
14     </settings>
15 </configuration>

  配置spring一系列文件后,需要有一个入口吧这些文件在程序启动的时候加载,因此需要在web.xml中如下配置:

 1 <!DOCTYPE web-app PUBLIC
 2  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 3  "http://java.sun.com/dtd/web-app_2_3.dtd" >
 4 
 5 <!--重点:这里webapp不替换将无法在jsp页面上使用jstl语法(网页直接把标签输出来了)-->
 6 <!--<web-app>-->
 7 <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
 8          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 9          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
10     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
11 
12   <display-name>Archetype Created Web Application</display-name>
13 
14   <!--配置DispatcherServlet-->
15   <servlet>
16     <servlet-name>dispatcherServlet</servlet-name>
17     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
18     <!-- 配置SpringMVC 需要配置的文件   -->
19     <init-param>
20       <param-name>contextConfigLocation</param-name>
21       <param-value>classpath:spring/spring-*.xml</param-value>
22     </init-param>
23   </servlet>
24 
25   <servlet-mapping>
26     <servlet-name>dispatcherServlet</servlet-name>
27     <!--默认匹配所有请求-->
28     <url-pattern>/</url-pattern>
29   </servlet-mapping>
30 
31 
32   <welcome-file-list>
33     <welcome-file>/index.html</welcome-file>
34   </welcome-file-list>
35 
36 </web-app>

  这里需要注意默认idea生成的web.xml中的web-app节点没有schema引入,如果webapp不替换将无法在jsp页面上使用jstl语法,这需要特别注意;

配置访问静态资源的两种配置方式

  由于采用的是mvc方式,因此映射使用dispatcherServlet来做适配,但是路由/拦截了对静态资源的访问,因此需要单独处理下,有两种方式:

  1.可以在spring-web.xml中配置默认servlet适配:

1 <!--默认servlet配置静态资源-->
2 <mvc:default-servlet-handler/>

  2.直接通过mvc:resources引入资源:

1 <!--指定静态资源映射-->
2 <mvc:resources mapping="/**/*.js" location="/"/>

引入事物注解

  要使用事物,需要在spring-service.xml配置事物注解方式(这里也可以通过切点方式):

1 <!--配置基于注解的声明式事务-->
2 <tx:annotation-driven transaction-manager="transactionManager"/>

  有了上面配置后,就可以在代码的service层通过 @Transactional(isolation = Isolation.DEFAULT) 注解引入事物并可选事物隔离机制(本篇忽略)

打成war部署到tomcat 

  对于java项目部署来说tomcat还是常用的容器,我们要把ssm工程打包成war包,需要在mvn中build节点中如下配置(注:本次项目mybatis的mapper文件存放目录不同,因此打包时需要包含下):

 1 <!--加载非资源目录的配置文件-->
 2         <resources>
 3             <resource>
 4                 <directory>src/main/java</directory>
 5                 <includes>
 6                     <include>dao/mapper/xml/*.xml</include>
 7                     <include>**/*.xml</include>
 8                     <include>**/*.properties</include>
 9                 </includes>
10                 <excludes>
11                     <exclude>**/*-generator.xml</exclude>
12                 </excludes>
13                 <filtering>false</filtering>
14             </resource>
15         </resources>

  由于我工程创建时候没有main入口,因此在打包时候是不会成功的,我们需要通过手动添加一个如下main入口class:

1 public class ApplicationClass {
2     public static void main(String[] args) {
3     }
4 }

  然后通过mvn的package命令即可打包成功,成功信息如:

  

  把war包拷贝到tomcat的webapps目录,会自行解压;本篇分享内容就这么多,希望能对你有好的帮助,不放点个“”。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
42 4
|
1月前
|
Java API 数据库
如何使用Spring Boot构建RESTful API,以在线图书管理系统为例
【10月更文挑战第9天】本文介绍了如何使用Spring Boot构建RESTful API,以在线图书管理系统为例,从项目搭建、实体类定义、数据访问层创建、业务逻辑处理到RESTful API的实现,详细展示了每个步骤。通过Spring Boot的简洁配置和强大功能,开发者可以高效地开发出功能完备、易于维护的Web应用。
58 3
|
19天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
95 62
|
17天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
19天前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
13 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
17天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
35 2
|
26天前
|
自然语言处理 Java API
Spring Boot 接入大模型实战:通义千问赋能智能应用快速构建
【10月更文挑战第23天】在人工智能(AI)技术飞速发展的今天,大模型如通义千问(阿里云推出的生成式对话引擎)等已成为推动智能应用创新的重要力量。然而,对于许多开发者而言,如何高效、便捷地接入这些大模型并构建出功能丰富的智能应用仍是一个挑战。
101 6
|
1月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
108 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
54 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
298 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个