日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【Lolttery】项目开发日志 (二) 数据库的二三事

發(fā)布時間:2024/1/17 数据库 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Lolttery】项目开发日志 (二) 数据库的二三事 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

基本的框架定好了之后,就是數(shù)據(jù)庫的問題咯。在框架上我們選用了現(xiàn)在比較流行的mybatis框架。

mybatis與spring的整合十分簡單:

<!-- 配置sqlSessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 實例化sqlSessionFactory時需要使用上述配置好的數(shù)據(jù)源以及SQL映射文件 --><property name="dataSource" ref="dataSource" /><!--若使用注解配置sql,此處可以不用xml文件配置--><property name="mapperLocations" value="classpath:/mybatis/*.xml" /></bean> 復制代碼

不過在使用過程中倒是遇到并解決了一些問題和疑惑

##1、mybatis不能將表名作為參數(shù)

這一點是個挺坑爹的事情。源于希望寫一個公用的刪除接口。刪除指定表中指定id的數(shù)據(jù)。

根據(jù)百度的結(jié)果,mybatis并不能將表名作為參數(shù)。

于是最后的解決方案是混用了spring的jdbcTemplate。只要一個配置:

<bean id = "jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate"> <property name = "dataSource" ref="dataSource"/> </bean> 復制代碼

很簡單就可以使用。

jdbcTemplate簡單的封裝了jdbc操作,執(zhí)行一些與實體無關(guān)的sql的時候還是挺方便的。

在設(shè)計上id只有自增和字符串兩種,所以公用刪除方法也挺簡單的:

public void commonDelete(String table,Object id){if(id instanceof String)jdbcTemplate.execute("delece from "+table+" where id=\""+id+"\"");elsejdbcTemplate.execute("delete from "+table+" where id="+id+"");} 復制代碼

##2、關(guān)于bean的問題

mybatis需要一大堆的bean來做各種存儲: 查詢條件,查詢結(jié)果,數(shù)據(jù)庫實體巴拉巴拉……

剛剛遇到這個問題的時候著實嚇到了我。仿佛看到了一個項目100個類有80個都是各種bean……

目前看來,這是一個不可避免的問題。所以準備用mybatis的童鞋也做好面對一大堆的bean的準備。

不過說回來,有各種代碼補全,生成一個Bean也不是很麻煩的事情。但是如何組織這些bean才是麻煩的事情。為了避免日后混亂,我們給bean的命名制定了一套規(guī)則,以數(shù)據(jù)庫表名為基本實體,用前后綴和包名進行標識。

##3、意外的學習:mybatis聯(lián)合查詢

在搞bean的時候意外的百度到了mybatis的聯(lián)合查詢,發(fā)現(xiàn)還是挺強大的。

大體的流程就是這樣的:

(1)定義好一個聯(lián)合查詢的結(jié)果Bean,比如現(xiàn)在有User和Blog兩個bean,做一個UserBlogs

然后在UserBlogs里面復制User的參數(shù),加一個List blogs。

(2)做映射。主要是為了避免User中的參數(shù)和Blog中的參數(shù)有重名,會導致框架不知道該把字段交給誰

(3)根據(jù)映射做查詢。用簡單的聯(lián)合查詢sql語句,注意查詢結(jié)果的字段名要給別名,與映射好的字段一一對應。

然后就可以使用sql進行聯(lián)合查詢,會拿到一個帶著博客列表的用戶信息。

具體的代碼還是看人家大神的博客比較好:

http://www.cnblogs.com/luxiaoxun/p/4035276.html

##4、還是bean的問題

有時候數(shù)據(jù)庫字段太多,寫插入、修改語句什么的還是挺鬧心的……

于是做了一個簡單的插入語句生成器:

/*** 根據(jù)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);}/*** 根據(jù)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);} 復制代碼

總結(jié)

以上是生活随笔為你收集整理的【Lolttery】项目开发日志 (二) 数据库的二三事的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。