03u-03-db-PlSQLMapper操作DB

PlSQLMapper是peanutlib数据库模块的一部分,用于在C++中实现SQL代码和业务逻辑的分离。它不依赖特定数据库,支持各种SQL写法,且无需额外的数据库实体类。本文介绍了PlSQLMapper的映射数据库表、Select、Insert、Update和Delete操作,并提供了程序示例和代码下载链接。
摘要由CSDN通过智能技术生成

1.重点内容

  • PlSQLMapper是什么?
  • PlSQLMapper的insert、delete与update操作
  • PlSQLMapper的select操作

2.运行展示

SQLMapper的Insert操作

SQLMapper的Update操作

3.PlSQLMapper

PlSQLMapper是peanutlib的DB模块一个组件,解决在代码中操作数据库的SQL代码与C++的逻辑代码分离。它的规则很简单,只要在XML配置文件中书写SQL语句,然后在C++代码中拿到SQL,并合并到业务逻辑中就OK。

特点如下:

1.不依赖一种数据库。使用一种数据库,当要求换其它数据库时,只需将SQLMapper的配置文件中的SQL模板换成其它数据库兼容的模板就可以,无需修改C++中的任何代码。

2.支持SQL的各种写法,包括动态SQL。

3.SQL模板一次编写,可不断套用模板重复使用。

4.不依赖第三方库,完全兼容QT。

5.不需要生成额外的数据库实体类,只需要在XML中配置SQL与数据库表的操作映射就可以。

6.对QT的模型类兼容友好,例如:QSqlTableModel类等可兼容使用,不冲突。

4.程序示例

4.1 映射数据库表

我们首先要确定要操作的表,例如对ps_staff_item表,该表的结构如下:

CREATE TABLE [ps_staff_item](

  [staff_no] varchar(20) PRIMARY KEY ASC NOT NULL,

  [staff_name] varchar(30) NOT NULL,

  [borrow_charge] decimal(10, 2),

  [dest_address] varchar(50),

  [begin_date] DATE,

  [end_date] DATE,

  [is_refund] char(1) NOT NULL);

第一步:编写sqlMapper配置文件

在工程的resource下建立/plsqlmap/sqlite/psample_sqlmapper.xml文件,我们可以用文本编辑器(Notepad++)编辑psample_sqlmapper.xml。

下面是该文件的主要内容:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<peanut>
    <sqlmapper id="psStaffItemMapper" name="员工费用明细表" type="sqlite" >
		<sql id="psStaffItemColumns" name="ps_staff_item的列名映射" type="string">
			staff_no, 
			staff_name, 
			borrow_charge, 
			dest_address, 
			begin_date, 
			end_date, 
			is_refund
		</sql>	
	    <sql id="psStaffItemColumnsMap" name="ps_staff_item的列名取值模板映射" type="map">
		    <!-- staff_no列模块:#staff_no表示该列。: 相当于等于符号。'${staff_no}'是一个模板,${ }是模块占位符,staff_no是列值占位符,在${staff_no}两边有' '单引号,表示模板中取值的常量-->
			<!-- 例如,当前staff_no的值是张三,经过sqlMapper取值处理后,置换成'张三'-->
			#staff_no : '${staff_no}';    
			#staff_name : '${staff_name}'; 
			#borrow_charge : ${borrow_charge}; 
			#dest_address : '${dest_address}'; 
			#begin_date : ${begin_date}; 
			#end_date : ${end_date}; 
			#is_refund : '${is_refund}' 		   		   
   		</sql>	
        <sql id="selectAllPsStaffItem" name="ps_staff_item的select模板语句" type="select">
			<!-- ${string::psStaffItemColumns} 表示取sqlid="psStaffItemColumns"的值,值为ps_staff_item的列名映射的值,其中${ }是模板占位符 -->
			<!-- ${whereSql} 表示whereSql占位,sqlMapper经过where子句置换后,带where条件,其中${ }是模板占位符-->
			<sqlText>select ${string::psStaffItemColumns} from ps_staff_item ${whereSql}</sqlText> 
        </sql>	 		
	    <sql id="selectAllPsStaffItemCount" name="ps_staff_item的select count模板语句" type="select">
			<sqlText>select count(*) as staff_count from ps_staff_item ${whereSql}</sqlText> 
		</sql>	 	 
	    <sql id="selectAllPsStaffItemMax" name="ccps_staff_item的select  max模板语句" type="select">
			<sqlText>select max(staff_no) as staff_max from ps_staff_item ${whereSql}</sqlText> 
		</sql>	 	 		
		<sql id="insertPsStaffItem" name="ps_staff_item的insert模板语句" type="insert">
			<!-- ${string::psStaffItemColumns} 表示取sqlid="psStaffItemColumns"的值,值为ps_staff_item的列名映射的值,其中${ }是模板占位符 -->
			<!-- ${sql} 表示insert的values子句占位,sqlMapper经过values子句置换,将置换成values子句,其中${ }是模板占位符-->		
			  <sqlText>insert into ps_staff_item(${string::psStaffItemColumns}) values(${sql})</sqlText>     
			  <!-- sqli
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积木虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值