博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot 3 Hibernate
阅读量:6419 次
发布时间:2019-06-23

本文共 5035 字,大约阅读时间需要 16 分钟。

JdbcTemplate

Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。

JdbcTemplate 是在JDBC API基础上提供了更抽象的封装,并提供了基于方法注解的事务管理能力。

通过使用SpringBoot自动配置功能并代替我们自动配置beans.

pom.xml添加依赖

mysql
mysql-connector-java
5.1.21
org.springframework.boot
spring-boot-starter-jdbc

在application.properties中添加:

spring.datasource.url=jdbc:mysql://localhost:3306/testspring.datasource.username=rootspring.datasource.password=hongda$123456spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.jpa.properties.hibernate.hbm2ddl.auto=update

如果不行再添加一部分:

########################################################### Java Persistence Api######################################################### Specify the DBMSspring.jpa.database = MYSQL# Show or not log for each sql queryspring.jpa.show-sql = true# Hibernate ddl auto (create, create-drop, update)spring.jpa.hibernate.ddl-auto = update # Naming strategy 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

除了这种方式添加配置属性以外,还有application.yml方式

如果使用tomcat-jdbc-{version}.jar,可以自动为我们配置DataSource

org.springframework.boot
spring-boot-starter-jdbc
org.apache.tomcat
tomcat-jdbc
spring.datasource.schema=xxxx-db.sql 可以定义你的建库文件spring.datasource.data=xxxx-data.sql  可以定义你的数据文件spring.datasource.initialize=true|false 可以决定是不是要初始化这些数据库文件spring.datasource.continueOnError=true|false 有了错误是否继续运行

Spring的jdbc是自动配置的,通过@AutoWired来注入到bean中使用

定义数据访问操作

@Servicepublic class UserServiceImpl implements UserService {    @Autowired    private JdbcTemplate jdbcTemplate;    @Override    public void create(String name, Integer age) {        jdbcTemplate.update("insert into USER(NAME, AGE) values(?, ?)", name, age);    }    @Override    public void deleteByName(String name) {        jdbcTemplate.update("delete from USER where NAME = ?", name);    }    @Override    public Integer getAllUsers() {        return jdbcTemplate.queryForObject("select count(1) from USER", Integer.class);    }    @Override    public void deleteAllUsers() {        jdbcTemplate.update("delete from USER");    }}

但是这种方式不怎么好用,为了解决大量枯燥的数据操作,引入ORM框架Hibernate

Hibernate中Spring-data-jpa

为了解决抽象各个Java实体基本的“增删改查”操作,我们通常会以泛型的方式封装一个模板Dao来进行抽象简化,但是这样依然不是很方便,

我们需要针对每个实体编写一个继承自泛型模板Dao的接口,再编写该接口的实现。

虽然一些基础的数据访问已经可以得到很好的复用,但是在代码结构上针对每个实体都会有一堆Dao的接口和实现

mysql
mysql-connector-java
5.1.21
org.springframework.boot
spring-boot-starter-data-jpa

在application.properties中添加配置

创建实体,通过ORM框架映射到数据库中

@Entitypublic class User {    @Id    @GeneratedValue    private Long id;    @Column(nullable = false)    private String name;    @Column(nullable = false)    private Integer age;    public User(){}    public User(String name, Integer age) {        this.name = name;        this.age = age;    }    public Long getId() {        return id;    }    public void setId(Long 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;    }}

创建数据访问接口:

public interface UserRepository extends JpaRepository
{ User findByName(String name); User findByNameAndAge(String name, Integer age); @Query("from User u where u.name=:name") User findUser(@Param("name") String name);}

 添加测试:

@Autowired    private UserRepository userRepository;    @Test    public void test() throws Exception {        // 创建10条记录        userRepository.save(new User("AAA", 10));        userRepository.save(new User("BBB", 20));        userRepository.save(new User("CCC", 30));        userRepository.save(new User("DDD", 40));        userRepository.save(new User("EEE", 50));        userRepository.save(new User("FFF", 60));        userRepository.save(new User("GGG", 70));        userRepository.save(new User("HHH", 80));        userRepository.save(new User("III", 90));        userRepository.save(new User("JJJ", 100));        Integer num = userRepository.findAll().size();        System.out.println(num);        // 测试findAll, 查询所有记录        Assert.assertEquals(10, userRepository.findAll().size());    }

编译运行会发现报错:

找了很多,发现原来跟上篇的Swagger2中的@Configuration冲突,具体为什么我也不知道,比较才入java这行。

注释掉@Configuration就可以正常运行

注意,@Entity会自动生成表结构,但是数据库必须是自己创建,有点类似net的codefirst。

 

转载地址:http://fnlra.baihongyu.com/

你可能感兴趣的文章
程序员的常见“谎话”:对,这是一个已知 Bug
查看>>
如何侦查SQL执行状态
查看>>
CentOS 7 命令行如何连接无线网络
查看>>
Ubuntu 12.04上享用新版本Linux的功能
查看>>
logstash + grok 正则语法
查看>>
Zimbra开源版(v8.6)安装说明
查看>>
Android性能优化之TraceView和Lint使用详解
查看>>
LBS核心技术解析
查看>>
Fible Channel over Convergence Enhanced Ethernet talk about
查看>>
讨论:今日头条适配方案使用中出现的问题
查看>>
CSS3 3D翻转动画
查看>>
要命啦!Word中快速录入大全,内含快捷键小技巧,快来一起学习!
查看>>
javascript实现音频mp3播放
查看>>
html5-离线缓存
查看>>
linux系统安装完后的常见工作
查看>>
在Linux服务器、客户端中构建密钥对验证进行远程连接
查看>>
揪出MySQL磁盘消耗迅猛的真凶
查看>>
和“C”的再遇
查看>>
一键安装kubernetes 1.13.0 集群
查看>>
RabbitMq的集群搭建
查看>>