天天看點

将資料庫表轉為POJO

第一步:連接配接資料庫

<code>import</code> <code>java.sql.Connection;</code>

<code>import</code> <code>java.sql.DriverManager;</code>

<code>import</code> <code>java.sql.ResultSet;</code>

<code>import</code> <code>java.sql.SQLException;</code>

<code>import</code> <code>java.sql.Statement;</code>

<code>import</code> <code>javax.swing.JOptionPane;</code>

<code>public</code> <code>class</code> <code>DBConnection {</code>

<code>private</code> <code>static</code> <code>final</code> <code>String DBDRIVER = </code><code>"com.mysql.jdbc.Driver"</code><code>;                 </code><code>//驅動類類名</code>

<code>private</code> <code>static</code> <code>final</code> <code>String DBURL = </code><code>"jdbc:mysql://localhost:3306/ibatis"</code><code>;       //連接配接URL</code>

<code>private</code> <code>static</code> <code>final</code> <code>String DBUSER = </code><code>"root"</code><code>;                                    </code><code>//資料庫使用者名</code>

<code>private</code> <code>static</code> <code>final</code> <code>String DBPASSWORD = </code><code>"admin"</code><code>;                               </code><code>//資料庫密碼</code>

<code>static</code><code>{                                                                         </code><code>//将加載驅動放到靜态塊中</code>

<code>try</code> <code>{</code>

<code>Class.forName(DBDRIVER);                                                </code><code>//加載驅動</code>

<code>} </code><code>catch</code> <code>(ClassNotFoundException e1) {                                       </code><code>//發生加載驅動異常</code>

<code>JOptionPane.showMessageDialog(</code><code>null</code><code>,</code><code>"加載驅動失敗!!!"</code><code>,</code><code>"提示資訊"</code><code>,</code>

<code>JOptionPane.INFORMATION_MESSAGE);                               </code><code>//提示加載驅動失敗</code>

<code>}</code>

<code>public</code> <code>static</code> <code>Connection getConnection() {</code>

<code>Connection conn = </code><code>null</code><code>;                                                     </code><code>//建立Connection接口引用</code>

<code>conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);          </code><code>//建立連接配接</code>

<code>} </code><code>catch</code> <code>(SQLException e) {                                                  </code><code>// 發生連接配接異常</code>

<code>JOptionPane.showMessageDialog(</code><code>null</code><code>,</code><code>"連接配接MySQL連接配接失敗!!!"</code><code>,</code><code>"提示資訊"</code><code>,</code>

<code>JOptionPane.INFORMATION_MESSAGE);                               </code><code>//提示連接配接MySQL連接配接失敗</code>

<code>return</code> <code>conn;</code>

<code>public</code> <code>static</code> <code>void</code> <code>close(Connection conn) {</code>

<code>if</code> <code>(conn != </code><code>null</code><code>) {                                                         </code><code>//判斷Connection對象是否為空</code>

<code>conn.close();                                                       </code><code>// 關閉連接配接資料庫資源</code>

<code>} </code><code>catch</code> <code>(SQLException e){                                               </code><code>//判斷關閉Connection對象時是否發生異常</code>

<code>System.out.println(</code><code>"關閉資料庫連接配接發生異常"</code><code>);</code>

<code>public</code> <code>static</code> <code>void</code> <code>close(Statement stmt) {</code>

<code>if</code> <code>(stmt != </code><code>null</code><code>){                                                          </code><code>//判斷Statement對象是否為空</code>

<code>stmt.close();                                                       </code><code>//關閉操作資料庫資源</code>

<code>} </code><code>catch</code> <code>(SQLException e){                                               </code><code>//判斷關閉Statement對象時是否發生異常</code>

<code>JOptionPane.showMessageDialog(</code><code>null</code><code>,</code><code>"關閉資料庫操作資源發生異常!!!"</code><code>,</code><code>"提示資訊"</code><code>,</code>

<code>JOptionPane.INFORMATION_MESSAGE);                           </code><code>//提示關閉資料庫操作資源發生異常</code>

<code>public</code> <code>static</code> <code>void</code> <code>close(ResultSet rs) {</code>

<code>if</code> <code>(rs != </code><code>null</code><code>) {                                                           </code><code>//判斷結果集是否為空</code>

<code>rs.close();                                                         </code><code>//關閉結果集</code>

<code>} </code><code>catch</code> <code>(SQLException e){                                               </code><code>//判斷結果集是否發生異常</code>

<code>JOptionPane.showMessageDialog(</code><code>null</code><code>,</code><code>"關閉結果集發生異常!!!"</code><code>,</code><code>"提示資訊"</code><code>,</code>

<code>JOptionPane.INFORMATION_MESSAGE);                           </code><code>//提示關閉結果集發生異常</code>

第二步:執行轉換:

<code>import</code> <code>java.io.File;</code>

<code>import</code> <code>java.io.PrintWriter;</code>

<code>import</code> <code>java.sql.DatabaseMetaData;</code>

<code>import</code> <code>java.sql.PreparedStatement;</code>

<code>import</code> <code>java.sql.ResultSetMetaData;</code>

<code>import</code> <code>java.sql.Types;</code>

<code>import</code> <code>org.apache.commons.dbutils.DbUtils;</code>

<code>public</code> <code>class</code> <code>BuildDTO {</code>

<code>public</code> <code>void</code> <code>build(String tableName, String packageName, String className) {</code>

<code>Connection conn = </code><code>null</code><code>;</code>

<code>PreparedStatement pment = </code><code>null</code><code>;</code>

<code>ResultSet rs = </code><code>null</code><code>;</code>

<code>PrintWriter pw = </code><code>null</code><code>;</code>

<code>String pack = packageName.replace(</code><code>"."</code><code>, </code><code>"/"</code><code>);</code>

<code>// 包名</code>

<code>System.out.println(</code><code>"src/"</code> <code>+ pack + </code><code>"/"</code> <code>+ className + </code><code>".java"</code><code>);</code>

<code>pw = </code><code>new</code> <code>PrintWriter(</code><code>new</code> <code>File(</code><code>"src/"</code> <code>+ pack + </code><code>"/"</code> <code>+ className</code>

<code>+ </code><code>".java"</code><code>));</code>

<code>pw.println(</code><code>"package "</code> <code>+ packageName + </code><code>";\n\n"</code><code>);</code>

<code>pw.println(</code><code>""</code><code>);</code>

<code>pw.println(</code><code>"public class "</code> <code>+ className + </code><code>" \n{\t"</code><code>);</code>

<code>// 建立連接配接</code>

<code>conn = DBConnection.getConnection();</code>

<code>// 建構預處理器</code>

<code>pment = conn.prepareStatement(</code><code>"select * from "</code> <code>+ tableName</code>

<code>+ </code><code>" where 1 = 2;"</code><code>);</code>

<code>rs = pment.executeQuery();</code>

<code>ResultSetMetaData metaData = rs.getMetaData();</code>

<code>// 擷取表單的列數</code>

<code>int</code> <code>colum = metaData.getColumnCount();</code>

<code>for</code> <code>(</code><code>int</code> <code>i = </code><code>1</code><code>; i &lt;= colum; i++) {</code>

<code>String pStr = </code><code>""</code><code>; </code><code>// setXxxx</code>

<code>String typeStr = </code><code>""</code><code>; </code><code>// 類型</code>

<code>// 擷取列名</code>

<code>String columName = metaData.getColumnName(i);</code>

<code>// 擷取每一列的資料類型</code>

<code>int</code> <code>type = metaData.getColumnType(i);</code>

<code>// System.out.println(i+"---"+type);</code>

<code>// 判斷</code>

<code>typeStr = type(type);</code>

<code>// 組裝 private 的語句</code>

<code>pStr += </code><code>"private "</code> <code>+ typeStr + </code><code>" "</code> <code>+ columName + </code><code>";"</code><code>;</code>

<code>// 輸出 private 的字段</code>

<code>pw.println(</code><code>"\t"</code> <code>+ pStr + </code><code>""</code><code>);</code>

<code>String constructStr = </code><code>""</code><code>; </code><code>// 構造</code>

<code>// 組裝空參構造</code>

<code>constructStr += </code><code>"public "</code> <code>+ className + </code><code>"()\n\t{\n\n\t}"</code><code>;</code>

<code>// 輸出空參構造</code>

<code>pw.println(</code><code>"\n\t"</code> <code>+ constructStr + </code><code>"\n"</code><code>);</code>

<code>String getStr = </code><code>""</code><code>;</code>

<code>String setStr = </code><code>""</code><code>;</code>

<code>String typeStr = </code><code>""</code><code>;</code>

<code>// 組裝 set 的語句</code>

<code>setStr += </code><code>"public void set"</code>

<code>+ columName.substring(</code><code>0</code><code>, </code><code>1</code><code>).toUpperCase() + </code><code>""</code>

<code>+ columName.substring(</code><code>1</code><code>) + </code><code>"("</code> <code>+ typeStr + </code><code>" "</code>

<code>+ columName + </code><code>")\n\t{\n"</code><code>;</code>

<code>setStr += </code><code>"\t\tthis."</code> <code>+ columName + </code><code>" = "</code> <code>+ columName</code>

<code>+ </code><code>";\n\t}"</code><code>;</code>

<code>// 組裝get語句</code>

<code>getStr += </code><code>"public "</code> <code>+ typeStr + </code><code>" get"</code>

<code>+ columName.substring(</code><code>1</code><code>) + </code><code>"()\n\t{\n\t"</code><code>;</code>

<code>getStr += </code><code>"\treturn this."</code> <code>+ columName + </code><code>";\n\t}"</code><code>;</code>

<code>// 輸出 set</code>

<code>pw.println(</code><code>"\t"</code> <code>+ setStr);</code>

<code>// 輸出 get</code>

<code>pw.println(</code><code>"\t"</code> <code>+ getStr);</code>

<code>pw.println(</code><code>"}"</code><code>);</code>

<code>// 緩沖</code>

<code>pw.flush();</code>

<code>pw.close();</code>

<code>} </code><code>catch</code> <code>(Exception e) {</code>

<code>e.printStackTrace();</code>

<code>} </code><code>finally</code> <code>{</code>

<code>// 關閉連接配接</code>

<code>DbUtils.closeQuietly(conn, pment, rs);</code>

<code>public</code> <code>String type(</code><code>int</code> <code>type) {</code>

<code>String typeStr = </code><code>null</code><code>;</code>

<code>if</code> <code>(Types.INTEGER == type) {</code>

<code>typeStr = </code><code>"Integer"</code><code>;</code>

<code>} </code><code>else</code> <code>if</code> <code>(Types.VARCHAR == type) {</code>

<code>typeStr = </code><code>"String"</code><code>;</code>

<code>} </code><code>else</code> <code>if</code> <code>(Types.CHAR == type) {</code>

<code>typeStr = </code><code>"CHAR"</code><code>;</code>

<code>} </code><code>else</code> <code>if</code> <code>(Types.TIMESTAMP == type) {</code>

<code>typeStr = </code><code>"Date"</code><code>;</code>

<code>} </code><code>else</code> <code>if</code> <code>(Types.INTEGER == type) {</code>

<code>} </code><code>else</code> <code>if</code> <code>(Types.LONGVARCHAR == type) {</code>

<code>return</code> <code>typeStr;</code>

<code>//擷取資料庫中的所有表</code>

<code>public</code> <code>void</code> <code>getTableNameByCon(Connection con) {</code>

<code>DatabaseMetaData meta = con.getMetaData();</code>

<code>ResultSet rs = meta.getTables(</code><code>null</code><code>, </code><code>null</code><code>, </code><code>null</code><code>,</code>

<code>new</code> <code>String[] { </code><code>"TABLE"</code> <code>});</code>

<code>while</code> <code>(rs.next()) {</code>

<code>System.out.println(</code><code>"表名:"</code> <code>+ rs.getString(</code><code>3</code><code>));</code>

<code>System.out.println(</code><code>"表所屬使用者名:"</code> <code>+ rs.getString(</code><code>2</code><code>));</code>

<code>System.out.println(</code><code>"------------------------------"</code><code>);</code>

<code>con.close();</code>

<code>} </code><code>catch</code> <code>(Exception e1) {</code>

<code>// TODO Auto-generated catch block</code>

<code>e1.printStackTrace();</code>

<code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>

<code>BuildDTO dto = </code><code>new</code> <code>BuildDTO();</code>

<code>dto.build(</code><code>"User"</code><code>, </code><code>"com.mzsx.sql2bean"</code><code>, </code><code>"User"</code><code>);</code>

<code>dto.getTableNameByCon(DBConnection.getConnection());</code>

版權聲明:原創作品,如需轉載,請注明出處。否則将追究法律責任

本文轉自 夢朝思夕 51CTO部落格,原文連結:http://blog.51cto.com/qiangmzsx/1305085