基本的框架定好了以後,就是數據庫的問題咯。在框架上咱們選用瞭如今比較流行的mybatis框架。
html
mybatis與spring的整合十分簡單:spring
<!-- 配置sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 實例化sqlSessionFactory時須要使用上述配置好的數據源以及SQL映射文件 --> <property name="dataSource" ref="dataSource" /> <!--若使用註解配置sql,此處能夠不用xml文件配置--> <property name="mapperLocations" value="classpath:/mybatis/*.xml" /> </bean>
不過在使用過程當中卻是遇到並解決了一些問題和疑惑sql
一、mybatis不能將表名做爲參數數據庫
這一點是個挺坑爹的事情。源於但願寫一個公用的刪除接口。刪除指定表中指定id的數據。mybatis
根據百度的結果,mybatis並不能將表名做爲參數。app
因而最後的解決方案是混用了spring的jdbcTemplate。只要一個配置:框架
<bean id = "jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate"> <property name = "dataSource" ref="dataSource"/> </bean>
很簡單就可使用。學習
jdbcTemplate簡單的封裝了jdbc操做,執行一些與實體無關的sql的時候仍是挺方便的。ui
在設計上id只有自增和字符串兩種,因此公用刪除方法也挺簡單的:spa
public void commonDelete(String table,Object id){ if(id instanceof String) jdbcTemplate.execute("delece from "+table+" where id=\""+id+"\""); else jdbcTemplate.execute("delete from "+table+" where id="+id+""); }
二、關於bean的問題
mybatis須要一大堆的bean來作各類存儲: 查詢條件,查詢結果,數據庫實體巴拉巴拉……
剛剛遇到這個問題的時候着實嚇到了我。彷彿看到了一個項目100個類有80個都是各類bean……
目前看來,這是一個不可避免的問題。因此準備用mybatis的童鞋也作好面對一大堆的bean的準備。
不過說回來,有各類代碼補全,生成一個Bean也不是很麻煩的事情。可是如何組織這些bean纔是麻煩的事情。爲了不往後混亂,咱們給bean的命名制定了一套規則,以數據庫表名爲基本實體,用先後綴和包名進行標識。
三、意外的學習:mybatis聯合查詢
在搞bean的時候意外的百度到了mybatis的聯合查詢,發現仍是挺強大的。
大致的流程就是這樣的:
(1)定義好一個聯合查詢的結果Bean,好比如今有User和Blog兩個bean,作一個UserBlogs
而後在UserBlogs裏面複製User的參數,加一個List<Blogs> blogs。
(2)作映射。主要是爲了不User中的參數和Blog中的參數有重名,會致使框架不知道該把字段交給誰
(3)根據映射作查詢。用簡單的聯合查詢sql語句,注意查詢結果的字段名要給別名,與映射好的字段一一對應。
而後就可使用sql進行聯合查詢,會拿到一個帶着博客列表的用戶信息。
具體的代碼仍是看人家大神的博客比較好:
http://www.cnblogs.com/luxiaoxun/p/4035276.html
四、仍是bean的問題
有時候數據庫字段太多,寫插入、修改語句什麼的仍是挺鬧心的……
因而作了一個簡單的插入語句生成器:
/** * 根據bean生成添加sql語句 * @param table * @param bean */ public static void genAddSql(String table,Class bean) { StringBuilder builder =new StringBuilder(); builder.append("insert into ").append(table); StringBuilder preffix = new StringBuilder(" ("); StringBuilder surffix = new StringBuilder("("); Method[] methods = bean.getMethods(); for (Method method : methods) { String name = method.getName(); if(name.equals("setId")) continue; if(name.startsWith("set")){ preffix.append(name.substring(3).toLowerCase()).append(","); surffix.append("#{").append(name.substring(3).toLowerCase()).append("},"); } } preffix.deleteCharAt(preffix.length()-1); surffix.deleteCharAt(surffix.length()-1); preffix.append(") values "); surffix.append(")"); builder.append(preffix).append(surffix); System.out.println(builder); } /** * 根據bean生成修改sql語句 * @param table * @param bean */ public static void genUpdateSql(String table,Class bean) { StringBuilder builder =new StringBuilder(); builder.append("update ").append(table).append(" set "); Method[] methods = bean.getMethods(); for (Method method : methods) { String name = method.getName(); if(name.equals("setId")) continue; if(name.startsWith("set")){ String p = name.substring(3).toLowerCase(); builder.append("<if test=\"#{").append(p).append("}!=null\">"); builder.append(p).append("=#{").append(p).append("} ").append("</if>"); } } builder.append("where id=#{id}"); System.out.println(builder); }