0
点赞
收藏
分享

微信扫一扫

四、SpringBoot入门之数据库操作(以hibernate为例)

(一)前期准备
  1.准备依赖

<!--数据库相关 start-->
<!--连接数据库-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--mysql数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--数据库相关 end-->

  2.准备配置文件(以hibernate为例)

spring:
profiles:
# 激活哪个环境(dev 测试环境 prod 生产环境)
active: dev
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/dbgirl
username: root
password: root
# spring boot集成了hibernate
jpa:
hibernate:
# create 每次都先删除表,再创建表
# create-drop 每次应用停止,删除表
# update 不创建表,保留原有数据
# none 不做任何动作
# valiad 验证类中的属性与表中的字段是否一致,不一致会报错
ddl-auto: create-drop
# 显示sql语句
show-sql: true

(二)创建生成表的类
  Hibernate中通过注解,可以自动将类转换成sql语句,生成表,代码如下:

/**
* @author 咸鱼
* @date 2018/6/27 7:26
* “@Entity”:表名
* “@Id”:主键
* “@GeneratedValue”:相当于数据库中的auto-increment,主键自增策略
*/
@Entity
public class Girl {
@Id
@GeneratedValue
private Integer id;

private String cupSize;

private Integer age;

/**
* 当查询的时候返回的实体类是一个对象实例,是hibernate动态通过反射生成的,
* hibernate框架会调用这个默认构造方法来构造实例对象。
* 若有多个构造方法,无参构造方法必须有;若无其他构造方法,则无参构造方法可以不写,
* 因为类默认会有一个无参构造方法
*/
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;
}
}

(三)查询
  基本的流程和SpringMVC相似,Controller、Service、Dao层,不过Hibernate的Dao层和Mybatis的Dao层不太一样。Mybatis的Dao层是一个纯接口配合Mybatis配置文件来达到与数据库交互的效果。而Hibernate的Dao层也是一个接口,不过需要继承“JpaRepository

/**
* @author 咸鱼
* @date 2018/6/27 8:02
* JpaRepository<Girl, Integer> 参数一:想要查询的类(表) 参数二:主键的类型
*/
public interface GirlRepository extends JpaRepository<Girl, Integer> {
}

  JpaRepository这个类本身集成了一些与数据库交互的方法,由于我们的GirlRepository接口继承了这个类,也就继承了这些方法,比如查询数据库中的所有记录:

@Service
public class GirlServiceImpl implements GirlService {
private GirlRepository girlRepository;

/**
* 构造器注入
*/
@Autowired
public GirlServiceImpl(GirlRepository girlRepository) {
this.girlRepository = girlRepository;
}

@Override
public List<Girl> getAllGirls() {
//findAll()方法继承自JpaRepository类
return girlRepository.findAll();
}
/**
* 增
*/
private Girl insertGirl(Girl girl){
return girlRepository.save(girl);
}
/**
* 删
*/
private void deleteGirl(Girl girl){
girlRepository.delete(girl);
}
/**
* 改
*/
private Girl updateGirl(Girl girl){
return girlRepository.save(girl);
}
/**
* 按条件查
*/
private List<Girl> selectGirlList(Girl girl){
//新知识点
Example<Girl> girlExample = Example.of(girl);
return girlRepository.findAll(girlExample);
}
/**
* 查所有
*/
private List<Girl> selectAllGirls(){
return girlRepository.findAll();
}
/**
* 按id查
*/
private Girl selectGirlById(Integer id){
//jdk1.8新出的,以应对NullPointerException异常
Optional<Girl> girlOptional = girlRepository.findById(id);
//若girlOptional不为null,则返回girl,否则返回null
return girlOptional.orElse(null);
}
}


举报

相关推荐

0 条评论