文章目錄
- 編程語言:JDK8以上
- 開發環境:IDEA
- 數據庫:MyBatis
一. 搭建環境
-
打開IDEA,創建新項目,如下。
-
點擊Next,輸入Group和Artifact。
-
點擊Next,選擇Web,勾選Spring Web。
-
點擊Next,跳轉到如下界面。
-
點擊Finish按鈕,生成新項目如下。
二. 開發簡易的ssm後臺程序
1. 建立數據庫表
2. 搭建ssm框架
- 整體結構如下所示。
2.1 UserInfoDO.java
public class UserInfoDO {
private Integer userInfoId;
private String userName;
private Integer age;
private String comment;
// getter and setter
}
2.2 UserInfoDao.java + UserInfoMapper.xml
UserInfoDao.java
// @Mapper // 跟在Application類上加@MapperScan註解作用一樣(但@Mapper需要在每個Dao類上加註解),表示掃描mapper接口
public interface UserInfoDao {
UserInfoDO getUserInfoByName(String name);
}
UserInfoMapper.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="com.zijikanwa.ssmspringboottest.dao.UserInfoDao" >
<select id="getUserInfoByName" resultType="com.zijikanwa.ssmspringboottest.model.UserInfoDO">
SELECT * FROM user_info WHERE user_name = #{name}
</select>
</mapper>
2.3 UserInfoController.java
@RestController // 等於 @Controller + @ResponseBody,表示該類是controller和返回結果爲JSON數據
public class UserInfoController {
@Autowired
private UserInfoDao userInfoDao;
@RequestMapping(value = "getUserInfo")
public UserInfoDO getUserInfo(){
try {
System.out.println("ha1");
UserInfoDO userInfoDO = userInfoDao.getUserInfoByName("xixi");
return userInfoDO;
}catch (Exception e){
return null;
}
}
}
2.4 SsmspringboottestApplication.java
@SpringBootApplication
@EnableTransactionManagement //開啓事務管理
@MapperScan("com.zijikanwa.ssmspringboottest.dao") // 與Dao類上加@Mapper註解二選一即可(推薦在這裏加註解,以避免在每個Dao類都加註解),表示只能掃描mapper接口,不能掃描mapper.xml文件
public class SsmspringboottestApplication {
public static void main(String[] args) {
SpringApplication.run(SsmspringboottestApplication.class, args);
}
}
2.5 mybatis-config.xml(可選)
- 說明
- 可以將MyBatis的配置項寫在
mybatis-config.xml
文件中,如下所示。 - 也可以將MyBatis的配置項寫在
application.properties
文件中。此情況下不需要寫mybatis-config.xml
文件。
- 可以將MyBatis的配置項寫在
<?xml version="1.0" encoding="UTF-8" ?>
<!-- mybatis的配置文件 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 使用駝峯命名法轉換字段(法1) -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 配置mapper.xml文件的路徑(法1) -->
<!--
<mappers>
<mapper resource="/mapper/UserInfoMapper.xml"/>
</mappers>
-->
</configuration>
2.6 application.properties
# 數據庫連接配置
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver # 最新jdbc驅動
# mybatis掃描
mybatis.config-location=classPath:mybatis-config.xml # mybatis配置文件的路徑
mybatis.mapper-locations=classpath*:mapper/*.xml # mapper.xml文件的路徑(法2,推薦)
mybatis.configuration.mapUnderscoreToCamelCase=true # 設置駝峯命名法(法2)
2.7 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.zijikanwa</groupId>
<artifactId>ssmspringboottest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ssmspringboottest</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- spring-boot-starter-jdbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- MyBatis 和 Spring Boot 的集成-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3. postman測試
4. 新增MyBatisConfig類的變化
- 爲了避免MyBatis配置與其他類耦合,可以單獨爲MyBatis配置寫一個配置類,代碼示例如下。
4.1 UserInfoDO.java
- 與 2.1 一致,無變化。
4.2 UserInfoDao.java + UserInfoMapper.xml
UserInfoMapper.xml
:UserInfoMapper.xml
與2.2完全一致。UserInfoDao.java
:與2.2的唯一區別在於,這裏不需要在UserInfoDao
類上加@Mapper註解。
public interface UserInfoDao {
UserInfoDO getUserInfoByName(String name);
}
4.3 UserInfoController.java
- 與 2.3 一致,無變化。
4.4 SsmspringboottestApplication.java
- 與2.4的唯一區別是,不需要加
@SpringBootApplication@MapperScan註解
public class SsmspringboottestApplication {
public static void main(String[] args) {
SpringApplication.run(SsmspringboottestApplication.class, args);
}
}
4.5 mybatis-config.xml(可選)
- 與2.5一致,無需變化
4.6 application.properties
- 與2.6的唯一區別是,不需要再寫MyBatis相關的配置
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
4.7 pom.xml
- 與2.7一致,無需變化
4.8 MyBatisConfig.java
- 這個類是MyBatis配置類,這樣可以不在Application和application.properties文件中加MyBatis註釋和配置。
@Configuration
// 掃描接口類,這個註解只能掃描該包下的mapper接口,不能掃描mapper文件
@MapperScan("com.zijikanwa.ssmspringboottest.dao")
public class MyBatisConfig {
@Autowired
DataSource dataSource;
@Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryBean() throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
//添加xml目錄 基於xml實現再開啓下面的配置,如果直接使用@Mapper則不用開啓
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
// 設置mybatis配置文件路徑
bean.setConfigLocation(resolver.getResource("classpath:mybatis-config.xml"));
// 掃描對應的mapper文件
bean.setMapperLocations(resolver.getResources("classpath*:mapper/*.xml"));
} catch (Exception e) {
}
return bean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}