{"id":43242,"library":"mybatis-mapper","title":"mybatis-mapper","description":"mybatis-mapper generates SQL statements from MyBatis3 Mapper XML files in Node.js. Version 0.8.0 supports all MyBatis dynamic SQL elements including <if>, <choose>, <where>, <foreach>, <bind>, and <include>. It parses mapper XML files with namespaces and provides methods to build parameterized SQL queries using #{...} and ${...} syntax. Different from ORM-based libraries, it focuses on reusing existing MyBatis XML mappings in Node.js environments. The library integrates with sql-formatter for output formatting. Compatible with MySQL clients like mysql2.","status":"active","version":"0.8.0","language":"javascript","source_language":"en","source_url":"https://github.com/OldBlackJoe/mybatis-mapper","tags":["javascript","node.js","mybatis","mysql"],"install":[{"cmd":"npm install mybatis-mapper","lang":"bash","label":"npm"},{"cmd":"yarn add mybatis-mapper","lang":"bash","label":"yarn"},{"cmd":"pnpm add mybatis-mapper","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Used to format generated SQL output with configurable language and indent.","package":"sql-formatter","optional":true}],"imports":[{"note":"CommonJS default import; no named exports or ES module wrapper.","wrong":"const mybatisMapper = require('mybatis-mapper').default","symbol":"default","correct":"const mybatisMapper = require('mybatis-mapper')"},{"note":"Requires an array of file paths, even for a single file.","wrong":"mybatisMapper.createMapper('./mapper.xml')","symbol":"createMapper","correct":"mybatisMapper.createMapper(['./mapper.xml'])"},{"note":"Namespace and SQL ID are separate arguments, not dot-joined.","wrong":"mybatisMapper.getStatement('namespace.sqlId', params, format)","symbol":"getStatement","correct":"mybatisMapper.getStatement('namespace', 'sqlId', params, format)"}],"quickstart":{"code":"const mybatisMapper = require('mybatis-mapper');\nconst mysql = require('mysql2/promise');\n\nasync function run() {\n  const connection = await mysql.createConnection({\n    host: 'localhost',\n    user: 'root',\n    database: 'test',\n    password: process.env.DB_PASSWORD ?? ''\n  });\n\n  mybatisMapper.createMapper(['./fruits.xml']);\n\n  const params = { category: 'apple', price: 100 };\n  const format = { language: 'sql', indent: '  ' };\n  const query = mybatisMapper.getStatement('fruit', 'testBasic', params, format);\n\n  const [rows] = await connection.query(query);\n  console.log(rows);\n  await connection.end();\n}\nrun().catch(console.error);","lang":"javascript","description":"Shows loading a MyBatis XML mapper, building a SQL statement with parameters, and executing it via mysql2/promise."},"warnings":[{"fix":"Wrap the file path in an array: ['file.xml'].","message":"Array of XML files required for createMapper; passing a single string fails silently.","severity":"breaking","affected_versions":">=0.0.1"},{"fix":"Prefer #{} for parameter binding. Use ${} only with trusted values.","message":"Uses ${} for direct string substitution; vulnerable to SQL injection if user input is included without sanitization.","severity":"danger","affected_versions":">=0.0.1"},{"fix":"Use require() or await import('mybatis-mapper') with dynamic import.","message":"No support for ES modules; commonjs only. Cannot import via import statement.","severity":"gotcha","affected_versions":">=0.0.1"},{"fix":"Provide { language: 'sql', indent: '  ' } at minimum.","message":"Format parameter object must include 'language' and 'indent' properties; omit or misspelling causes error.","severity":"gotcha","affected_versions":">=0.0.1"},{"fix":"Call getStatement('namespace', 'sqlId', ...) not getStatement('namespace.sqlId', ...).","message":"Namespace and SQL ID are separate arguments; using a dot-joined string fails.","severity":"gotcha","affected_versions":">=0.0.1"}],"env_vars":null,"search_vec":"'0.8.0':18 'base':49 'build':38 'client':75 'compat':72 'differ':45 'dynam':22 'element':24 'environ':61 'exist':55 'file':14,31 'focus':52 'format':71 'formatt':68 'generat':7 'includ':25 'integr':64 'javascript':78 'librari':50,63 'like':76 'map':58 'mapper':3,6,12,29 'method':36 'mybati':2,5,21,56,80 'mybatis-mapp':1,4 'mybatis3':11 'mysql':74,81 'mysql2':77 'namespac':33 'node.js':16,60,79 'orm':48 'orm-bas':47 'output':70 'parameter':39 'pars':28 'provid':35 'queri':41 'reus':54 'sql':8,23,40,67 'sql-formatt':66 'statement':9 'support':19 'syntax':44 'use':42 'version':17 'xml':13,30,57","created_at":"2026-06-05T16:58:51.883499+00:00","updated_at":"2026-06-05T16:58:51.883499+00:00","problems":[{"fix":"Run 'npm install mybatis-mapper --save'.","cause":"Package not installed or installed as devDependency.","error":"Cannot find module 'mybatis-mapper'"},{"fix":"Use 'const mybatisMapper = require('mybatis-mapper')' then call 'mybatisMapper.createMapper'.","cause":"Incorrect import (e.g., using default export when not available).","error":"createMapper is not a function"},{"fix":"Provide a format object with 'language' and 'indent' properties, e.g., { language: 'sql', indent: '  ' }.","cause":"Missing or undefined format object passed to getStatement.","error":"TypeError: format is undefined"},{"fix":"Call getStatement('namespace', 'sqlId', ...) with two separate string arguments.","cause":"getStatement called with a dot-joined string instead of separate namespace and sqlId arguments.","error":"Mapper not found: 'namespace.id'"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/OldBlackJoe/mybatis-mapper#readme","github":"https://github.com/OldBlackJoe/mybatis-mapper","docs":null,"changelog":null,"pypi":null,"npm":"mybatis-mapper","openapi_spec":null,"status_page":null,"smithery":null,"categories":["database"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-05","next_check":"2026-09-03","install_tag":null}}