Spring boot 初學教程(二)

好的,寫了初學教程,就順手寫一下關於數據庫使用這裏的,說實話我也是邊學邊寫的。如果有些問題的話,也希望大家可以指出。哈哈。

一.首先說說關於配置文件:
1 Spring Boot 提供的 SpringApplication 類會搜索並加載 application.properties 文件來獲取配置屬性值。

上一章講述了項目的生成。在項目生成後,application.properties這個文件的位置是在resources下的。
這裏寫圖片描述
在這文件裏,可以設置一些環境變量以及配置。例如這樣

#這些是配置文件
spring.datasource.url = jdbc:mysql://localhost:3306/hello
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
#spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy

# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect


#這個是環境變量 
name=zhangsan

環境變量可以這樣用:

 @Value("${name}")
    private String name;

    @RequestMapping("/b")
    String home() {
        return String.format("Hello %s !", name);
    }

二.好了,下來說說關於數據庫連接的:
所有的項目,倘若沒有數據交互,那基本上已經是一個廢項目了(就像一個鹹魚一樣)。在上邊的數據庫配置填完之後,就可以來做數據庫的相關操作了。

首先來創建一個實體對象,在這裏,要和數據庫的表所關聯。
其中有個細節的地方,在name和desc上,沒有直接用名稱,因爲其在數據庫中的名稱是關鍵字,不能直接使用,所以就加上了 那兩個`

package com.meizu.example.entity;


import javax.persistence.*;

/**
 * Created by yangrui1 on 2016/11/21.
 */
@Entity
@Table(name = "member")
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    @Column(name = "`name`")
    private String name;

    private int age;

    private String password;

    @Column(name = "`DESC`")
    private String desc;


    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getPassword() {
        return password;
    }

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

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public Member() {

    }

    public Member(Integer id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "Member{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", passward='" + password + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}

接下來就要有與之對應的dao層:

package com.meizu.example.dao;

import com.meizu.example.entity.Member;
import org.springframework.data.repository.CrudRepository;
import org.springframework.transaction.annotation.Transactional;

/**
 * Created by yangrui1 on 2016/11/21.
 */
@Transactional
public interface MemberDao extends CrudRepository<Member, Integer> {
    //通過desc查詢
    public Member getByDesc(String desc);

}

dao是一個interface,繼承了CrudRepository,並要填上自己的實體的對象類型。來一起看看CrudRepository這個類

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.data.repository;

import java.io.Serializable;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.Repository;

@NoRepositoryBean
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
    <S extends T> S save(S var1);

    <S extends T> Iterable<S> save(Iterable<S> var1);

    T findOne(ID var1);

    boolean exists(ID var1);

    Iterable<T> findAll();

    Iterable<T> findAll(Iterable<ID> var1);

    long count();

    void delete(ID var1);

    void delete(T var1);

    void delete(Iterable<? extends T> var1);

    void deleteAll();
}

這些方法都是可以不用去寫的。自動有實現,除非要定製一些特殊的方法纔要去寫。
如果要用某個字段去查詢,就這樣

    //通過desc查詢
    public Member getByDesc(String desc);

完全不用謝實現類,賊尼瑪方便、、、
而增加刪除直接調用接口就好了。 至於修改update,仍然是save方法,只是在這裏就需要填入一個id了。有id是修改,沒有id就是新增。。。

有的時候需要自定義一些語句怎麼辦呢?
查詢的是這樣的

   /**
     * 通過desc和name查詢
     *
     * @param desc
     * @param name
     * @return
     */
    @Query(value = "select * from member m where `desc`=?1 and `name`=?2 ", nativeQuery=true)
    public Member getByDescAndName(String desc, String name);

如果是增刪改,那麼就要再加上一個
@Modifying

 // 使用query 註解進行update 或者 delete 語句時,需要添加 modifying 註解修飾  
    @Query(value="delete from member",nativeQuery=true)  
    @Modifying  
    public void deleteAllBySql();  

三.修改端口:
值得一提的是,如果想要對端口啓動進行修改。不像以前的的要在配置文件裏修改,現在直接在那個主controller裏修改即可。但是要要實現EmbeddedServletContainerCustomizer類

@RestController
@SpringBootApplication
public class SpringBootDemoApplication  implements EmbeddedServletContainerCustomizer {

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

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        container.setPort(80);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章