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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值