使用数据库是开发基本应用的基础。借助于开发框架,我们已经不再编写原始的访问数据库的代码,也不用调用JDBC或者连接池等诸如此类的被称作为底层的代码了。spring boot包含了一个功能强大的资源库,为使用spring boot的开发者提供了更加简便的接口进行访问。
一、使用MySQL:
对于传统关系型数据库来说,spring boot使用JPA资源库来实现对数据库的操作,JPA就是为POJO提供持久化的标准规范,即将java的普通对象通过对象关系映射ORM持久化到数据库中。
1、MySQL依赖配置:
<dependencies>
<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>
</dependencies>2、实体建模:
首先创建一些普通对象,用来与数据库的表建立映射关系,然后使用JPA对数据库进行增删改查等存取操作。
@Entity
@Table(name = "user")
public class User implements java.io.Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createdate;
public User() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public Date getCreatedate() {
return createdate;
}
public void setCreatedate(Date createdate) {
this.createdate = createdate;
}
}3、实体持久化
以上已使用普通对象(POJO)与数据库建立映射关系(ORM),接下来使用JPA实现持久化。
User实体使用JPA进行持久化如下所示。它是一个接口,并继承于JPA资源库JpaRepository接口,使用注解@Repository将这个接口也定义为一个资源库,使他能被其他程序引用,并为其他程序提供存取数据库的功能。
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByNameLike(String name);
User readByName(String name);
List<User> getByCreatedateLessThan(Date star);
} 这样就实现存取数据库的功能了,现在可以对数据库进行增删改查、分页查询、指定排序的字段等操作了。
使用JPA不需要对接口有任何实现的代码,也不需要SQL语句。JpaRepository继承于PagingAndSortingRepository,提供了分页和排序功能,PagingAndSortingRepository继承于CrudRepository,提供了简单的增删改查功能。
JPA还提供了一些自定义声明方法的规则,如,findBy、readBy,getBy作为方法名的前缀,拼接实体类中的属性字段,首字母大写,并可选拼接一些SQL查询关键字来组合成一个查询方法。如上面代码。
4、测试验证:
增加一个JPA配置类,其中@EnableTransactionManagement 启用了JPA的事务管理;@EnableJpaRepositories启用了JPA资源库并指定了上面定义的接口资源库的位置;@EntityScan指定了定义实体的位置,他将导入我们定义的实体。
@Order(Ordered.HIGHEST_PRECEDENCE)
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
@EnableJpaRepositories(basePackages = "dbdemo.**.repository")
@EntityScan(basePackages = "dbdemo.**.entity")
public class JpaConfiguration {
@Bean
PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor(){
return new PersistenceExceptionTranslationPostProcessor();
}
}需要本地安装MySQL数据库,之后创建一个数据库,可以自定义命名为“shenchong”,配置密码123456。数据库的表结构不用创建,在程序运行的时候将会按照实体的定义自动创建。
然后在application.yml中添加配置,用来设置数据源和JPA的工作模式:
spring:
datasource:
url: jdbc:mysql://localhost:3306/shenchong?useSSL=false
username: root
password: 123456
jpa:
database: MYSQL
show-sql: true
#Hibernate ddl auto (validate|create|create-drop|update)
hibernate:
ddl-auto: update
naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5Dialect5、编写测试程序:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {JpaConfiguration.class})
public class MysqlTest {
private static Logger logger = LoggerFactory.getLogger(MysqlTest.class);
@Autowired
UserRepository userRepository;
@Before
public void initData(){
userRepository.deleteAll();
User user = new User();
user.setName("user");
user.setCreatedate(new Date());
userRepository.save(user);
Assert.notNull(user.getId());
}
@Test
public void findPage(){
Pageable pageable = new PageRequest(0, 10, new Sort(Sort.Direction.ASC, "id"));
Page<User> page = userRepository.findAll(pageable);
Assert.notNull(page);
for(User user : page.getContent()) {
("====user==== user name:{}",user.getName());
}
}
















