springboot (5) 与数据库进行交互

来源:互联网 发布:淘宝卖医疗器械手续, 编辑:程序博客网 时间:2024/06/05 05:39

  本篇开始讲述springboot项目如何与数据库交互,本篇大致分为两部分:

  一.与数据库建立连接

  二.使用spring data  jpa与数据库进行交互


一、与数据库建立连接,本文采用MYSQL数据库

1.首先在pom.xml中添加MYSQL依赖jar

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

2.在application.properties中添加数据库配置如下:

spring.datasource.url = jdbc:mysql://192.168.0.88:3306/test       //数据库地址
spring.datasource.username = root                                                 //用户名
spring.datasource.password = root                                                  //密码
spring.datasource.driverClassName = com.mysql.jdbc.Driver     //老司机名称

spring.datasource.max-active=20            //最大活跃数
spring.datasource.max-idle=8           
spring.datasource.min-idle=8
spring.datasource.initial-size=10              //初始连接数     根据自己情况定义

3.项目启动,如果不报错,则配置完成


二、与数据库进行交互,目前大多数公司都使用JPA进行与数据库交互,好处是在将持久层编写更加规范,底层使用的是hibernate,因此若想使用mybatis进行开发的话,可

自行百度,本篇讲解如何使用JPA。

1.在pom.xml文件中引入依赖JAR

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

2.在application.properties中添加JPA配置

//设置数据库类型
spring.jpa.database = MYSQL
//是否显示SQL语句
spring.jpa.show-sql = true
//自动更新
spring.jpa.hibernate.ddl-auto = update
//实体映射命名
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
//配置方言
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

3.定义实体,通过JPA生成表结构

@Entity    //实体注解,生成表结构
public class Father {
 
@Id    //主键注解,由于本人项目中主键一般使用UUID,因此定义String类型,若使用int类型,可以再加一个@GeneratedValue,主键可以设置生成策略

private String id;
private String name;
private Integer age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}

4.编写DAO

public interface FatherDao extends CrudRepository<Father, String>{
}

解析:继承的CrudRepository接口是JPA中常用的一个不含分页的接口,JPA包含能继承的接口有一下几种:

 A、epository:仅仅是一个标识,表明任何继承它的均为仓库接口类。

 B、CrudRepository:继承Repository,实现了一组CRUD操作相关的方法。
 C、PagingAndSortingReposito
ry:继承CrudRepository,实现了一组分页排序相关的方法。
 D、JpaRepository:继承PagingAndSortingRepository,实现一组JPA规范的相关方法。
 E、自定义的XxxxRepository:需要继承JpaRepository,这样的XxxxRepository接口就具备了通用的数据访问控制层的能力。
 F、JpaSpecificationExecutor:不属于Repository体系,实现一组JPACriteria查询相关的方法。
可以根据自己的实际需求继承相应的接口,常用的接口CrudRepository与PagingAndSortingReposito。

到此,就可以直接调用DAO层方法了,有人问,不用写DAO的实现DaoImpl么,当然不用,不然为什么那么多人想使用JPA呢,方便快捷。下面还有更方便的。

如果你仅仅是继承了这个接口,目前只能使用其中定义的一些方法,比如save(),delete()等一些通用的方法,那就有人问了,我如果有一些根据条件进行的GRUD操作呢?

当然这就是JPA的强大之处,支持命名即方法,简单的说就是 定义一个方法名,比如说 findByName(),不需要写实现,JPA即可自动通过名字这个属性进行查询,不过命名的规范需要参照JPA的命名规范了。还要注意一点,自定义的接口需要在DAO中声明,切记不要忘,方法名一定要驼峰命名法,属性条件一定要与实体中属性相同。

public interface FatherDao extends CrudRepository<Father, String>{

    public  String findByName(String  name);

}

其实,除了这一种自定义方法外,还有别的方法,大家可以自行百度。

4.Service中调用

首先注入Dao,其次调用即可

@Autowired
    private FatherDao fatherDao;
    
    @Transactional
    public Father save(Father father){
        return fatherDao.save(father);
    }
   

到此,与数据库的交互最基本的操作就是如此,大家可以深入自行研究,比如级联操作,多对多关系,复杂查询等。。。



原创粉丝点击