好的,写了初学教程,就顺手写一下关于数据库使用这里的,说实话我也是边学边写的。如果有些问题的话,也希望大家可以指出。哈哈。
一.首先说说关于配置文件:
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);
}
}