springboot数据库配置

前面已经搭建了基本的springboot框架,下面是springboot数据库配置,使用oracle数据库,通过spring data方式访问。
我们以USER表为例。其中User表中包括pk_id 、name、state等字段
pom内容需要根据各自的数据库进行配置。我用的是ORACLE11g。利用bonecp方式

<dependency>
   <groupId>com.oracle</groupId>
    <artifactId>ojdbc5</artifactId>
    <version>11.00</version>
</dependency> 
<dependency>
    <groupId>com.jolbox</groupId>
    <artifactId>bonecp</artifactId>
    <version>0.7.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.jolbox</groupId>
    <artifactId>bonecp-provider</artifactId>
    <version>0.7.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.jolbox</groupId>
    <artifactId>bonecp-spring</artifactId>
    <version>0.7.1.RELEASE</version>
</dependency>

application.properties

# **数据库基础信息配置**
spring.datasource.type=com.jolbox.bonecp.BoneCPDataSource
spring.datasource.url=jdbc:oracle:thin:@10.224.15.15:1521:orcl
spring.datasource.username= test
spring.datasource.password= test
spring.datasource.driverClassName = oracle.jdbc.OracleDriver
**#下面是datasource的属性配置**
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒 
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打开PSCache,并且指定每个连接上PSCache的大小 
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 
#spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
#spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat=true

下面创建一个TestDao的接口

@Repository
public interface TestDao  extends JpaRepository<User, Long>,JpaSpecificationExecutor<User> {
    User findByName(String name);

     @Query("from User t where pkId = :id")
     List<User> queryMyList(@Param("id") Long id);

     List<User> findByState(String state,Pageable pageable) ;

     public List<User> findByCondition(String state) ;
}

上面的4个类方法包含4种数据库访问的方法。
第一个findByName ,无需在实现类中实现这个方法,spring data会创建一个实现类实现。 name是我user表中的一个字段,他会根据你传的name值自动在user表中查找匹配name值
第二个queryMyList是@Query方式的方法
第三个和第一个一样,多了一个Pageable 参数
第四个是扩展方法,自己写一个类实现方法。创建TestDaoImpl类。这里应该是必须叫这个类名(我的理解是spring也会创建一个叫TestDaoImpl类实现接口,他会检查你是否创建了这个类,是否实现了接口中的方法,如果有他会把你实现的方法添加i进去)。 spring在创建实现类的时候会把你的实现类包含进去(我是这么理解的。。。)

编写TestDaoImpl类
注意: 这个类没有implements TestDao接口。。。

public class TestDaoImpl{

    @PersistenceContext
    private EntityManager em ;

    public List<User> findByCondition(String state){
        Query q = em.createNativeQuery("select * from user s where s.state = ?0",User.class).setParameter(0, "1") ;
        return q.getResultList() ;
    }
}

可以看到实现类中只有一个findByCondition方法,其他方法不用实现。。

编写TestService接口及TestServiceImpl类

public interface TestService {
    public User findByName(String name);

    public List<User> findByState(String state,Pageable pageable) ;

    public List<User> findByCondition(String state) ;
    #queryMyList 自行实现
}
@Service
@Transactional
public class TestServiceImpl implements TestService {
    @Autowired
    private TestDao testDao;

    @Override
    public User findByName(String name) {
        return testDao.findByName(name) ;
    }

    @Override
    public List<User> findByState(String state,Pageable pageable) {
        return testDao.findByState(state, pageable) ;
    }

    public List<User> findByCondition(String state){
        return testDao.findByCondition(state) ;
    }

}

编写Controller测试

@Controller
public class TestController {

    @Autowired
    private TestService testService;

    /**
     * 
     * @param name
     * @return
     */
    @ResponseBody
    @RequestMapping("/spbt/getUser")
    public User findUser(String name){
        return testService.findByName(name) ;
    }

    @ResponseBody
    @RequestMapping("/spbt/getState")
    public List<User> findByState(String state,
            @RequestParam(value="page",required=false, defaultValue="1") int page,
            @RequestParam(value="pageSize",required=false, defaultValue="10") int pageSize){
        Order idOrder = new Order(Direction.DESC, "pkId");  
        Order nameOrder = new Order(Direction.DESC,"state");  
        Sort sort = new Sort(idOrder, nameOrder);  
        PageRequest pr = new PageRequest(page,pageSize,sort) ;

        return testService.findByState(state, pr) ;
    }

    @ResponseBody
    @RequestMapping("/spbt/getCondition")
    public List<User> findByCondition(String state){
        return testService.findByCondition(state) ;
    }
}

访问http://localhost:8090/spbt/getCondition?state=1测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值