用慣了SSM,會發現配置檔案是真的煩,既然有了化繁為簡的工具Springboot,今天我們就來實踐一下,體會一下Springboot搭建一個SSM的應用有多麼友善。
配置環境如下:
jdk:1.7及以上,
maven:3.5.2
mybatis:3.4.5
mysql:5.5
首先搭建一個maven項目(下載下傳maven3,然後配置環境變量,更改eclipse中的userSetting以及maven所在目錄),
建立maven項目之後,會生成pom.xml。要使用mybatis,我們的配置檔案可以按照這樣來配置:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sgx</groupId>
<artifactId>SpringBoot</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SpringBoot Maven Webapp</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- <dependency>
<groupId>org.activiti</groupId>
<artifactId>spring-boot-starter-basic</artifactId>
<version>5.17.0</version>
</dependency> -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
</project>
主要是引入parent的依賴以及mysql的依賴和starter的依賴即可。下面是資料庫的簡單配置,
我們先下載下傳Mysql的安裝檔案,本地安裝了Mysql之後,
然後我們在resources下面建立一個application.properties,這個檔案用來存放所有配置資訊。
使用SSM需要的配置如下:
#Spring datasource && jpa
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mysql?charset=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.show-sql=true
mybatis.mapper-locations: classpath:mapper/*.xml
mybatis.type-aliases-package: com.sgx.model
主要是連接配接資料庫以及mybatis編寫XML檔案的地方還有表結構映射的Java實體類存放的地方;
在Web應用中操作資料庫的方法其實還是挺多的,Springboot官方推薦的是JPA
(使用hibernate來自動映射,不用手動建表)簡化配置,這也是Springboot的初衷,
當然用慣了SSM的同學或者還不習慣HQL的同學可能會跟我一樣選擇mybatis而不是hibernate。
使用JPA自動建表需要引入我上面注釋的那個JPA的依賴。
一、JDBCTemplate操作資料庫
Spring官方傳送門,這種方法好用是好用,但是把太多的SQL代碼會寫到實作類裡面,
這樣的話一旦業務邏輯複雜,代碼裡面會遍布SQL語句。
二、SSM
經過上面的配置,我們應該會得到類似下面的目錄結構:
這是個标準的SSM開發的結構,現在我們啟動Springboot應用,運作Application.class,
然後寫一個測試類MyController:
package com.sgx.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.sgx.model.Customer;
import com.sgx.service.TestService;
@ResponseBody
@Controller
public class MyController {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private TestService testService;
@RequestMapping("/hello")
public String hello(){
System.out.println("hello,world!");
return "index";
}
@RequestMapping("/query/{name}")
public Customer query(@PathVariable String name){
String sql = "INSERT INTO CUSTOMER(NAME,GENDER,ADDRESS,PHONE) "
+ "VALUES('shigx','male','shanghai,putuo','110')";
jdbcTemplate.execute(sql);
System.out.println("INSERT INTO TABLE CUSTOMER SUCCESS");
return testService.query(name);
}
}
這個query方法裡面,我先使用JDBCTemplate插入一條記錄,然後調用TestService中的query方法,
package com.sgx.service;
import org.springframework.stereotype.Service;
import com.sgx.model.Customer;
@Service
public interface TestService {
public Customer query(String name);
}
package com.sgx.service.Impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.sgx.dao.CustomerMapper;
import com.sgx.model.Customer;
import com.sgx.service.TestService;
@Component
public class TestServiceImpl implements TestService{
@Autowired
private CustomerMapper customerMapper;
@Override
public Customer query(String name) {
return customerMapper.query(name);
}
}
這裡調用了customerMapper中的query方法,這個mapper class要加注解,标注它是一個mapper,
或者在啟動Application的時候,注解mapperScan掃描這個包也可以;
package com.sgx.dao;
import org.apache.ibatis.annotations.Mapper;
import com.sgx.model.Customer;
@Mapper
public interface CustomerMapper {
public Customer query(String name);
}
然後是我們的mapper.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.sgx.dao.CustomerMapper">
<resultMap id="CustomerMap" type="Customer" >
<result property="name" column="name" javaType="java.lang.String"/>
<result property="gender" column="gender" javaType="java.lang.String"/>
<result property="address" column="address" javaType="java.lang.String"/>
<result property="phone" column="phone" javaType="java.lang.String"/>
</resultMap>
<insert id="addCustomer" parameterType="Customer" useGeneratedKeys="true">
insert into customer(name,gender,address,phone) values
(#{name},#{gender},#{address},#{phone})
</insert>
<select id="query" resultMap="CustomerMap" parameterType="String">
select * from customer where name=#{name}
</select>
</mapper>
這樣一來,controller中的方法最終其實就是這個XML中的query語句,結果就是去資料庫查出這個對象
傳回一個Customer對象,然後結果顯示到頁面。
測試:浏覽器輸入http://localhost:8080/query/shigx
傳回結果會自動轉成JSON:
OK,至此,測試成功,後面就是寫業務代碼了!