# SSM开发
**Repository Path**: by-mx/DevSSM
## Basic Information
- **Project Name**: SSM开发
- **Description**: SSM(Spring、SpringMVC、MyBatis)开发模版
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2024-12-04
- **Last Updated**: 2025-05-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: SSM, MySQL, Java
## README
# DevSSM 项目说明
### IDEA 基本设置
以下是 IntelliJ IDEA 的一些基本设置和优化建议,帮助你更高效地开发和提高工作流效率:
------
1. **设置外观和字体大小**
你可以根据个人偏好调整 IDEA 的外观和字体大小,以便更加舒适地进行开发。
路径:`File -> Settings -> Appearance & Behavior -> Appearance`
在这里你可以设置主题、字体和大小等。
2. **设置编辑器的快捷键**
若你习惯使用其他 IDE(如 Eclipse),可以将 IDEA 的快捷键设置为 Eclipse 模式。
路径:`File -> Settings -> Keymap`
在此页面,你可以选择不同的快捷键配置,也可以自定义快捷键。
3. **代码提示和补充功能**
通过调整代码补全设置,优化开发体验。
路径:`Settings -> Editor -> General -> Code Completion -> Case Sensitive Completion`
- 默认情况下,`First letter` 会区分大小写,即只会根据首字母提示(如 `StringBuffer` 和 `stringBuffer` 会被视为不同的提示项)。
- 如果希望不区分大小写,可以将其改为 `None`。
4. **设置代码检查等级**
你可以设置 IDEA 对代码的检查等级,以确保代码质量。
路径:`File -> Settings -> Editor -> Inspections`
- 选择 `Inspections` 为最高等级,这样 IDEA 会对代码进行全面的检查,包括拼写、语法、变量使用、方法调用等问题。
- `Syntax` 仅检查语法错误和拼写问题。
- `None` 不做任何检查,适用于不需要严格检查的情况。
5. **自动导包设置**
自动导入包的功能可以大大提高开发效率,避免手动输入包名。
路径:`Settings -> Editor -> General -> Auto Import`
- 勾选 `Optimize imports on the fly`,IntelliJ IDEA 会在你写代码时自动优化导入的包,去除未使用的包。
- 勾选 `Add unambiguous imports on the fly`,IDEA 会自动导入你所需的包,但对于存在同名包的情况,仍需手动选择(使用 `Alt + Enter`)。
6. **启用省电模式**
启用省电模式后,IDEA 会关闭代码检查、提示等功能,这有助于节省系统资源,适用于需要提高性能的场景。
路径:`File -> Power Save Mode`
启用此模式时,IDEA 的一些智能功能(如代码提示、错误检查等)将会被关闭。
7. **全局编码设置**
确保默认编码设置为 UTF-8,以便于处理多种字符集的文件,避免乱码问题。
路径:`File -> Other Settings -> Default Settings -> Editor -> File Encodings`
设置编码为 UTF-8,特别是在跨平台开发时,统一的编码格式有助于避免字符编码问题。
8. **工程编码设置**
为确保特定项目的编码设置正确,可以为每个项目单独设置编码。
路径:`File -> Settings -> Editor -> File Encodings`
可以为当前工程指定编码,以确保文件内容在不同环境中的一致性。
9. **文件编码设置**
如果你需要调整某个特定文件的编码,可以通过文件右下角进行设置。
在文件的右下角,点击编码设置,选择你希望使用的编码格式。
10. **Maven 设置**
Maven 是常用的构建工具,确保 IDEA 的 Maven 配置正确,以便顺利进行构建和依赖管理。
路径:`File -> Other Settings -> Default Settings -> Build, Execution, Deployment -> Build Tools -> Maven`
- 设置 Maven Home Directory:选择 Maven 的安装路径。
- 设置 User Settings File:配置 `settings.xml` 文件的路径。
- 设置 Local Repository:指定本地仓库的位置。
11. **JDK 设置**
设置项目使用的 JDK 版本,以确保编译和运行环境的一致性。
路径:`File -> Other Settings -> Default Project Structure`
在此设置中,你可以为不同的项目配置 JDK 路径。
------
### 参考链接:
- [CSDN 博客 - yelove1990](http://blog.csdn.net/yelove1990/article/details/51541327)
- [CSDN 博客 - qq_27093465](http://blog.csdn.net/qq_27093465/article/details/52918873)
- [CSDN 博客 - frankcheng5143](http://blog.csdn.net/frankcheng5143/article/details/50779149)
通过以上的设置和优化,你可以提升开发效率,减少环境配置带来的麻烦。
### Maven 基本设置
打开 settings.xml
1. 设置本地仓库位置(建议)
```xml
E:\sundry\maven\repo
```
2. 配置镜像(建议)
```xml
alimaven
central
aliyun maven
http://maven.aliyun.com/nexus/content/repositories/central/
repo1
central
Human Readable Name for this Mirror.
http://repo1.maven.org/maven2/
repo2
central
Human Readable Name for this Mirror.
http://repo2.maven.org/maven2/
ibiblio
central
Human Readable Name for this Mirror.
http://mirrors.ibiblio.org/pub/mirrors/maven2/
jboss-public-repository-group
central
JBoss Public Repository Group
http://repository.jboss.org/nexus/content/groups/public
maven.net.cn
oneof the central mirrors in china
http://maven.net.cn/content/groups/public/
central
```
3. 设置代理(可选)
```xml
my-proxy
true
http
10.18.97.76
3128
127.0.0.1
```
保存,重启IDE生效.
### 使用IDEA 搭建SSM 框架
参考: https://www.cnblogs.com/hackyo/p/6646051.html
需要的环境:
- idea 2017
- jdk 1.8
- Maven 3
#### 步骤1 使用idea新建一个Maven webapp项目
File -> New -> Project -> Maven -> 确认JDK; 勾选Create from archetype; 在列表中选择 maven-archetype-webapp -> Next -> GroupId:www.Dev.com; Artifactid: devssm; -> Next -> 确认 directory、file、replsitory -> Next -> 确认信息 -> Finish
报错: [ERROR] Maven execution terminated abnormally (exit code 1) 这个问题是常见的.检测是不是网络的问题.右击项目名 -> remove Modoule -> 退出IDE -> 去工作区间删除项目 -> 启动IDE 在欢迎页面×了该项目 -> 重新进行步骤1.
第一次搭建可能会很慢, 一次未必成功.
创建成功后右上角会提示:Maven projects need to be imported .点击Enable Auto-Import,以后更改pom文件后就会自动下载依赖包了.
控制台成功信息:
```xml
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 51.253 s
[INFO] Finished at: 2017-11-23T15:53:18+08:00
[INFO] Final Memory: 19M/172M
[INFO] ------------------------------------------------------------------------
[INFO] Maven execution finished
```
项目目录结构:
```xml
DevSSM
│ DevSSM.iml
│ pom.xml
│
├─.idea
│ │ compiler.xml
│ │ encodings.xml
│ │ misc.xml
│ │ modules.xml
│ │ workspace.xml
│ │
│ ├─artifacts
│ │ DevSSM_war.xml
│ │ DevSSM_war_exploded.xml
│ │
│ ├─dictionaries
│ │ wuyanhui.xml
│ │
│ ├─inspectionProfiles
│ │ Project_Default.xml
│ │
│ └─libraries
│ Maven__junit_junit_3_8_1.xml
│
└─src
└─main
├─resources
└─webapp
│ index.jsp
│
└─WEB-INF
web.xml
```
#### 步骤2 搭建目录结构
```xml
DevSSM
│ DevSSM.iml
│ pom.xml
│
├─.idea
│ │ compiler.xml
│ │ encodings.xml
│ │ misc.xml
│ │ modules.xml
│ │ workspace.xml
│ │
│ ├─artifacts
│ │ DevSSM_war.xml
│ │ DevSSM_war_exploded.xml
│ │
│ ├─dictionaries
│ │ wuyanhui.xml
│ │
│ ├─inspectionProfiles
│ │ Project_Default.xml
│ │
│ └─libraries
│ Maven__junit_junit_3_8_1.xml
│
└─src
├─main
│ ├─java
│ │ └─com.Dev
│ │ ├─controller
│ │ │ UserController.java
│ │ │
│ │ ├─dao
│ │ │ IUserDao.java
│ │ │
│ │ ├─model
│ │ │ User.java
│ │ │
│ │ └─service
│ │ │ IUserService.java
│ │ │
│ │ └─impl
│ │ UserServiceImpl.java
│ │
│ ├─resources
│ │ │ jdbc.properties
│ │ │ logback.xml
│ │ │ spring-mvc.xml
│ │ │ spring-mybatis.xml
│ │ │
│ │ ├─mapper
│ │ │ UserDao.xml
│ │ │
│ │ └─sql
│ │ DevSSM.sql
│ │
│ └─webapp
│ │ index.html
│ │
│ └─WEB-INF
│ │ web.xml
│ │
│ └─views
└─test
└─java
└─com
└─Dev
├─controller
└─dao
IUserDaoTest.java
```
注意: 新建文件如果找不到Class 格式.我们把java 文件夹设置为source , 再创建就有.clss 文件格式了.
我们可以根据对项目的任意目录进行这五种目录类型标注,这个知识点非常非常重要,必须会。
- `Sources` 一般用于标注类似 src 这种可编译目录。有时候我们不单单项目的 src 目录要可编译,还有其他一些特别的目录也许我们也要作为可编译的目录,就需要对该目录进行此标注。**只有 Sources 这种可编译目录才可以新建 Java 类和包,这一点需要牢记。** **
- ` Tests` 一般用于标注可编译的单元测试目录。在规范的 maven 项目结构中,顶级目录是 src,maven 的 src 我们是不会设置为 Sources 的,而是在其子目录 main 目录下的 java 目录,我们会设置为 Sources。而单元测试的目录是 src - test - java,这里的 java 目录我们就会设置为 Tests,表示该目录是作为可编译的单元测试目录。一般这个和后面几个我们都是在 maven 项目下进行配置的,但是我这里还是会先说说。从这一点我们也可以看出 IntelliJ IDEA 对 maven 项目的支持是比彻底的。
- `Resources `一般用于标注资源文件目录。在 maven 项目下,资源目录是单独划分出来的,其目录为:src - main -resources,这里的 resources 目录我们就会设置为 Resources,表示该目录是作为资源目录。资源目录下的文件是会被编译到输出目录下的。
- `Test Resources `一般用于标注单元测试的资源文件目录。在 maven 项目下,单元测试的资源目录是单独划分出来的,其目录为:src - test -resources,这里的 resources 目录我们就会设置为 Test Resources,表示该目录是作为单元测试的资源目录。资源目录下的文件是会被编译到输出目录下的。
- ` Excluded `一般用于标注排除目录。被排除的目录不会被 IntelliJ IDEA 创建索引,相当于被 IntelliJ IDEA 废弃,该目录下的代码文件是不具备代码检查和智能提示等常规代码功能。
通过上面的介绍,我们知道对于非 maven 项目我们只要会设置 src 即可。
参考: http://blog.csdn.net/qq_27093465/article/details/52912444
#### 步骤3 配置文件内容
pom.xml
```xml
4.0.0
www.Dev.com
DevSSM
war
1.0-SNAPSHOT
DevSSM Maven Webapp
http://maven.apache.org
UTF-8
UTF-8
4.3.5.RELEASE
3.4.1
javax
javaee-api
8.0
junit
junit
3.8.1
test
ch.qos.logback
logback-classic
1.2.2
com.fasterxml.jackson.core
jackson-databind
2.8.7
mysql
mysql-connector-java
5.1.41
runtime
com.mchange
c3p0
0.9.5.2
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
1.3.1
org.springframework
spring-core
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-test
${spring.version}
DevSSM
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8
```
设置好后,Maven会自动更新依赖, 可以注意右下方的信息.
logback.xml
```xml
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
```
这里可以控制输出格式和内容,有兴趣的可以自己设置
jdbc.properties
```java
jdbc.driver=com.mysql.jdbc.Driver
#数据库地址
jdbc.url=jdbc:mysql://localhost:3306/devssm?useUnicode=true&characterEncoding=utf8
#用户名
jdbc.username=root
#密码
jdbc.password=123
#最大连接数
c3p0.maxPoolSize=30
#最小连接数
c3p0.minPoolSize=10
#关闭连接后不自动commit
c3p0.autoCommitOnClose=false
#获取连接超时时间
c3p0.checkoutTimeout=10000
#当获取连接失败重试次数
c3p0.acquireRetryAttempts=2
```
spring-mybatis.xml
```xml
```
spring-mvc.xml
```xml
```
web.xml
```xml
DevSSM
DevSSM_Alpha_0.0.1
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
encodingFilter
/*
SpringMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-*.xml
1
true
SpringMVC
/
index.html
```
到这里基本上环境就搭建完成了,下面开始测试
#### 步骤4 测试
先导入一份数据库测试文件
```sql
CREATE DATABASE /*!32312 IF NOT EXISTS*/`devssm` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;
USE `devssm`;
/*Table structure for table `user` */
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`email` varchar(255) NOT NULL COMMENT '用户邮箱',
`password` varchar(255) DEFAULT NULL COMMENT '用户密码',
`username` varchar(255) DEFAULT NULL COMMENT '用户昵称',
`role` varchar(255) DEFAULT NULL COMMENT '用户身份',
`status` int(1) DEFAULT NULL COMMENT '用户状态',
`regTime` datetime DEFAULT NULL COMMENT '注册时间',
`regIp` varchar(255) DEFAULT NULL COMMENT '注册IP',
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 CHECKSUM=1;
/*Data for the table `user` */
insert into `user`(`id`,`email`,`password`,`username`,`role`,`status`,`regTime`,`regIp`) values (1,'Dev@163.com','1223','DevKang','root',1,'2017-03-28 09:40:31','127.0.0.1');
```
UserController
```java
package com.Dev.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import model.com.User;
import service.com.IUserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* project DevSSM
* authod wuyanhui
* datetime 2017/11/23 16:16
* desc
*/
@Controller
@RequestMapping("/user")
public class UserController {
@Resource
private IUserService userService;
@RequestMapping("/showUser.do")
public void selectUser(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
long userId = Long.parseLong(request.getParameter("id"));
User user = this.userService.selectUser(userId);
ObjectMapper mapper = new ObjectMapper();
response.getWriter().write(mapper.writeValueAsString(user));
response.getWriter().close();
}
}
```
IUserDao
```java
package com.Dev.dao;
import model.com.User;
/**
* project DevSSM
* authod wuyanhui
* datetime 2017/11/23 16:17
* desc
*/
public interface IUserDao {
User selectUser(long id);
}
```
User
```java
package com.Dev.model;
import java.util.Date;
/**
* project DevSSM
* authod wuyanhui
* datetime 2017/11/23 16:17
* desc
*/
public class User {
private long id;
private String email;
private String password;
private String username;
private String role;
private int status;
private Date regTime;
private String regIp;
public User() {
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public Date getRegTime() {
return regTime;
}
public void setRegTime(Date regTime) {
this.regTime = regTime;
}
public String getRegIp() {
return regIp;
}
public void setRegIp(String regIp) {
this.regIp = regIp;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", email='" + email + '\'' +
", password='" + password + '\'' +
", username='" + username + '\'' +
", role='" + role + '\'' +
", status=" + status +
", regTime=" + regTime +
", regIp='" + regIp + '\'' +
'}';
}
}
```
IUserService
```java
package com.Dev.service;
import model.com.User;
public interface IUserService {
public User selectUser(long userId);
}
```
UserServiceImpl
```java
package com.Dev.service.impl;
import dao.com.IUserDao;
import model.com.User;
import service.com.IUserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* project DevSSM
* authod wuyanhui
* datetime 2017/11/23 16:17
* desc
*/
@Service("userService")
public class UserServiceImpl implements IUserService {
@Resource
private IUserDao userDao;
@Override
public User selectUser(long userId) {
return this.userDao.selectUser(userId);
}
}
```
UserDao.xml
```xml
```
然后新建个测试类,来测试mybatis
IUserDaoTest
```java
package com.Dev.dao;
import model.com.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* project DevSSM
* authod wuyanhui
* datetime 2017/11/23 16:45
* desc
*/
// 加载spring配置文件
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring-mybatis.xml"})
public class IUserDaoTest {
@Autowired
private IUserDao dao;
@Test
public void testSelectUser() throws Exception {
long id = 1;
User user = dao.selectUser(id);
System.out.println(user.getUsername());
}
}
```
运行后结果应该是会在控制台输出id为1的用户名.
继续新建个页面来测试springmvc和mybatis
index.html
```html
test
Hello World!
```
新建完成后配置项目运行环境,点击Run-Edit Configurations...
点击加号新建运行环境,选择Tomcat Server-Local
选中新建好的服务器,右边选择Deployment,点击加号-Atifact...
选择第二项 DevSSM:war exploded
然后在右边Application context配置你的项目名`/devssm`
最后运行项目,项目会打开里浏览器且访问`http://localhost:8080/devssm/`,在打开的页面中点击按钮测试,成功的话会在页面上显示id为1的用户信息`{"id":1,"email":"Dev@163.com","password":"1223","username":"DevKang","role":"root","status":1,"regTime":1490665231000,"regIp":"127.0.0.1"}`
### IDEA 通过 git 把项目上传到 gitHub
### 基础步骤:
1. **确保 Git 和 SSH key 配置好**:
- 本地已经安装好 Git。
- 配置好 SSH key,并将公钥添加到 GitHub(可以参考上面提供的详细步骤)。
2. **在 IntelliJ IDEA 中设置 Git**:
- 打开 IntelliJ IDEA。
- 进入 `File` -> `Settings`(或 `IntelliJ IDEA` -> `Preferences`,macOS 上)。
- 选择 `Version Control` -> `Git`。
- 在 `Path to Git executable` 输入框中,填写 Git 可执行文件的路径(如:`/usr/bin/git` 或 `C:\Program Files\Git\bin\git.exe`)。
3. **分享项目到 GitHub**:
- 在 IDEA 中打开项目,选择 `VCS`(版本控制)菜单。
- 选择 `Import into Version Control` -> `Share Project on GitHub`。
- 输入你的 GitHub 账号和密码(如果是首次登录,会要求输入)。
- 完成设置后,IDEA 会自动创建一个新的 GitHub 仓库并上传项目代码。
### 关键点:
- 通过 `VCS` 菜单,选择 `Share Project` 即可直接将项目上传到 GitHub。
- 使用 SSH 配置时,确保 GitHub 上的 SSH key 设置正确,这样可以避免输入用户名和密码。
### 最后
**不负责任声明:** 本例子只用于学习.
**特别鸣谢:** https://github.com/hittun/helloSSM