Monday, March 30, 2009

iBatis - mapping generation - 2

iBatis requires mapping and generating xml for it can also be automated:

ALTER PROCEDURE [usp_TableToiBatisXML]
/*
Created by Michael Safro based on Cade Bryant's code.
*/
@table_name SYSNAME,
@model_name VARCHAR(200),
@prefix varchar(10)
AS
SET NOCOUNT ON
DECLARE @temp TABLE
(
sort INT,
code TEXT
)
INSERT INTO @temp SELECT 1,''
-- beginning of sqlMap
INSERT INTO @temp SELECT 2,''
INSERT INTO @temp SELECT 3,''
INSERT INTO @temp SELECT 4,''
INSERT INTO @temp SELECT 5,'
'
INSERT INTO @temp SELECT 6,'' -- start of the result maps
INSERT INTO @temp SELECT 7,'' -- start of map
INSERT INTO @temp SELECT 8,''
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name
ORDER BY ORDINAL_POSITION
INSERT INTO @temp SELECT 9,'
' -- end of map
INSERT INTO @temp SELECT 10,'
' -- end of maps...

INSERT INTO @temp SELECT 11,'' -- start of statements

-- start of select procedure
INSERT INTO @temp SELECT 12,''
INSERT INTO @temp SELECT 13, @prefix+'_'+@table_name+'_PR'
INSERT INTO @temp SELECT 14, '
'
-- end of select procedure

-- start of update procedure --
INSERT INTO @temp SELECT 15,''
INSERT INTO @temp SELECT 16, @prefix+'_'+@table_name+'_PU'
INSERT INTO @temp SELECT 17, '
'
-- end of update procedure --

-- start of insert procedure --
INSERT INTO @temp SELECT 18,''
INSERT INTO @temp SELECT 19, @prefix+'_'+@table_name+'_PI'
INSERT INTO @temp SELECT 20, '
'
-- end of insert procedure --

-- start of delete procedure --
INSERT INTO @temp SELECT 21,''
INSERT INTO @temp SELECT 22, @prefix+'_'+@table_name+'_PD'
INSERT INTO @temp SELECT 23, '
'
-- end of delete procedure --

INSERT INTO @temp SELECT 24, '
'

-- start of parameter maps --
INSERT INTO @temp SELECT 25, ''

-- start of ParamSelect --
INSERT INTO @temp SELECT 26, ''
INSERT INTO @temp SELECT 27, ' INSERT NECESSARY KEYS '
INSERT INTO @temp SELECT 28, '
'
-- end of ParamSelect

-- start of ParamUpdate --
INSERT INTO @temp SELECT 29, ''
INSERT INTO @temp SELECT 30, ''
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name
ORDER BY ORDINAL_POSITION
INSERT INTO @temp SELECT 31, '
'
-- end of ParamUpdate

-- start of ParamInsert --
INSERT INTO @temp SELECT 32, ''
INSERT INTO @temp SELECT 33, ''
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @table_name
ORDER BY ORDINAL_POSITION
INSERT INTO @temp SELECT 34, '
'
-- end of ParamInsert

-- start of ParamSelect --
INSERT INTO @temp SELECT 35, ''
INSERT INTO @temp SELECT 36, ' INSERT NECESSARY KEYS '
INSERT INTO @temp SELECT 37, '
'
-- end of ParamSelect

INSERT INTO @temp SELECT 38, '
'

INSERT INTO @temp SELECT 39,'
' -- end of sqlMap

DECLARE @code varchar(8000)
DECLARE TableCol Cursor FOR SELECT code FROM @temp ORDER BY sort
Open TableCol
FETCH NEXT FROM TableCol INTO @code
WHILE @@FETCH_STATUS = 0 BEGIN
PRINT @code + CHAR(13)
FETCH NEXT FROM TableCol INTO @code
END
-- ----------------
-- clean up cursor
-- ----------------
CLOSE TableCol
DEALLOCATE TableCol

No comments: