(一)前期准备
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);
}
}