Spring Boot数据库基础操作

使用Spring-Data-JPA组件操作数据库。
JPA(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate、TopLink等。
Spring-Data-JPA是Spring对Hibernate的整合。

添加依赖

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

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

配置文件加数据库配置:

spring:

  profiles:
    active: dev

  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dbgirl
    username: root
    password: 123456
  jpa:
    hibernate:
      ddl-auto: create
    show-sql: true

建立数据库对应的一个类,这里是Girl的bean,

@Entity
public class Girl {
    @Id
    @GeneratedValue
    private Integer id;     //表示主键,并且自增

    private String cupSize;

    private Integer age;

    private String content;

    public Girl() {
        //必须生成无参的构造方法,不然数据库操作会报错
    }

    public Integer getId() {
        return id;
    }

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

    public String getCupSize() {
        return cupSize;
    }

    public void setCupSize(String cupSize) {
        this.cupSize = cupSize;
    }

    public Integer getAge() {
        return age;
    }

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

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

接着建好mysql数据库dbgirl,然后ide点击运行。运行后用Navicat查看dbgir数据库,发现girl表已经建好了。
这里其实配置文件中设置了每次运行都先删除再创建表:

jpa:
    hibernate:
      ddl-auto: create
    show-sql: true

ddl-auto: update则不会重新创建。

操作数据库

1、新建Girl的bean,上面已经做过了。
2、新建一个接口GirlRepository继承自JpaRepository

public interface GirlRepository extends JpaRepository<Girl,Integer>{}
//Girl为数据库表对应的实体,Integer代表主键

3、增加url映射方法

    @Autowired
    private GirlRepository girlRepository;

    /**
     * 获取所有的女生
     * @return
     */
    @GetMapping(value = "/girls")
    public List<Girl> girlList(){
        return girlRepository.findAll();
    }

over,直接运行。仅仅只要三步,多么的简单啊。

如果要根据age也就是年龄来查找,则

public interface GirlRepository extends JpaRepository<Girl,Integer>{
    //通过年龄来查询,这里会查找findByAge中by后的age是否在Girl中有,没有则会报错
    //参考链接http://blog.csdn.net/pengdingxu10/article/details/72674900
    public List<Girl> findByAge(Integer age);
}

GirlController中
    /**
     * 根据年龄查询
     * @param age
     * @return
     */
    @GetMapping(value = "/girls/age/{age}")
    public List<Girl> girlListByAge(@PathVariable("age") Integer age){
        return girlRepository.findByAge(age);
    }

只查找一条记录,用findOne。

    /**
     * 查询一个女生
     * @param id
     * @return
     */
    @GetMapping(value = "/girls/{id}")
    public Girl girlFindOne(@PathVariable("id") Integer id){
        return girlRepository.findOne(id);
    }

根据id更新一个女生

/**
     * 更新
     * @param id
     * @param cupSize
     * @param age
     * @param content
     * @return
     */
    @PutMapping(value = "/girls/{id}")
    public Girl girlUpdate(@PathVariable("id") Integer id,
                           @RequestParam("cupSize") String cupSize,
                           @RequestParam("age") Integer age,
                           @RequestParam("content") String content){
        Girl girl = new Girl();
        girl.setId(id);
        girl.setCupSize(cupSize);
        girl.setAge(age);
        girl.setContent(content);

        return girlRepository.save(girl);//返回保存的girl
    }

根据id删除一条记录

     /**
     * 删除
     * @param id
     */
    @DeleteMapping(value = "/girls/{id}")
    public void girlDelete(@PathVariable("id") Integer id){
        girlRepository.delete(id);
    }

使用事务

使用@Transactional

@Service
public class GirlService {

    @Autowired
    private GirlRepository girlRepository;

    @Transactional
    public void insertTwo(){
        Girl girlA = new Girl();
        girlA.setCupSize("B");
        girlA.setAge(22);
        girlA.setContent("古灵精怪");
        girlRepository.save(girlA);

        Girl girlB = new Girl();
        girlB.setCupSize("F");
        girlB.setAge(16);
        girlB.setContent("人小鬼大");
        girlRepository.save(girlB);
    }
}

保存数据遇到的问题

保存女生一条数据发现在mysql中中文是?号,参考以下链接解决
Spring Boot下Mysql数据库的中文乱码问题分析
mysql如何更改character-set-server默认为latin1
window下重启mysql
启动:输入 net stop mysql
停止:输入 net start mysql

源码

Spring Boot基础

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值