本项目内容为Spring Boot教程样例。目的是经过学习本系列教程,读者能够从0到1掌握spring boot的知识,而且能够运用到项目中。如您以为该项目对您有用,欢迎点击收藏和点赞按钮,给予支持!!教程连载中,欢迎持续关注!java
IDE: Eclipse Neon
Java: 1.8
Spring Boot: 1.5.12
数据库:MYSQLmysql
经过Spring Boot 教程(一):项目构建,完成Restful API的学习,相信你们已经能够快速搭建一个spring boot的脚手架。
本章将进一步讲解spring boot,结合SpringDataJPA完成数据层访问。
SpringDataJPA是Spring Data的一个子项目,经过提供基于JPA的Repository极大的减小了JPA做为数据访问方案的代码量,你仅仅须要编写一个接口集成下SpringDataJPA内部定义的接口便可完成简单的CRUD操做。git
在pom.xml文件中添加以下:web
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
在applicaiton.properties文件中配置数据库链接信息:spring
spring.datasource.url = jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8 spring.datasource.username = root spring.datasource.password = 123456 spring.datasource.driverClassName = com.mysql.jdbc.Driver spring.jpa.properties.hibernate.hbm2ddl.auto=update spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate的配置属性:
create:每次加载hibernate时都会删除上一次的生成的表,而后根据你的model类再从新来生成新表,哪怕两次没有任何改变也要这样执行,这就是致使数据库表数据丢失的一个重要缘由。
create-drop:每次加载hibernate时根据model类生成表,可是sessionFactory一关闭,表就自动删除。
update:最经常使用的属性,第一次加载hibernate时根据model类会自动创建起表的结构(前提是先创建好数据库),之后加载hibernate时根据model类自动更新表结构,即便表结构改变了但表中的行仍然存在不会删除之前的行。要注意的是当部署到服务器后,表结构是不会被立刻创建起来的,是要等应用第一次运行起来后才会。
validate:每次加载hibernate时,验证建立数据库表结构,只会和数据库中的表进行比较,不会建立新表,可是会插入新值。sql
建立包com.example.demo.model,建立实体User数据库
@Entity @Table(name = "T_USER") public class User implements Serializable { private static final long serialVersionUID = 2711201708013908747L; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private Long id; @Column(name = "name", length = 255) private String name; @Column(name = "pass", length = 255) private String pass; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } }
建立包com.example.demo.domain,建立UserRepository接口实现对该实体的数据访问segmentfault
public interface UserRepository extends JpaRepository<User, Long> { User findByName(String name); User findByNameAndPass(String name, String pass); @Query("from User u where u.name=:name") User findUser(@Param("name") String name); }
UserRepository接口继承了JpaRepository,也就是说UserRepository拥有了JpaRepository接口及父类接口的全部方法实现,因此咱们并不须要添加任何数据操做代码就能够完成数据操做,JpaRepository接口对条件查询以及保存集合数据添加了对应的方法。api
在com.example.demo.api下面建立User控制器UserController, 用于测试web访问浏览器
@RestController public class UserController { @Autowired private UserRepository userDao; @RequestMapping("/saveUser") public void save(){ User user = new User(); user.setName("ajay"); user.setPass("123456"); userDao.save(user); } @RequestMapping("/delete") public void delete(String name){ User user = userDao.findByName(name); userDao.delete(user); } @RequestMapping("/updateUser") public void update(String name){ User user = userDao.findByName(name); user.setPass("123456789"); userDao.save(user); } @RequestMapping("/findByName") public User findByName(String name){ return userDao.findByName(name); } }
在Application类中,启动程序。浏览器输入http://localhost:8080/saveUser
http://localhost:8080/findByName?name=ajay
代码:gitee.com/shaojiepeng/SpringBootCourse