1. 程式人生 > >使用STS建立springboot整合mybatis+mysql+maven專案

使用STS建立springboot整合mybatis+mysql+maven專案

這個專案我已經傳到CSDN資源上面了,大家如果需要,可以點選下載:

使用mybatis-generator逆向生成dao,entity,mapper檔案,在我之前的部落格中有專門的介紹,

部落格:《Mybatis-Generator反向自動生成Dao、Entitys、mapping》

首先建立springboot+mybatis+mysql專案需要的應用:

1、jdk1.8

2、maven3_5_3

3、mysql

4、STS

下面我們介紹建立springboot整合mybatis+mysql的專案詳細步驟:

首先下載STS之後需要將本地的jdk和maven引入到編輯器中,tomcat這裡不用引入,因為springboot框架內部集成了一個簡易的tomcat容器,所以這裡我們不再需要引入了。

首先引入本地的jdk,這裡編輯器預設引入的是jre,我們點選jre-->remove ,然後點選Add,匯入你本地安裝的jdk路徑,引入後,點選選擇框選中,點選apply。

然後引入本地的maven:切記選中前面的單選框,然後點選apply

引入maven之後還需要引入maven的配置檔案,指定maven本地倉庫的路徑:

建立專案所需要的環境我們已經設定好了,接下來就是使用編輯器建立專案了:

首先Service URL一般都是預設的,這裡不需要改動,Name是專案的名稱,Group,Artifact,Version是maven專案的座標及版本,package是預設載入類所在包,然後點選next,選擇專案建立時,預設新增到pom.xml檔案的依賴。

這些依賴的選擇是看自己專案的需要,點選next:

點選finish,一個簡易的專案就配置完成了。接下來就是我們配置專案和建立實現類和介面了,首先要建立如下目錄:

接下來提供專案原始碼:

首先是預設載入類:Run.java:

 package org.hsweb.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Configuration
@EnableAutoConfiguration
@ComponentScan("org.hsweb.demo")
@MapperScan("org.hsweb.demo.dao")
@Controller
public class Run {

    public static void main(String[] args) {
        SpringApplication.run(Run.class, args);
    }

    @RequestMapping({"/", "/index.html"})
    public ModelAndView index() {
        return new ModelAndView("index");
    }

}

UserController.java 程式碼:

package org.hsweb.demo.controller;

import org.hsweb.demo.po.User;
import org.hsweb.demo.service.UserService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
public class UserController {
    @Resource
    UserService userService;

    @RequestMapping(value = "/users", method = RequestMethod.GET)
    public List<User> getAll() {
        return userService.selectAll();
    }

    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
    public User getById(@PathVariable("id") String id) {
        return userService.selectById(id);
    }

    @RequestMapping(value = "/user", method = RequestMethod.POST)
    public User add(@RequestBody User user) {
        userService.insert(user);
        return user;
    }

    @RequestMapping(value = "/user/{id}", method = RequestMethod.PUT)
    public User update(@PathVariable String id, @RequestBody User user) {
        user.setId(id);
        userService.update(user);
        return user;
    }

    @RequestMapping(value = "/user/{id}", method = RequestMethod.DELETE)
    public boolean delete(@PathVariable String id) {
        return userService.delete(id);
    }
}

UserDao.java 程式碼:

package org.hsweb.demo.dao;
import org.hsweb.demo.po.User;
import java.util.List;
public interface UserDao {
    User selectById(String id);

    List<User> selectAll();

    User selectByUserName(String username);

    void insert(User user);

    int update(User user);

    int deleteById(String id);
}

User.java 實體類

package org.hsweb.demo.po;

import java.io.Serializable;

public class User implements Serializable {
    private String id;

    private String username;

    private String password;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

UserMapper.xml程式碼:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.hsweb.demo.dao.UserDao">
    <resultMap id="UserResultMap" type="org.hsweb.demo.po.User">
        <id property="id" column="u_id" javaType="string" jdbcType="VARCHAR"/>
        <result property="username" column="username" javaType="String" jdbcType="VARCHAR"/>
        <result property="password" column="password" javaType="String" jdbcType="VARCHAR"/>
    </resultMap>

    <insert id="insert" parameterType="org.hsweb.demo.po.User">
        insert into t_user (id,username,password) values(#{id},#{username},#{password})
    </insert>

    <delete id="deleteById" parameterType="org.hsweb.demo.po.User">
        delete from t_user where id=#{id}
    </delete>

    <update id="update" parameterType="org.hsweb.demo.po.User">
        update t_user set password = #{password} where id=#{id}
    </update>

    <select id="selectById" parameterType="string" resultMap="UserResultMap">
        select * from t_user where id=#{id}
    </select>

    <select id="selectByUserName" parameterType="string" resultMap="UserResultMap">
        select * from t_user where username=#{username}
    </select>

    <select id="selectAll" resultMap="UserResultMap">
        select * from t_user
    </select>

</mapper>

UserService.java 程式碼:

package org.hsweb.demo.service;

import org.hsweb.demo.po.User;

import java.util.List;

public interface UserService {
    User selectById(String id);
    User selectByUserName(String username);

    List<User> selectAll();

    String insert(User user);

    boolean update(User user);

    boolean delete(String id);
}

SimpleUserService.java程式碼:

package org.hsweb.demo.service.impl;

import org.hsweb.demo.dao.UserDao;
import org.hsweb.demo.po.User;
import org.hsweb.demo.service.UserService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;
import java.util.UUID;

@Service("userService")
@Transactional(rollbackFor = Throwable.class)
public class SimpleUserService implements UserService {


    @Resource
    private UserDao userDao;

    @Override
    @Transactional(readOnly = true)
    public User selectById(String id) {
        return userDao.selectById(id);
    }

    @Override
    @Transactional(readOnly = true)
    public User selectByUserName(String username) {
        return userDao.selectByUserName(username);
    }

    @Override
    @Transactional(readOnly = true)
    public List<User> selectAll() {
        return userDao.selectAll();
    }

    @Override
    public String insert(User user) {
        user.setId(UUID.randomUUID().toString());
        userDao.insert(user);
        return user.getId();
    }

    @Override
    public boolean update(User user) {
        return userDao.update(user) == 1;
    }

    @Override
    public boolean delete(String id) {
        return userDao.deleteById(id) == 1;
    }
}

index.ftl 程式碼:

hello,spring-boot
${.now}
<br/>
GET: /users<br/>
POST: /user<br/>
PUT: /user/{id}<br/>
DELETE: /user/{id}<br/>

db.sql 文件程式碼:

DROP TABLE IF EXISTS t_user;
CREATE TABLE t_user (
  id       VARCHAR(64) PRIMARY KEY,
  username VARCHAR(128) NOT NULL,
  password VARCHAR(256) NOT NULL
);

logback.xml文件程式碼:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <conversionRule conversionWord="cl" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <!-- 控制檯輸出日誌 -->
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender"> <!---->
        <encoder>
            <pattern>%cl(%d{HH:mm:ss.SSS}){blue} > %highlight(%-5level %logger{35}) - %cl(%m%n){green}</pattern>
        </encoder>
        <withJansi>true</withJansi>
    </appender>
    <logger name="org.springframework" level="ERROR"/>
    <logger name="org.springframework.web" level="ERROR"/>
    <logger name="org.apache.tomcat" level="ERROR"/>
    <logger name="org.eclipse" level="ERROR"/>
    <logger name="org.hsweb" level="DEBUG"/>
    <logger name="freemarker.cache" level="ERROR"/>
    <logger name="jndi" level="ERROR"/>
    <logger name="org.apache.commons.beanutils" level="ERROR"/>
    <logger name="com.atomikos" level="ERROR" />
    <logger name="com.atomikos.jdbc.AtomikosConnectionProxy" level="ERROR"/>
    <root level="DEBUG">
        <appender-ref ref="Console"/>
    </root>
</configuration>

mybatis-config.xml文件程式碼:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 配置mybatis的快取,延遲載入等等一系列屬性 -->
    <settings>
        <!-- 全域性對映器啟用快取 -->
        <setting name="cacheEnabled" value="false"/>

        <!-- 查詢時,關閉關聯物件即時載入以提高效能 -->
        <setting name="lazyLoadingEnabled" value="true"/>

        <!-- 對於未知的SQL查詢,允許返回不同的結果集以達到通用的效果 -->
        <setting name="multipleResultSetsEnabled" value="true"/>

        <!-- 允許使用列標籤代替列名 -->
        <setting name="useColumnLabel" value="true"/>

        <!-- 不允許使用自定義的主鍵值(比如由程式生成的UUID 32位編碼作為鍵值),資料表的PK生成策略將被覆蓋 -->
        <setting name="useGeneratedKeys" value="false"/>

        <!-- 給予被巢狀的resultMap以欄位-屬性的對映支援 FULL,PARTIAL -->
        <setting name="autoMappingBehavior" value="PARTIAL"/>

        <!-- 對於批量更新操作快取SQL以提高效能 BATCH,SIMPLE -->
        <!-- <setting name="defaultExecutorType" value="BATCH" /> -->

        <!-- 資料庫超過25000秒仍未響應則超時 -->
        <!-- <setting name="defaultStatementTimeout" value="25000" /> -->

        <!-- Allows using RowBounds on nested statements -->
        <setting name="safeRowBoundsEnabled" value="false"/>

        <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn. -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>

        <!-- MyBatis uses local cache to prevent circular references and speed up repeated nested queries. By default (SESSION) all queries executed during a session are cached. If localCacheScope=STATEMENT
            local session will be used just for statement execution, no data will be shared between two different calls to the same SqlSession. -->
        <setting name="localCacheScope" value="SESSION"/>

        <!-- Specifies the JDBC type for null values when no specific JDBC type was provided for the parameter. Some drivers require specifying the column JDBC type but others work with generic values
            like NULL, VARCHAR or OTHER. -->
        <setting name="jdbcTypeForNull" value="OTHER"/>

        <!-- Specifies which Object's methods trigger a lazy load -->
        <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>

        <!-- 設定關聯物件載入的形態,此處為按需載入欄位(載入欄位由SQL指 定),不會載入關聯表的所有欄位,以提高效能 -->
        <setting name="aggressiveLazyLoading" value="false"/>
        <!--<setting name="proxyFactory" value="CGLIB"/>-->
    </settings>
</configuration>

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.hsweb</groupId>
    <artifactId>spring-boot-mybatis-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.build.locales>zh_CN</project.build.locales>

        <java.version>1.8</java.version>
        <javassist.version>3.20.0-GA</javassist.version>
        <project.build.jdk>${java.version}</project.build.jdk>
        <spring.boot.version>1.3.7.RELEASE</spring.boot.version>
        <freemarker.version>2.3.23</freemarker.version>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
                <configuration>
                    <mainClass>org.hsweb.demo.Run</mainClass>
                    <layout>ZIP</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${project.build.jdk}</source>
                    <target>${project.build.jdk}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.20</version>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>

        <!--新版本freemarker無法下載-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.freemarker</groupId>
                    <artifactId>freemarker</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>${freemarker.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>

        <!-- mybatis start-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.0.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib-nodep</artifactId>
            <version>3.2.2</version>
        </dependency>
        <dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

以上是整個專案的程式碼,下面是專案的格式展示:

## spring-boot+mybatis+freemarker 簡單演示

##執行
```bash
  $ mvn spring-boot:run
```
或者直接執行 org.hsweb.demo.Run.java 預設埠8080
## 目錄說明
```bash
 ------- src/main/java
 -------------|-----------controller #檢視控制器
 -------------|-----------dao        #DAO介面
 -------------|-----------po         #PO實體類
 -------------|-----------service    #Service介面和實現類
 -------------|-----------Run.java   #程式入口
 ----------resources
 -------------|-----------o.g.d.d.mybatis  #mybatis mapper配置檔案
 -------------|----------templates   # freemarker 模板檔案
 -------------|----------application.yml #專案配置檔案
 -------------|----------db.sql        #初始資料檔案
 -------------|----------logback.xml  #loback日誌配置檔案
 -------------|----------mybatis-config.xml   #mybatis基礎配置檔案
```

##注意
程式每次啟動都會執行db.sql
可在application.yml 取消配置
```yml
spring:
      datasource:
          schema: classpath:db.sql
```

執行專案啟動類:run.java然後在本地瀏覽器中輸入localhost:8080