好的,寫了初學教程,就順手寫一下關於數據庫使用這裏的,說實話我也是邊學邊寫的。如果有些問題的話,也希望大家可以指出。哈哈。
一.首先說說關於配置文件:
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);
}
}