当前位置: 首页 > article >正文

IntelliJ+SpringBoot项目实战(四)--快速上手数据库开发

       对于新手学习SpringBoot开发,可能最急迫的事情就是尽快掌握数据库的开发。目前数据库开发主要流行使用Mybatis和Mybatis Plus,不过这2个框架对于新手而言需要一定的时间掌握,如果快速上手数据库开发,可以先按照本文介绍的方式使用JdbcTemplate进行数据库开发。另外不管用那种开发方式,都需要进行数据库链接的配置。

       本文数据库链接采用的阿里的druid数据源,数据库采用Mysql数据库。首先我们在application-dev.yml中配置数据库链接,这里定义了两个数据源,不过为了演示,两个数据源都指向的同一个数据库,下面是openjweb-sys工程下的application-dev.yml:

server:
  port: 8001

spring:
  datasource:
    ds1:
      type: com.alibaba.druid.pool.DruidDataSource
      url: jdbc:mysql://localhost:3306/erp
      username: root
      password: root
    ds2:
      type: com.alibaba.druid.pool.DruidDataSource
      url: jdbc:mysql://localhost:3306/erp
      username: root
      password: root

在主工程的pom.xml中引入了druid依赖和springframework的jdbc依赖:

<!--druid-->

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.23</version>
</dependency>
<!--jdbc-->

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>

</dependency>

因为考虑到不是每个子工程都需要链接mysql数据库,所以mysql的依赖放在openjweb-sys的pom.xml中,不过考虑到配置类的都放到starter模块里,所以openjweb-sys里配置了依赖datasource-openjweb-starter:

<dependency>
    <groupId>org.openjweb</groupId>
    <artifactId>datasource-openjweb-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

而在datasource-openjweb-starter的pom.xml里引入了mysql依赖:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql.connector.version}</version>
    <scope>runtime</scope>
</dependency>

其中${mysql.connector.version}在主工程的pom.xml中的配置:

<mysql.connector.version>8.0.27</mysql.connector.version>

接下来就可以开发数据库配置类和调用示例,首先在openjweb-sys的org.openjweb.sys.config下面开发一个DataSourceConfig类:

package org.openjweb.sys.config;
import javax.sql.DataSource;


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import com.alibaba.druid.pool.DruidDataSource;

@Slf4j
@Configuration
public class DataSourceConfig {
    @Primary
    @Bean(name = "dsOne")
    @ConfigurationProperties("spring.datasource.ds1")
    DataSource dsOne() {
        DruidDataSource ds1 = new DruidDataSource();
       
        return ds1;
    }

    //@Bean
    @Bean(name = "dsTwo")
    @ConfigurationProperties("spring.datasource.ds2")
    DataSource dsTwo() {
        DruidDataSource ds2 = new DruidDataSource();
        
        return ds2;
    }

    //为第一个数据源绑定一个事务管理器
    @Bean(name = "transactionManager1")
    public DataSourceTransactionManager dataSourceTransactionManagerOne(@Qualifier("dsOne") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "transactionManager2")
    public DataSourceTransactionManager dataSourceTransactionManagerTwo(@Qualifier("dsTwo") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

}

其中@ConfigurationProperties("spring.datasource.ds1")是自动从application-dev.yml的配置中读取ds1的设置注入到组件中,ds2同理。

然后开发JdbcTemplateConfig类:

package org.openjweb.sys.config;

import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;

@Configuration

public class JdbcTemplateConfig {
    private static JdbcTemplate  defaultJdbcTemplate  = null;

    public static JdbcTemplate  getDefaultJdbcTemplate()
    {
        return defaultJdbcTemplate;
    }

    @Bean(name = "jdbcTemplateOne")
    JdbcTemplate jdbcTemplateOne(@Qualifier("dsOne") DataSource dataSource) {

        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        this.defaultJdbcTemplate = jdbcTemplate;
        return jdbcTemplate;
        //return new JdbcTemplate(dataSource);
    }

    @Bean(name = "jdbcTemplateTwo")
    JdbcTemplate jdbcTemplateTwo(@Qualifier("dsTwo") DataSource dataSource) {

        return new JdbcTemplate(dataSource);
    }

   

}

在上面的类中定义了2个Bean,分别指向了dsOne和dsTwo两个数据源。

接下来可以利用这2个JdbcTemplate开发接口应用。

现在在openjweb-sys模块的org.openjweb.sys.api下创建一个演示接口类为DemoDBApi:

package org.openjweb.sys.api;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;


/**
 * http://localhost:8001/demo/queryParam?parmName=version
 * */
@RestController
@RequestMapping("/demo")
@Slf4j
public class DemoDBApi {
    @Resource(name = "jdbcTemplateOne")
    private JdbcTemplate service;

    @Resource(name = "jdbcTemplateTwo")
    private JdbcTemplate service2;

    @GetMapping("queryParam")
    public JSONObject queryParam(@RequestParam(value = "parmName")String parmName){
        //查询count
        Integer count = service.queryForObject("select count(*) from comm_system_parms",Integer.class);
        JSONObject json = new JSONObject();
        json.put("num",count);
        //下面按查询条件查询--查单个值
        parmName = "version";//因为是演示程序,这里不从请求中获取参数
        String sql = "select parm_value from comm_system_parms where parm_name=?";
        String parmValue = service.queryForObject(sql,new Object[]{parmName},String.class);
        log.info(parmValue);//使用log.info需要在类前面加@Slf4j 注解
        //查询列表
        JSONArray jsonArray = new JSONArray();
        String parmLike ="version%";
        String sql1 = "select parm_name,parm_value from comm_system_parms where parm_name like ?";
        List<Map<String,Object>> list = service.queryForList(sql1,new Object[]{parmLike});
        if(list!=null&&list.size()>0){
            for (Map<String,Object> data:list   ) {
                JSONObject dataJson = new JSONObject();
                dataJson.put("parmName",data.get("parm_name")==null?"":data.get("parm_name").toString());
                dataJson.put("parmValue",data.get("parm_value")==null?"":data.get("parm_value").toString());
                jsonArray.add(dataJson);
            }
        }
        //如果结果集顶多一条记录,查询一条记录可使用queryForMap

        Map<String,Object> map = null;
        //这次使用第二个数据源(为了演示方便,链接配置实际指向一个数据库)
        map = service2.queryForMap("select * from comm_system_parms where parm_name=?",new Object[]{parmName});
        if(map!=null){
            log.info("map查到数据:");
            log.info(map.get("parm_value")==null?"":map.get("parm_value").toString());


        }
        json.put("count",count);
        json.put("data",jsonArray);
        return json;
    }
}

在上面的例子中分别演示了select count(*)、查询结果为单一字符串、查询结果为数据列表(queryForList)、查询结果为一条记录多个字段(queryForMap)等。查看演示效果可启动SpringBoot后访问:

http://localhost:8001/demo/queryParam?parmName=version

对于新手如果还不了解mybatis或mybatis-plus可使用jdbcTemplate进行快速开发,当然如果在生产环境中使用的话还要考虑到接口调用的权限。下面给出本示例的comm_system_parm表结构以方便大家使用:


CREATE TABLE `comm_system_parms` (
  `pk_id` varchar(40) NOT NULL,
  `row_id` varchar(40) NOT NULL,
  `sort_no` bigint(20) DEFAULT NULL,
  `create_dt` varchar(23) DEFAULT NULL,
  `update_dt` varchar(23) DEFAULT NULL,
  `create_uid` varchar(32) DEFAULT NULL,
  `update_uid` varchar(32) DEFAULT NULL,
  `data_flg` varchar(6) DEFAULT NULL,
  `flow_status` varchar(16) DEFAULT NULL,
  `obj_name` varchar(40) DEFAULT NULL,
  `master_row_id` varchar(40) DEFAULT NULL,
  `flow_trans_id` varchar(40) DEFAULT NULL,
  `parm_old_values` varchar(255) DEFAULT NULL,
  `parm_name` varchar(40) NOT NULL,
  `parm_desc` varchar(255) DEFAULT NULL,
  `parm_value` varchar(2000) DEFAULT NULL,
  PRIMARY KEY (`pk_id`),
  UNIQUE KEY `parm_name` (`parm_name`),
  KEY `idx_1730778572260000923` (`parm_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 

INSERT INTO `` VALUES ('85', '61a31b6fae8c4cb5a3ff2e343e7402b1', NULL, '2012-05-01 18:32:59', '2016-05-25 09:35:01', 'admin', 'admin', NULL, '00', NULL, NULL, '1335868379171000735', NULL, 'version', '平台版本号', '3.6');

项目实例地址见github:https://github.com/openjweb/cloud/tree/mastericon-default.png?t=O83Ahttps://github.com/openjweb/cloud/tree/master


http://www.kler.cn/a/391601.html

相关文章:

  • 结构体(c语言)
  • NoSQL数据库与关系型数据库的主要区别
  • MYSQL 库,表 基本操作
  • 040 线程池
  • 前端知识点---Javascript的对象(Javascript)
  • 【系统设计】数据库压缩技术详解:从基础到实践(附Redis内存优化实战案例)
  • php中ajax怎么使用【小白专用24.11.12】
  • git怎么切换分支
  • 安装双系统(linux操作系统(debian)安装)
  • Kafka新节点加入集群操作指南
  • 前端性能优化2
  • Redis主从复制(replication)
  • SpringBoot(十七)创建多模块Springboot项目
  • Redis中的持久化
  • C# Properties保存参数
  • LeetCode:103. 二叉树的锯齿形层序遍历
  • 2024-11-13 Unity Addressables1——概述与导入
  • Flink Source 详解
  • 成都睿明智科技有限公司解锁抖音电商新玩法
  • 计算器上的MC、MR、M+、M—、CE是什么意思?
  • 正向代理服务器
  • TP6将HTML转换为PDF文件,非法UTF-8编码和中文乱码问题
  • 品融电商:新形势下电商平台如何助力品牌长期经营
  • Openstack7--安装消息队列服务RabbitMQ
  • 【C语言】程序性能优化——除法运算符
  • 设计一致性的关键:掌握 Axure 母版使用技巧