1 Star 0 Fork 0

march3/codesmith-mybatis-java

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
mapper-xml.cst 13.32 KB
一键复制 编辑 原始数据 按行查看 历史
weigang 提交于 2017-08-29 10:30 . 添加了save方法
<%@ CodeTemplate Language="C#" TargetLanguage="XML" Src="CodeBehindClass.cs" Inherits="CodeBehindClass" ResponseEncoding="UTF-8" Encoding="utf-8"%>
<%--
Name:
Author: march3
Description: Mybatis Mapper XML GENERATE TEMPLATE FOR FWEB(FOREVER WEB RAPID FRAMEWORK)
--%>
<%-- Assembly References --%>
<%@ Assembly Name="System" %>
<%@ Assembly Name="System.Data" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="CodeSmith.BaseTemplates" %>
<%@ Assembly Name="CodeSmith.CustomProperties" %>
<%-- Namespace Imports --%>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Text.RegularExpressions" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="CodeSmith.CustomProperties" %>
<%@ Import Namespace="CodeSmith.BaseTemplates" %>
<%@ Map Name="JavaAlias" Src="mysql-java-alias" %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Database" Description="只能选择一个表." %>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<%
// 该模板要求源数据表有主键
if (!SourceTable.HasPrimaryKey) throw new ApplicationException("["+SourceTable.Name + "]不包含主键.");
if (SourceTable.PrimaryKeys.Count > 1) throw new ApplicationException("["+SourceTable.Name + "]不能包含多个主键.");
string MapName = GetPascalCaseName(SourceTable)+"Map";
string typeFullName = ModelPackage + "." + GetPascalCaseName(SourceTable);
ColumnSchema pkCol = GetPrimaryKey(SourceTable);
List<ColumnSchema> uniqueColumns = GetUniqueColumns(SourceTable);
ColumnSchema deleteCol = GetDeleteFlagColumn(SourceTable);
/*
foreach(ColumnSchema col in SourceTable.Columns) {
for(int i=0;i<col.ExtendedProperties.Count;i++){
if(col.IsPrimaryKeyMember){
pkCol = col;
break;
}
//Response.WriteLine(col.FullName + " pk:" + col.IsPrimaryKeyMember + ":" + col.ExtendedProperties[i].Name + "=" + col.ExtendedProperties[i].Value);
}
if(pkCol != null)
break;
}
*/
//Response.Write(pkCol.FullName);
//Response.Write(pkCol.ExtendedProperties["CS_IsIdentity"].Value);
bool isIdentity = false;
if(pkCol != null)
isIdentity = Boolean.Parse(pkCol.ExtendedProperties["CS_IsIdentity"].Value.ToString());
//Response.Write(isIdentity);
int idx = 0;
%>
<mapper namespace="<%=MapperJavaPackage%>.<%=GetDomainClassName()%>Mapper">
<resultMap type="<%=typeFullName%>" id="<% =MapName %>"><% GenerateResultColumns(SourceTable.Columns); %></resultMap>
<sql id="Base_Column_List">
<%=GetSelectFields()%>
</sql>
<!-- 新增 -->
<insert id="insert" parameterType="<%=typeFullName%>"><% if(isIdentity) {%>
<selectKey resultType="<% =GetJavaType(pkCol) %>" keyProperty="<%=StringUtil.ToCamelCase(pkCol.Name)%>" keyColumn="<%=pkCol.Name%>" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey><%}%>
<%=GetInsertSQL()%>
</insert>
<!-- 新增,忽略空值字段 -->
<insert id="insertSelective" parameterType="<%=typeFullName%>"><% if(isIdentity) {%>
<selectKey resultType="<% =GetJavaType(pkCol) %>" keyProperty="<%=StringUtil.ToCamelCase(pkCol.Name)%>" keyColumn="<%=pkCol.Name%>" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey><%}%>
INSERT INTO <%=SourceTable.Name%>
<trim prefix="(" suffix=")" suffixOverrides="," >
<% foreach(ColumnSchema col in SourceTable.Columns) {
if(IsIdentity(col))continue;
%>
<if test="<%=GetCamelCaseName(col)%> != null" >
<%=col.Name %>,
</if>
<%} %>
</trim>
<trim prefix="VALUES (" suffix=")" suffixOverrides="," >
<% foreach(ColumnSchema col in SourceTable.Columns) {
if(IsIdentity(col))continue;
%>
<if test="<%=GetCamelCaseName(col)%> != null" >
#{<%=GetCamelCaseName(col)%>,jdbcType=<%=GetJdbcType(col)%>},
</if>
<%} %>
</trim>
</insert><% if(!isIdentity) {%>
<!-- 保存 -->
<update id="save" parameterType="<%=typeFullName%>">
INSERT INTO <%=SourceTable.Name%>(
<%
idx = 0;
foreach(ColumnSchema col in SourceTable.Columns) {
idx++;
if(IsIdentity(col))continue;
%><%=col.Name %> <%if(idx<SourceTable.Columns.Count){%>,<%}%><%} %>
) VALUES (
<%
idx = 0;
foreach(ColumnSchema col in SourceTable.Columns) {
idx++;
if(IsIdentity(col))continue;
%>#{<%=GetCamelCaseName(col)%>,jdbcType=<%=GetJdbcType(col)%>} <%if(idx<SourceTable.Columns.Count){%>,<%}%><%} %>
)
ON DUPLICATE KEY UPDATE
<%
idx = 0;
foreach(ColumnSchema col in SourceTable.Columns) {
idx++;
if(col.IsPrimaryKeyMember)
continue;
%><%=col.Name %> = #{<%=GetCamelCaseName(col)%>,jdbcType=<%=GetJdbcType(col)%>} <%if(idx<SourceTable.Columns.Count){%>,<%}%><%} %>
</update>
<!-- 保存,忽略空值字段 -->
<update id="saveSelective" parameterType="<%=typeFullName%>">
INSERT INTO <%=SourceTable.Name%>
<trim prefix="(" suffix=")" suffixOverrides="," >
<% foreach(ColumnSchema col in SourceTable.Columns) {
if(IsIdentity(col))continue;
%>
<if test="<%=GetCamelCaseName(col)%> != null" >
<%=col.Name %>,
</if>
<%} %>
</trim>
<trim prefix="VALUES (" suffix=")" suffixOverrides="," >
<% foreach(ColumnSchema col in SourceTable.Columns) {
if(IsIdentity(col))continue;
%>
<if test="<%=GetCamelCaseName(col)%> != null" >
#{<%=GetCamelCaseName(col)%>,jdbcType=<%=GetJdbcType(col)%>},
</if>
<%} %>
</trim>
ON DUPLICATE KEY UPDATE
<trim prefix="" suffix="" suffixOverrides="," >
<% foreach(ColumnSchema col in SourceTable.Columns) {
if(col.IsPrimaryKeyMember)
continue;
%>
<if test="<%=GetCamelCaseName(col)%> != null" >
<%=col.Name %> = #{<%=GetCamelCaseName(col)%>,jdbcType=<%=GetJdbcType(col)%>},
</if>
<%} %>
</trim>
</update><%} %>
<!-- 修改 -->
<update id="update" parameterType="<%=typeFullName%>">
<%=GetUpdateSQL(pkCol)%>
</update>
<!-- 修改,忽略空值字段 -->
<update id="updateSelective" parameterType="<%=typeFullName%>">
UPDATE <%=SourceTable.Name%>
<set>
<% foreach(ColumnSchema col in SourceTable.Columns) {
if(col.IsPrimaryKeyMember)
continue;
%>
<if test="<%=GetCamelCaseName(col)%> != null" >
<%=col.Name %> = #{<%=GetCamelCaseName(col)%>,jdbcType=<%=GetJdbcType(col)%>},
</if>
<%} %>
</set>
WHERE <%=pkCol.Name%> = #{<%=GetCamelCaseName(pkCol)%>}
</update>
<% if(deleteCol != null){%>
<!--逻辑删除 -->
<update id="remove" parameterType="<%=GetJavaType(pkCol)%>">
UPDATE <%=SourceTable.Name%>
SET <%=deleteCol.Name%>=<%=DeleteFlagValue%>
WHERE <%=pkCol.Name%> = #{<%=GetCamelCaseName(pkCol)%>}
</update>
<%}%>
<!-- 物理删除 -->
<delete id="delete" parameterType="<%=GetJavaType(pkCol)%>">
DELETE FROM <%=SourceTable.Name%> WHERE <%=pkCol.Name%> = #{<%=GetCamelCaseName(pkCol)%>}
</delete>
<!-- 根据 <%=GetCamelCaseName(pkCol)%>s in 获取列表 -->
<select id="getIn<%=GetPascalCaseName(pkCol)%>s" parameterType="list" resultMap="<%=MapName%>">
SELECT
<include refid="Base_Column_List" />
FROM <%=SourceTable.Name%> _t
WHERE <%=pkCol.Name%> IN
<foreach collection="list" item="item" open="(" close=")" index="i" separator=",">
#{item}
</foreach>
</select>
<!-- 根据 <%=GetCamelCaseName(pkCol)%> 获取 -->
<select id="get" parameterType="<%=GetJavaType(pkCol)%>" resultMap="<%=MapName%>">
SELECT
<include refid="Base_Column_List" />
FROM <%=SourceTable.Name%> _t
WHERE <%=pkCol.Name%> = #{<%=GetCamelCaseName(pkCol)%>}
</select>
<% foreach(var col in uniqueColumns) {%>
<!-- 根据 <%=GetCamelCaseName(col)%> 获取 -->
<select id="getBy<%=GetPascalCaseName(col)%>" parameterType="<%=GetJavaType(col)%>" resultMap="<%=MapName%>">
SELECT
<include refid="Base_Column_List" />
FROM <%=SourceTable.Name%> _t
WHERE <%=col.Name%> = #{<%=GetCamelCaseName(col)%>}
</select>
<%}%>
<% foreach(var col in uniqueColumns) {%>
<!-- 根据 <%=GetCamelCaseName(col)%>s in 获取列表 -->
<select id="getIn<%=GetPascalCaseName(col)%>s" parameterType="list" resultMap="<%=MapName%>">
SELECT
<include refid="Base_Column_List" />
FROM <%=SourceTable.Name%> _t
WHERE <%=col.Name%> IN
<foreach collection="list" item="item" open="(" close=")" index="i" separator=",">
#{item}
</foreach>
</select>
<%}%><% if(false){%>
<select id="getVersion" parameterType="string" resultType="int">
SELECT version FROM <%=SourceTable.Name%> WHERE <%=pkCol.Name%> = #{<%=GetCamelCaseName(pkCol)%>}
</select><%}%>
<!-- 获取所有(注意:SQL默认限制返回100条) -->
<select id="getAll" resultMap="<%=MapName%>">
SELECT
<include refid="Base_Column_List" />
FROM <%=SourceTable.Name%> _t
LIMIT 100
</select>
</mapper>
<script runat="template">
public string GetJavaType(ColumnSchema col) {
try{
return JavaAlias[col.NativeType];
}catch(Exception ex){
//Response.Write(col.NativeType.ToString()+ex.Message);
return col.NativeType + "["+col.NativeType.ToString()+"]";
}
}
public override string GetFileName() {
return GetDomainClassName() + MapperXmlPostfix;// "Mapper.xml";
}
public string GetDomainClassName() {
return GetPascalCaseName(SourceTable);
}
public string GetInsertSQL()
{
string f = string.Empty;
string v = string.Empty;
foreach(ColumnSchema col in SourceTable.Columns)
{
if(col.Name.ToUpper().Equals(VersionColName)) continue;
if(IsIdentity(col))continue;
f += col.Name + ", ";
v += "#{" + StringUtil.ToCamelCase(col.Name) + "}, ";
}
return string.Format("INSERT INTO {0}({1}) VALUES ( {2} )", SourceTable.Name, f.Trim().TrimEnd(','), v.Trim().TrimEnd(','));
}
public string GetUpdateSQL(ColumnSchema pkCol)
{
string s = string.Empty;
foreach(ColumnSchema col in SourceTable.Columns)
{
if(col.Name.ToUpper() == pkCol.Name.ToUpper()) {
continue;
}
if(col.Name.ToUpper().Equals(VersionColName)) {
s += " "+VersionColName+" = "+VersionColName+" + 1, ";
continue;
}
s += string.Format("{0} = #{{{1}}}, ", col.Name, StringUtil.ToCamelCase(col.Name));
}
return string.Format("UPDATE {0} SET {1} WHERE {2} ", SourceTable.Name, s.Trim().TrimEnd(','),pkCol.Name)+"= #{"+GetCamelCaseName(pkCol)+"}";
}
public string GetSelectFields()
{
string s = string.Empty;
foreach(ColumnSchema col in SourceTable.Columns)
{
String colName = col.Name;
String fieldName = StringUtil.ToPascalCase(col.Name);
if(colName.Equals(fieldName))
s += string.Format("_t.{0}, ", colName);
else
s += string.Format("_t.{0} as {1}, ", colName, fieldName);
}
return s.Trim().TrimEnd(',');
}
public string GenerateResultColumn(ColumnSchema column)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
if(column.IsPrimaryKeyMember){
sb.Append("<id column=\"");
}else{
sb.Append("<result column=\"");
}
sb.Append(column.Name);
sb.Append("\" jdbcType=\"");
sb.Append(GetJdbcType(column));
sb.Append("\" property=\"");
sb.Append(StringUtil.ToCamelCase(column.Name));
sb.Append("\" />");
return sb.ToString();
}
public void GenerateResultColumns(ColumnSchemaCollection columns)
{
System.Text.StringBuilder sbIdCol = new System.Text.StringBuilder();
System.Text.StringBuilder sbCols = new System.Text.StringBuilder();
ColumnSchemaCollection filteredColumns = columns;//FilterExcludedColumns(columns);
Response.WriteLine();
for (int i = 0; i < filteredColumns.Count; i++)
{
String str = GenerateResultColumn(filteredColumns[i]);
if(filteredColumns[i].IsPrimaryKeyMember){
sbIdCol.Append(GetIndent(2));
sbIdCol.Append(str);
sbIdCol.AppendLine();
}else{
sbCols.Append(GetIndent(2));
sbCols.Append(str);
sbCols.AppendLine();
}
}
Response.Write(sbIdCol.ToString());
Response.Write(sbCols.ToString());
GenerateIndent(1);
}
</script>
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C#
1
https://gitee.com/march3/codesmith-mybatis-java.git
git@gitee.com:march3/codesmith-mybatis-java.git
march3
codesmith-mybatis-java
codesmith-mybatis-java
master

搜索帮助