OceanBase学习之路2 |SpringJPA 连接示例

本文介绍 SpringJPA 连接示例,并测试几个常用功能,与 Oracle 进行简单的性能对比。

配置依赖


   com.alipay.oceanbase
   oceanbase-client
   3.2.3


   org.springframework.data
   spring-data-jpa
    1.10.1.RELEASE

配置文件

applicationContext.xml 文件

内容如下:



    
    
    
    
    
        
        
        
        
        
        
        
        
        
        
        
        
    
    
        
        
        
            
                
                
                
                classpath*:dbcp.properties
            
        
    
    
    
        
        
        
        
        
            
                org.hibernate.cfg.ImprovedNamingStrategy
                
                update
                false
                false
                false
            
        
    
    
        
    
    
    
        
    
    
    
    
    
    

dbcp.properties 文件

内容如下:

#OceanBase 数据库
jdbc.driver=com.alipay.oceanbase.jdbc.Driver
jdbc.url=jdbc:oceanbase://10.100.xxx.xxx:18815/test
jdbc.username=admin
jdbc.password=admin
database.dialect=MYSQL
dbcp.maxIdle=5
dbcp.maxActive=40
useUnicode=true&characterEncoding=utf-8

pom.xml 文件

内容如下:

  
   org.springframework.boot
   spring-boot-starter-data-jpa
      ****
  
  
   com.alipay.oceanbase
   oceanbase-client
   3.2.3
  
  

application.properties 文件

内容如下(仅数据源和 jpa 部分配置) :

spring.datasource.url=jdbc:oceanbase://10.100.xxx.xxx:18815/test
spring.datasource.username=admin@oracle
spring.datasource.password=admin
spring.datasource.driver-class-name=com.alipay.oceanbase.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.Oracle12cDialect

注意

在 Oracle 模式下需要配置  spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.Oracle12cDialect,如果是在 MySQL 模式下,该值应更改为  org.hibernate.dialect.MySQL5Dialect,或者不配置本行。

测试准备

实体类

相关代码如下:

public class User implements Serializable {
    private Integer id;
    private String username;
    //先注释一些字段,以便验证使用框架建表后,自动根据实体类新增属性修改表
    //private Date birthday;
    //private String sex;
    //private String address;
    //。。。。。。构造器、get、set方法此处省略。。。。。。。。
}

数据库访问接口

public interface UserDao extends JpaRepository{
    User findById(Integer id);
}

示例代码

自动建表

测试方法:

@Test
    public void testInsert(){
        User user = new User();
        user.setId(1);
        user.setUsername("测试数据");
        userDao.save(user);
    }

执行结果:

1

修改表(增加字段)

打开 User 类注释掉的属性,并执行如下方法:

@Test
    public void testAlert(){
        User user = new User();
        user.setId(1);
        user.setUsername("测试数据");
        user.setAddress("北京");
        user.setSex("男");
        user.setBirthday(new Date());
        userDao.save(user);
    }

执行结果:

2

经测试,OceanBase 对于 SpringJPA 的 Alert Table 功能支持良好。

持久化数据

测试方法:

@Test
    public void testInsert(){
        List list = new ArrayList();
        list.add(new User(3,"asd", new Date(), "男", "漳州"));
        list.add(new User(4,"qwe", new Date(), "女", "杭州"));
        list.add(new User(5,"zxc", new Date(), "男", "上海"));
        list.add(new User(6,"xcv", new Date(), "女", "杭州"));
        list.add(new User(7,"sdf", new Date(), "男", "杭州"));
        list.add(new User(8,"wer", new Date(), "女", "杭州"));
        list.add(new User(9,"ert", new Date(), "男", "漳州"));
        list.add(new User(10,"rty", new Date(), "女", "上海"));
        list.add(new User(11,"tyu", new Date(), "男", "杭州"));
        
        list.forEach(s -> userDao.save(s));
    }

执行结果:

3

经测试,OceanBase 对于 SpringJPA 的 Insert 功能支持良好。

根据主键查询

测试方法:

@Test
    public void testFindOne(){
        Table_Test one = table_testDao.findOne("aaa");
        System.out.println(one);
    }

执行结果:

4经测试,OceanBase 对于 SpringJPA 的 findOne 功能支持良好。

根据主键或对象删除记录

测试方法:

@Test
    public void testDelete(){
        table_testDao.delete("9998");
    }
    @Test
    public void test6(){
        Table_Test a = new Table_Test();
        a.setChar_test("9997");
        table_testDao.delete(a);
    }

执行结果:

5

经测试,OceanBase 对于 SpringJPA 的 delete 功能支持良好。

修改记录

测试方法:

@Test
    public void testChange(){
        Table_Test one = table_testDao.findOne("9996");
        System.out.println("修改前:"+one);
        one.setVarchar2_test("已修改");
        one.setNchar_test("已修改");
        table_testDao.save(one);
        one = table_testDao.findOne("9996");
        System.out.println("修改后:"+one);
    }

执行结果:

6

经测试,OceanBase 对于 SpringJPA 的修改数据功能支持良好。

全表查询

测试方法:

@Test
    public void testFindAll(){
        List all = userDao.findAll();
        all.forEach(System.out::println);
    }

执行结果:

7

经测试,OceanBase 对于 SpringJPA 的 FindAll 功能支持良好。


请使用浏览器的分享功能分享到微信等