springboot-入门(二)

目录

 

1、什么是JPA?

2、Hibernate?

3、什么是Spring Data?

4、什么是Spring Data JPA?

5、在Spring boot 项目中使用JPA-hibernate

1、在pom文件中添加依赖,

2、在项目的resource目录中,新建一个配置文件application.properties。

3、编写数据对应的实体类

4、编写dao层的代码

5、编写service代码

6、编写controller

 6、简单了解 Spring Data   JPA    

1、spring data JPA 给我们提供几个常用的接口。

1、CrudRepository

2、Repository

3、PagingAndSortingRepository

4、JpaRepository

5、JpaSpecificationExecutor

7、Springboot 项目中使用JdbcTemplate

1、pom中引入依赖

2、编写使用JdbcTemplate的dao

3、编写service

4、编写controller


1、什么是JPA?

JPA全称Java Persistence API.JPASun官方提出的Java持久化规范,通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

本文代码地址:https://download.csdn.net/download/m0_37985112/10689331

2、Hibernate?

Hibernate就是JPA的一种实现,它是一个开源的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

3、什么是Spring Data?

Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得数据库的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。此外,它还支持基于关系型数据库的数据服务,如Oracle RAC等。对于拥有海量数据的项目,可以用Spring Data来简化项目的开发,就如Spring Framework对JDBC、ORM的支持一样,Spring Data会让数据的访问变得更加方便。

4、什么是Spring Data JPA?

 Spring Data是一个开源框架,在这个框架中Spring Data JPA只是这个框架中的一个模块,所以名称才叫Spring Data JPA。如果单独使用JPA开发,你会发现这个代码量和使用JDBC开发一样有点烦人,所以Spring Data JPA的出现就是为了简化JPA的写法,让你只需要编写一个接口继承一个类就能实现CRUD操作了。

5、在Spring boot 项目中使用JPA-hibernate

本文选用mariadb作为操作的关系行

1、在pom文件中添加依赖,

因为在上一篇博客中,我们已经配置了springboot的父工程,所有可以不需要指定下面依赖版本号。

		<!-- 添加MySQL数据库驱动依赖包. -->
		<dependency>
				<groupId>mysql</groupId>
				<artifactId>mysql-connector-java</artifactId>
		</dependency>
		
		<!-- 添加Spring-data-jpa依赖. -->
		<dependency>
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>                                                                                              

2、在项目的resource目录中,新建一个配置文件application.properties。

配置mysql数据库的链接,并配置JPA相关配置。文件内容如下:

########################################################
###datasource -- 指定mysql数据库连接信息.
########################################################
spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = root
spring.datasource.password = 123456
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


########################################################
### Java Persistence Api --  Spring jpa的配置信息.
########################################################
# 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
#[org.hibernate.cfg.ImprovedNamingStrategy  #org.hibernate.cfg.DefaultNamingStrategy]
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

上面文件中大多数配置信息大家都可以看懂,其中spring.jpa.hibernate.ddl-auto = update。一下是ddl配置的几种意义。

ddl-auto:create----每次运行该程序,没有表格会新建表格,表内有数据会清空

ddl-auto:create-drop----每次程序结束的时候会清空表

ddl-auto:update----每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新

ddl-auto:validate----运行程序会校验数据与数据库的字段类型是否相同,不同会报错

3、编写数据对应的实体类

/**
 * 创建了一个实体类。
 * 
 * 如何持久化呢?
 * 
 * 1、使用@Entity进行实体类的持久化操作,当JPA检测到我们的实体类当中有
 * 
 * @Entity 注解的时候,会在数据库中生成对应的表结构信息。
 */
@Entity
public class Cat {
	
	/**
	 * 使用@Id指定主键.
	 * 
	 * 使用代码@GeneratedValue(strategy=GenerationType.AUTO)
	 * 指定主键的生成策略,mysql默认的是自增长。
	 * 
	 */
	@Id @GeneratedValue(strategy=GenerationType.AUTO)
	private int id;//主键.
	
	private String catName;//姓名. cat_name

	//com.alibaba.fastjson.annotation.JSONField
	@JSONField(format="yyyy-MM-dd HH:mm")
	private Date createTime;//创建时间.


	private int catAge;//年龄. cat_age;


	/*
 * 我们不想返回remarks?
 * serialize:是否需要序列化属性.
 */
	@JSONField(serialize=false)
	private String remarks;//备注信息.


	public int getId() {
		return id;
	}

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

	public String getCatName() {
		return catName;
	}

	public void setCatName(String catName) {
		this.catName = catName;
	}

	public int getCatAge() {
		return catAge;
	}

	public void setCatAge(int catAge) {
		this.catAge = catAge;
	}

	public Date getCreateTime() {
		return createTime;
	}

	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

	public String getRemarks() {
		return remarks;
	}

	public void setRemarks(String remarks) {
		this.remarks = remarks;
	}
}

   4、编写dao层的代码

可以在项目中新建repository目录,并新建如下类,dao层就已经ok了。

/**
 * Integer是cat数据库的主键类型
 *
 */
public interface CatRepository extends CrudRepository<Cat, Integer>{

}

5、编写service代码

@Service
public class CatService {
	
	@Resource
	private CatRepository catRepository;
	
	/**
	 * save,update ,delete 方法需要绑定事务.
	 * 
	 * 使用@Transactional进行事务的绑定.
	 * 
	 * @param cat
	 */
	
	//保存数据.
	@Transactional
	public void save(Cat cat){
		catRepository.save(cat);
	}
	
	//删除数据》
	@Transactional
	public void delete(int id){
		catRepository.delete(id);
	}
	
	//查询数据.
	public Iterable<Cat> getAll(){
		return catRepository.findAll();
	}
	
}

6、编写controller

@RestController
@RequestMapping("/cat")
public class CatController {
	
	@Resource
	private CatService catService;

	@RequestMapping("/getAll")
	public Iterable<Cat> getAll(){
		return catService.getAll();
	}
	
}

            到此已经准备完毕,可以先在数据库添加一条任意数据,然后使用启动类启动项目,在浏览器访问如下链接:

             http://localhost:8080/cat/getAll 

             如果页面显示出所有的数据库中该表的数据即可。

 6、简单了解 Spring Data   JPA    

截至到现在我们已经简单在spring boot 中简单使用了spring Data JPA  ,接下来我们简单总结一下:

1、spring data JPA 给我们提供几个常用的接口。

其中最常用的就是前三个接口。

 1、CrudRepository

我们刚才项目中cat的dao层已经使用过,这个接口提供了非常简单的增删查,以及一些批量处理。

2、Repository

Repository 接口是 Spring Data 的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法。

如果使用这个接口需要注意一下几点:

1. Repository是一个空接口,即是一个标记接口;
           2. 若我们定义的接口继承了Repository,则该接口会被IOC容器识别为一个Repository Bean纳入到IOC容器中,进而可以                  在该接口中定义满足一定规范的方法。
           3. 实际上也可以通过@RepositoryDefinition,注解来替代继承Repository接口。
           4. 查询方法以find | read | get开头;
           5. 涉及查询条件时,条件的属性用条件关键字连接,要注意的是条件属性以首字母大写。
           6.使用@Query注解可以自定义JPQL语句实现更灵活的查询。

3、PagingAndSortingRepository

           该接口提供了分页与排序功能   
                 --Iterable<T> findAll(Sort sort); //排序    
                 --Page<T> findAll(Pageable pageable); //分页查询(含排序功能)

此接口的注意事项:

    1、 查询方法 以 get | find | read 开头.

    2、 涉及查询条件时,条件的属性用条件关键字连接,要注意的是条件属性以首字母大写。

使用实例如下:

public interface CatRepository extends PagingAndSortingRepository<Cat, Integer>{
	
	
	/**
	 * 1/ 查询方法 以 get | find | read 开头.
	 * 2/ 涉及查询条件时,条件的属性用条件关键字连接,要注意的是条件属性以首字母大写。
	 */
	
	//根据catName进行查询 : 根据catName进行查询.
	public Cat findByCatName(String catName);
	
	/**
	 * 如何编写JPQL语句, 
	 * Hibernate  -- HQL语句.
	 * JPQL 语句 和HQL语句是类似的.
	 */
	@Query("from Cat where catName=:cn")
	public Cat findMyCatName(@Param("cn")String catName);
}

4、JpaRepository

查找所有实体,排序、查找所有实体,执行缓存与数据库同步

5、JpaSpecificationExecutor

           不属于Repository体系,实现一组 JPA Criteria 查询相关的方法,封装  JPA Criteria 查询条件。通常使用匿名内部类的方式来创建该接口的对象。

7、Springboot 项目中使用JdbcTemplate

1、pom中引入依赖

同样因为我们的项目的父工程是spring-boot,所以可以不设置版本号。如果已经引用JPA也可以不引用此依赖,比如我们上文已经使用到了spring-boot-starter-data-jpa。所以也可以在此不再修改pom文件。

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


<!-- 如果在JPA已经加入的话,则可以不用引入以上的配置。  -->
<dependency>
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

2、编写使用JdbcTemplate的dao

@Repository
public class CatDao {
	
	@Resource
	private JdbcTemplate jdbcTemplate;
	
	public Cat selectByCatName(String catName){
		/**
		 * 1、定义一个Sql语句;
		 * 2、定义一个RowMapper.
		 * 3、执行查询方法.
		 */
		String sql = "select *from cat where cat_name=?";
		RowMapper<Cat> rowMapper = new BeanPropertyRowMapper<>(Cat.class);
		Cat cat = jdbcTemplate.queryForObject(sql, new Object[]{catName}, rowMapper);
		return cat;
	}
}

3、编写service

service的编写都类似,只是引入的dao层不同。如下所示:

@Service
public class CatService {

	
	@Resource
	private CatDao catDao;

	//因为是查询,不需要事物 @Transactional
	public Cat selectByCatName(String catName){
		return catDao.selectByCatName(catName);
	}
}

4、编写controller

               controller编写类似,如下所示

@RestController
@RequestMapping("/cat")
public class CatController {
	
	@Resource
	private CatService catService;

	
	@RequestMapping("/selectByCatName")
	public Cat selectByCatName(String catName){
		return catService.selectByCatName(catName);
	}
}

            截止到现在springboot 中使用JdbcTemplate,已经完毕,依旧启动类启动项目,浏览器进行测试。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值