mysql工具类

  1. import pymysql.cursors
  2. import sys
  3. from contextlib import contextmanager
  4. import traceback
  5. import ExcelHelp as excel
  6.  
  7. from logbook import Logger, StreamHandler
  8.  
  9. StreamHandler(sys.stdout).push_application()
  10. log = Logger('FileOperation')
  11.  
  12. """
  13. pymysql.Connect()参数说明
  14. host(str): MySQL服务器地址
  15. port(int): MySQL服务器端口号
  16. user(str): 用户名
  17. passwd(str): 密码
  18. db(str): 数据库名称
  19. charset(str): 连接编码
  20.  
  21. connection对象支持的方法
  22. cursor() 使用该连接创建并返回游标
  23. commit() 提交当前事务
  24. rollback() 回滚当前事务
  25. close() 关闭连接
  26.  
  27. cursor对象支持的方法
  28. execute(op) 执行一个数据库的查询命令
  29. fetchone() 取得结果集的下一行
  30. fetchmany(size) 获取结果集的下几行
  31. fetchall() 获取结果集中的所有行
  32. rowcount() 返回数据条数或影响行数
  33. close() 关闭游标对象
  34.  
  35. """
  36.  
  37. # charset='utf8'
  38. class Mysql(object):
  39. StreamHandler(sys.stdout).push_application()
  40. logger = Logger('Mysql')
  41. # 连接数据库
  42.  
  43. # 生产环境数据库
  44. __config = {
  45. 'host': '118.190.158.239',
  46. 'port': 3306,
  47. 'user': 'develop',
  48. 'password': 'B06C670823934B0B9838F96E1F8C11AC',
  49. 'db': 'faith',
  50. 'charset': 'utf8mb4',
  51. 'cursorclass': pymysql.cursors.DictCursor,
  52. }
  53.  
  54. # 数据库构造函数,从连接池中取出连接,并生成操作游标
  55. def __init__(self):
  56. """
  57. 配置成员变量
  58. """
  59. # 连接对象
  60. self.__conn = self.__getConn()
  61. self.__cursor = self.__getCursor()
  62.  
  63. def __getConn(self):
  64. """
  65. 获取con连接
  66. :return: con
  67. """
  68. self.__conn = pymysql.Connect(**Mysql.__config)
  69. return self.__conn
  70.  
  71. def __getCursor(self):
  72. """
  73. 获取游标
  74. :return: cursor
  75. """
  76. self.__cursor = self.__conn.cursor()
  77. return self.__cursor
  78.  
  79. @contextmanager
  80. def __con_cursor(self):
  81. """
  82. 1、定义上下文管理器,连接后自动关闭连接
  83. 2、元组对象前面如果不带“*”、字典对象如果前面不带“**”,则作为普通的对象传递参数。
  84. :return:
  85. """
  86. # 打开连接
  87. conn = self.__getConn()
  88. # 打开游标
  89. cursor = self.__getCursor()
  90.  
  91. try:
  92. yield cursor
  93. except Exception as ex:
  94. conn.rollback()
  95. Mysql.logger.error(repr(ex))
  96. finally:
  97. self.__conn.commit()
  98. self.__cursor.close()
  99. self.__conn.close()
  100.  
  101. # ---------- 搜索 ----------
  102.  
  103. def __query(self, cursor, sql, param=None):
  104. if param:
  105. count = cursor.execute(sql, param)
  106. else:
  107. count = cursor.execute(sql)
  108. return count
  109.  
  110. def getOne(self, sql, param=None):
  111. """
  112. @summary: 执行查询,并取出第一条
  113. @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
  114. @param param: 可选参数,条件列表值(元组/列表)
  115. @return: result list/boolean 查询到的结果集
  116. """
  117.  
  118. with self.__con_cursor() as cursor:
  119. if self.__query(cursor, sql, param) > 0:
  120. result = cursor.fetchone()
  121. else:
  122. result = False
  123. return result
  124.  
  125. def getMany(self, sql, param=None, num=1):
  126. """
  127. @summary: 执行查询,并取出num条结果
  128. @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
  129. @param num:取得的结果条数
  130. @param param: 可选参数,条件列表值(元组/列表)
  131. @return: result list/boolean 查询到的结果集
  132. """
  133. with self.__con_cursor() as cursor:
  134. if self.__query(cursor, sql, param) > 0:
  135. result = cursor.fetchmany(num)
  136. else:
  137. result = False
  138. return result
  139.  
  140. def getAll(self, sql, param=None):
  141. """
  142. @summary: 执行查询,并取出所有结果集
  143. @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
  144. @param param: 可选参数,条件列表值(元组/列表)
  145. @return: result list(字典对象)/boolean 查询到的结果集
  146. """
  147.  
  148. with self.__con_cursor() as cursor:
  149. if self.__query(cursor, sql, param) > 0:
  150. result = cursor.fetchall()
  151. else:
  152. result = False
  153. return result
  154.  
  155. def __select(self, table, cond_dict=None, order=None):
  156. """
  157. @summary: 执行条件查询,并取出所有结果集
  158. @cond_dict:{'name':'xiaoming'...}
  159. @order:'order by id desc'
  160. @return: result ({"col":"val","":""},{})
  161. """
  162. consql = ' '
  163. if cond_dict != '':
  164. for k, v in cond_dict.items():
  165. consql = consql + k + '=' + v + ' and'
  166. consql = consql + ' 1=1 '
  167. sql = 'select * from %s where ' % table
  168. sql = sql + consql + order
  169. print
  170. '_select:' + sql
  171. return self._exeCute(sql)
  172.  
  173. # ---------- 更新 ----------
  174.  
  175. def update(self, sql, param=None):
  176. """
  177. @summary: 更新数据表记录
  178. @param sql: SQL格式及条件,使用(%s,%s)
  179. @param param: 要更新的 值 tuple/list
  180. @return: count 受影响的行数
  181. """
  182. with self.__con_cursor() as cursor:
  183. return cursor.execute(sql, param)
  184.  
  185. # ---------- 删除 ----------
  186.  
  187. def delete(self, sql, param=None):
  188. """
  189. @summary: 删除数据表记录
  190. @param sql: SQL格式及条件,使用(%s,%s)
  191. @param param: 要删除的条件 值 tuple/list
  192. @return: count 受影响的行数
  193. """
  194.  
  195. with self.__con_cursor() as cursor:
  196. return cursor.execute(sql, param)
  197.  
  198. # ---------- 插入 ----------
  199.  
  200. # 插入一条/多条数据
  201. def insert(self, sql, *param):
  202. """
  203. @summary: 向数据表插入一条记录
  204. @param sql:要插入的SQL格式
  205. @param value:要插入的记录数据tuple/list
  206. @return: insertId
  207. """
  208. with self.__con_cursor() as cursor:
  209. # 执行插入操作
  210. cursor.executemany(sql, param)
  211. # cursor.execute(sql)
  212. # 获取最后更新的ID
  213. return cursor.lastrowid
  214.  
  215. if __name__ == '__main__':
  216. aaa = Mysql()
  217. # print(aaa.getOne("select * from erp_users"))
  218. # print(aaa.getOne("select * from erp_users WHERE id in(%s)", (19,)))
  219. # for item in aaa.getMany("select * from erp_users WHERE id in(19,39)", None, 5):
  220. # print(item)
  221. # for item in aaa.getAll("select name from erp_users ORDER BY `name` asc"):
  222. # print(item)
  223. # for item in aaa.getAll("select * from erp_users WHERE id in(%s)", (19,)):
  224. # print(item)
  225. print(aaa.update("UPDATE erp_users SET mail =%s WHERE id = %s", ('123@789', 19)))
  226. # print(aaa.delete("DELETE erp_users WHERE id = %s", (19,)))
  227. # print(aaa.getInsertId())
  228. # 插入一条数据
  229. # print(aaa.insert("INSERT `erp_areas` (`areaName`,`charge`,`areaCode`,`is_delete`,`commission`) VALUES (%s,%s,%s,%s,%s)", ('通州片区2222ssssssd', '片区经理3', '0', '0', '0.90')))
  230. # 插入多条数据
  231. # print(aaa.insert("INSERT `erp_areas` (`areaName`,`charge`,`areaCode`,`is_delete`,`commission`) VALUES (%s,%s,%s,%s,%s)", ('通州片区2222ssssssd', '片区经理3', '0', '0', '0.90'), ('通州片区2222ssssssd', '片区经理3', '0',
    '0', '0.90')))

python生成javabean

  1. import sys
  2. import datetime
  3. from unipath import *
  4.  
  5. sys.path.append("lib")
  6. from MySQLHelper import Mysql
  7. from io import StringIO
  8. from logbook import Logger, StreamHandler
  9.  
  10. # sys.path.append("lib/test")
  11. StreamHandler(sys.stdout).push_application()
  12. log = Logger('ProcessProdect')
  13.  
  14. class StringBuilder(object):
  15. _file_str = None
  16.  
  17. def __init__(self):
  18. self._file_str = StringIO()
  19.  
  20. def Append(self, str):
  21. self._file_str.write(str)
  22.  
  23. def AppendN(self, str):
  24. self._file_str.write(str + "\n")
  25.  
  26. def __str__(self):
  27. return self._file_str.getvalue()
  28.  
  29. class CreateJaveBean:
  30.  
  31. @staticmethod
  32. def createJaveClass(databaseName, tableName, ClassNameSuffix, filepath):
  33. # 类型映射
  34. datatypeMapping = {"varchar": "String", "int": "Integer", "bit": "Boolean", "datetime": "Date"}
  35. selectSql = "SELECT * FROM information_schema. COLUMNS WHERE TABLE_SCHEMA = '{schemaName}' AND table_name = '{tabName}';".format(schemaName=databaseName, tabName=tableName)
  36. mysql = Mysql()
  37.  
  38. resultset = mysql.getAll(selectSql)
  39. log.info(resultset)
  40. sb = StringBuilder()
  41. # entity #####################################################################################
  42. sb.AppendN("package com.shouxin.modules.erp.model;")
  43. sb.AppendN("")
  44. sb.AppendN("import lombok.*;")
  45. sb.AppendN("import org.hibernate.annotations.DynamicUpdate;")
  46. sb.AppendN("import javax.persistence.*;")
  47. sb.AppendN("import java.util.*;")
  48. sb.AppendN("")
  49. sb.AppendN("")
  50. sb.AppendN("/**")
  51. sb.AppendN(" * 保留版权 : CopyRright (c) 2018-2018 于继业 版权所有")
  52. sb.AppendN(" * 文件名称 : " + tableName + "Entity.java:")
  53. sb.AppendN(" * 文件编号 : 1-1-1")
  54. sb.AppendN(" * 功能描述 : ")
  55. sb.AppendN(" * 文件版本 : " + datetime.datetime.now().strftime('%Y-%m-%d') + ".01")
  56. sb.AppendN(" * 创建人名 : 于继业")
  57. sb.AppendN(" * 创建日期 : " + datetime.datetime.now().strftime('%Y-%m-%d'))
  58. sb.AppendN(" * 修改人名 :")
  59. sb.AppendN(" * 修改日期 :")
  60. sb.AppendN(" */")
  61. sb.AppendN("@RequiredArgsConstructor")
  62. sb.AppendN("@Accessors(chain = true)")
  63. sb.AppendN("@ToString")
  64. sb.AppendN("@EqualsAndHashCode")
  65. sb.AppendN("@Entity")
  66. sb.AppendN("@DynamicUpdate")
  67. sb.AppendN("@Table(name = \"" + str(tableName).lower() + "\")")
  68. sb.AppendN("public class " + tableName + ClassNameSuffix + " {")
  69. sb.AppendN("")
  70.  
  71. for data in resultset:
  72. # sb.Append(data["colName"] + "\t")
  73. # 获取注解
  74. sb.AppendN("/** " + data["COLUMN_COMMENT"] + " */")
  75. # PRI主键约束;
  76. # UNI唯一约束;
  77. # MUL可以重复。
  78. if data["COLUMN_KEY"].strip():
  79. sb.AppendN("@Id")
  80. sb.AppendN("@Getter")
  81. sb.AppendN("@Setter")
  82. sb.AppendN("@GeneratedValue(strategy = GenerationType.IDENTITY)")
  83. # 是否有版本控制
  84. elif str(data["COLUMN_NAME"]).lower() == "version":
  85. sb.AppendN("@Getter")
  86. sb.AppendN("@Setter")
  87. sb.AppendN("@Version")
  88. else: # 基本格式
  89. sb.AppendN("@Basic")
  90. sb.AppendN("@Getter")
  91. sb.AppendN("@Setter")
  92. sb.AppendN("@Column(name = \"" + data["COLUMN_NAME"] + "\"" + ("" if data["IS_NULLABLE"] == "YES" else ", nullable = false") + (", length = " + str(data["CHARACTER_MAXIMUM_LENGTH"]) if data["DATA_TYPE"] == "varchar" else "") + ")")
  93. # sb.AppendN("@Getter(onMethod = @_({" + keyinfo + ", @Column(name = \""
  94. # + data["COLUMN_NAME"] + "\""
  95. # + ("" if data["IS_NULLABLE"] == "YES" else ", nullable = false")
  96. # + (", length = " + str(data["CHARACTER_MAXIMUM_LENGTH"]) if data["DATA_TYPE"] == "varchar" else "") + ")}))")
  97. sb.AppendN("private " + datatypeMapping[data["DATA_TYPE"]] + " " + str(data["COLUMN_NAME"][0:1]).lower() + data["COLUMN_NAME"][1:] + ";")
  98. sb.AppendN("}")
  99. log.info(sb)
  100. with open(Path(Path(filepath), tableName + ClassNameSuffix + '.java'), 'w+', encoding='utf-8') as file:
  101. file.write(str(sb))
  102.  
  103. # dao层接口#####################################################################################
  104. sb = StringBuilder()
  105. sb.AppendN("package com.shouxin.modules.erp.dao;")
  106. sb.AppendN("")
  107. sb.AppendN("import com.shouxin.modules.erp.model." + tableName + "Entity;")
  108. sb.AppendN("import org.hibernate.HibernateException;")
  109. sb.AppendN("")
  110. sb.AppendN("")
  111. sb.AppendN("/**")
  112. sb.AppendN(" * 保留版权 : CopyRright (c) 2018-2018 于继业 版权所有")
  113. sb.AppendN(" * 文件名称 : I" + tableName + "Dao.java:")
  114. sb.AppendN(" * 文件编号 : 1-1-1")
  115. sb.AppendN(" * 功能描述 : ")
  116. sb.AppendN(" * 文件版本 : " + datetime.datetime.now().strftime('%Y-%m-%d') + ".01")
  117. sb.AppendN(" * 创建人名 : 于继业")
  118. sb.AppendN(" * 创建日期 : " + datetime.datetime.now().strftime('%Y-%m-%d'))
  119. sb.AppendN(" * 修改人名 :")
  120. sb.AppendN(" * 修改日期 :")
  121. sb.AppendN(" */")
  122. sb.AppendN("public interface I" + tableName + "Dao extends IBaseDao<" + tableName + "Entity> {")
  123. sb.AppendN("")
  124. sb.AppendN("}")
  125. with open(Path(Path(filepath), "I" + tableName + 'Dao.java'), 'w+', encoding='utf-8') as file:
  126. file.write(str(sb))
  127.  
  128. # dao层实现#####################################################################################
  129. sb = StringBuilder()
  130. sb.AppendN("package com.shouxin.modules.erp.dao.impl;")
  131. sb.AppendN("")
  132. sb.AppendN("import org.springframework.stereotype.Repository;")
  133. sb.AppendN("import org.hibernate.HibernateException;")
  134. sb.AppendN("import com.shouxin.modules.erp.dao.IRoleDao;")
  135. sb.AppendN("import com.shouxin.modules.erp.model.Role;")
  136. sb.AppendN("")
  137. sb.AppendN("")
  138. sb.AppendN("/**")
  139. sb.AppendN(" * 保留版权 : CopyRright (c) 2018-2018 于继业 版权所有")
  140. sb.AppendN(" * 文件名称 : " + tableName + "DaoImpl.java:")
  141. sb.AppendN(" * 文件编号 : 1-1-1")
  142. sb.AppendN(" * 功能描述 : ")
  143. sb.AppendN(" * 文件版本 : " + datetime.datetime.now().strftime('%Y-%m-%d') + ".01")
  144. sb.AppendN(" * 创建人名 : 于继业")
  145. sb.AppendN(" * 创建日期 : " + datetime.datetime.now().strftime('%Y-%m-%d'))
  146. sb.AppendN(" * 修改人名 :")
  147. sb.AppendN(" * 修改日期 :")
  148. sb.AppendN(" */")
  149. sb.AppendN("@Repository(\"" + str(tableName[0:1]).lower() + tableName[1:] + "Dao\")")
  150. sb.AppendN("public class " + tableName + "DaoImpl extends BaseDaoImpl<" + tableName + "Entity> implements I" + tableName + "Dao {")
  151. sb.AppendN("")
  152. sb.AppendN("}")
  153. with open(Path(Path(filepath), tableName + 'DaoImpl.java'), 'w+', encoding='utf-8') as file:
  154. file.write(str(sb))
  155.  
  156. if __name__ == '__main__':
  157. CreateJaveBean.createJaveClass("faith", "UniqueCode", "Entity", r'C:\Users\Administrator\Desktop\流程信息')

例子

  1. package com.shouxin.modules.erp.model;
  2.  
  3. import com.shouxin.annotation.model.AModelView;
  4. import lombok.*;
  5. import lombok.experimental.Accessors;
  6. import org.hibernate.annotations.DynamicUpdate;
  7.  
  8. import javax.persistence.*;
  9.  
  10. /**
  11. * 保留版权 : CopyRright (c) 2018-2018 于继业 版权所有
  12. * 文件名称 : UniqueCodeEntity.java:
  13. * 文件编号 : 1-1-1
  14. * 功能描述 : 唯一码存储表
  15. * 文件版本 : 2018-01-22.01
  16. * 创建人名 : 于继业
  17. * 创建日期 : 2018-01-22
  18. * 修改人名 :
  19. * 修改日期 :
  20. */
  21. @RequiredArgsConstructor
  22. @Accessors(chain = true)
  23. @ToString
  24. @EqualsAndHashCode
  25. @Entity
  26. @DynamicUpdate
  27. @AModelView(viewName = "view_uniquecode")
  28. @Table(name = "uniquecode")
  29. public class UniqueCodeEntity {
  30.  
  31. /**
  32. * 唯一码
  33. */
  34. @Id
  35. @Getter
  36. @Setter
  37. @GeneratedValue(strategy = GenerationType.IDENTITY)
  38. @Column(name = "ID", nullable = false)
  39. private Integer iD;
  40. /**
  41. * GUID
  42. */
  43. @Basic
  44. @Getter
  45. @Setter
  46. @Column(name = "GUID", nullable = false, length = 36, updatable = false)
  47. private String gUID;
  48. /**
  49. * 明码
  50. */
  51. @Basic
  52. @Getter
  53. @Setter
  54. @Column(name = "PublicCode", nullable = false, length = 36, updatable = false)
  55. private String publicCode;
  56. /**
  57. * 暗码
  58. */
  59. @Basic
  60. @Getter
  61. @Setter
  62. @Column(name = "PrivateCode", nullable = false, length = 36, updatable = false)
  63. private String privateCode;
  64. /**
  65. * 所属供应商
  66. */
  67. @Basic
  68. @Getter
  69. @Setter
  70. @Column(name = "VenID", nullable = false, updatable = false)
  71. private Integer venID;
  72. /**
  73. * 类型
  74. */
  75. @Basic
  76. @Getter
  77. @Setter
  78. @Column(name = "TypeID", updatable = false)
  79. private Integer typeID;
  80. /**
  81. * 状态
  82. */
  83. @Basic
  84. @Getter
  85. @Setter
  86. @Column(name = "StateID")
  87. private Integer stateID;
  88. /**
  89. * 所属产品
  90. */
  91. @Basic
  92. @Getter
  93. @Setter
  94. @Column(name = "ProID", nullable = false, updatable = false)
  95. private Integer proID;
  96. }

用python生成基于lombok 和 hibernate 生成javabean的更多相关文章

  1. python实现基于两张图片生成圆角图标效果的方法

    python实现基于两张图片生成圆角图标效果的方法 这篇文章主要介绍了python实现基于两张图片生成圆角图标效果的方法,实例分析了Python使用pil模块进行图片处理的技巧,分享给大家供大家参考. ...

  2. 让Hibernate生成的DDL脚本自动增加注释

    我们知道可以通过Hibernate对象自动生成DDL建表语句,通过PowerDesigner工具可以反向工程生成数据字典,但是在生成的DDL中一直不能写上中文的注释,这就使我们生成的数据字典不具有可用 ...

  3. 基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v4.1.2版)

            目录:            第1版:http://blog.csdn.net/vipbooks/article/details/51912143            第2版:htt ...

  4. JSP利用freemarker生成基于word模板的word文档

    利用freemarker生成基于word模板的word文档 freemarker简介 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器 ...

  5. Hibernate学习笔记(三)Hibernate生成表单ID主键生成策略

    一. Xml方式 <id>标签必须配置在<class>标签内第一个位置.由一个字段构成主键,如果是复杂主键<composite-id>标签 被映射的类必须定义对应数 ...

  6. 用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean)

    用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean) 安装: 在help中eclise marksplace中查询JBo ...

  7. J2EE进阶(十五)MyEclipse反向工程实现从数据库反向生成实体类之Hibernate方式

    J2EE进阶(十五)MyEclipse反向工程实现从数据库反向生成实体类之Hibernate方式   反向工程又称逆向工程.   开发项目涉及到的表太多,一个一个的写JAVA实体类很是费事.MyEcl ...

  8. python 将png图片格式转换生成gif动画

    先看知乎上面的一个连接 用Python写过哪些[脑洞大开]的小工具? https://www.zhihu.com/question/33646570/answer/157806339 这个哥们通过爬气 ...

  9. Visual Studio2012 添加服务引用时,生成基于任务操作不可用原因

    今天在添加服务引用时,发现 单选按钮 ”生成基于任务操作“不可用,原因项目选择的.net frame是3.5,调整为.net 4.5或.net4.6即可. 原因:.net4.5以下的环境不支持.

随机推荐

  1. f1 f12热键关闭

    fn+f2进入bios系统——>找到configuration——>Hotkey Mode——>enter——>选择disable——>fn+f10保存

  2. java 查看运行时某个类文件所在jar的位置

    在一些大型项目中,项目所依赖的库可能比较到,有时候也会出现库冲突的情况,曾经遇到过一种情况:一个第三方云存储提供了一个sdk,这个sdk本身依赖httpclient相关的包,然而对方却把httpcli ...

  3. hdu 3729(二分图最大匹配)

    I'm Telling the Truth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  4. mybatis spring sqlsession

    sqlsession是什么? 从 http://blog.csdn.net/hupanfeng/article/details/9238127 知道 sqlsession创建 可以看出,创建sqlse ...

  5. Centos6.9下安装OpenOffice 4.1.4

    # 对一下时间,时间不准,解压不了yum install -y ntp unzipntpdate -u 202.112.10.36yum install libXext.x86_64 -yyum gr ...

  6. 利用js生成读取页面数据并导出为excel

    //核心,js部分 */var navs = new Vue({ el: '#navs', data: { navs: [] }, ready: function () { this.$http.ge ...

  7. win10的VMware虚机host-only模式下,虚拟机无法ping通物理机,而物理机能ping通虚机

    1.打开控制面板—->Windows防火墙(win10操作系统) 2.点击最上面的”允许应用或功能通过xxxxx” 3.勾上上图的“文件和打印机共享” 然后点确定.

  8. 五十七 POP3收取邮件

    SMTP用于发送邮件,如果要收取邮件呢? 收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上.收取邮件最常用的协议是POP协议,目前版本号是3,俗称POP3. Python ...

  9. POJ 2777.Count Color-线段树(区间染色+区间查询颜色数量二进制状态压缩)-若干年之前的一道题目。。。

    Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 53312   Accepted: 16050 Des ...

  10. 从零开始做SSH项目(二)

    使用hibernate测试加载数据.删除数据和修改数据等功能时,针对的是与数据库表user对应的User. 为了简化对其他数据表对应的实体类的持久化操作,可以在项目中创建一个BaseHibernate ...