天天看點

Springboot+mybatis搭建項目

用慣了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

經過上面的配置,我們應該會得到類似下面的目錄結構:

Springboot+mybatis搭建項目

這是個标準的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:

Springboot+mybatis搭建項目

OK,至此,測試成功,後面就是寫業務代碼了!

繼續閱讀