JAVAはDAO層基本CRUD操作を実現
34196 ワード
shh 2フレームワークの様々な操作の利便性に伴い、ますます多くのJAVA WEB開発者がこれらのフレームワークに参加することで開発効率を高めることを選択しているが、これらのフレームワークの使用を理解していない場合、プロジェクトを手に入れると盲目的にこれらのフレームワークを選択して系統的なアーキテクチャの構築を行うことは、多くの不要な資源の浪費をもたらす可能性がある.
プロジェクト開発において、データベースのCRUD操作は一般的に避けられない操作であり、hibernateパッケージは完璧であるが、本人はこのフレームワークの下層原理をよく知らないため、使用するたびに心の底が底をついていないと感じ、コードが異常になると、迅速かつ効果的に解決できないことが多い.コード異常処理リスクを自分の制御可能範囲内に制御するためには、まずデータのCRUD永続化操作(DAO)を自分の方法でJDBCでカプセル化し、自分のコードをよりよく管理することを決定する.Hibernateフレームワークの使用については,まずそのいくつかの下位実装原理を理解してから,プロジェクトの必要に応じて適宜選択して使用する.
以下、DAO層データベースの基本的なCRUD操作に関するJAVA実装について具体的に説明します(ここではMySQLを例に挙げていますが、他のデータベースは一部修正するだけです).
メモ:この例を試用するには、与えられた順序で対応するクラスを順番に作成するだけです.また、プロジェクトlibディレクトリの下にmysqlリンクjarパッケージを追加します.
(1)データソース定数クラスの定義
(2)結果セット(ResultSet)からpojoオブジェクトへのマッピングの定義
(3)データベース接続支援クラスDBConnの定義
(4)汎用ページングクエリーエンティティークラスの定義
(5)SQL文を定義する一般的なメソッドツールクラス
(6)拡張JAVAオブジェクトの反射ツールクラス
(7)実装データベースを定義するCRUD基本操作BaseDao
以上は、自身の理解に基づいてパッケージ化された一般的なDAOレイヤの操作であり、導入ラインの2つのプロジェクトに運用されており、BUGはまだ報告されていない.しかし、効率の面では、個人的には最適化が必要なところがたくさんあると思います.例えば、一括削除操作は、私のパソコンのテストの結果、JDBCが持参した一括操作を使用すると、上記の簡単なサイクルの操作速度よりも遅いと思いますが、この部分の効率はまだ大きな向上の余地があると思います.ITカードを持って教えてほしいと思っています.あまり感謝しません.
プロジェクト開発において、データベースのCRUD操作は一般的に避けられない操作であり、hibernateパッケージは完璧であるが、本人はこのフレームワークの下層原理をよく知らないため、使用するたびに心の底が底をついていないと感じ、コードが異常になると、迅速かつ効果的に解決できないことが多い.コード異常処理リスクを自分の制御可能範囲内に制御するためには、まずデータのCRUD永続化操作(DAO)を自分の方法でJDBCでカプセル化し、自分のコードをよりよく管理することを決定する.Hibernateフレームワークの使用については,まずそのいくつかの下位実装原理を理解してから,プロジェクトの必要に応じて適宜選択して使用する.
以下、DAO層データベースの基本的なCRUD操作に関するJAVA実装について具体的に説明します(ここではMySQLを例に挙げていますが、他のデータベースは一部修正するだけです).
メモ:この例を試用するには、与えられた順序で対応するクラスを順番に作成するだけです.また、プロジェクトlibディレクトリの下にmysqlリンクjarパッケージを追加します.
(1)データソース定数クラスの定義
package com.jkitn.jkits.common;
/**
*
* @author xdweleven
* @version 1.0
*/
public class JdbcConfig {
/** */
public static final String DRIVERCLASSNAME = "com.mysql.jdbc.Driver";
/** URL */
public static final String URL = "jdbc:mysql://localhost:3306/app_jkit";
/** */
public static final String USERNAME = "root";
/** */
public static final String PASSWORD = "root";
}
(2)結果セット(ResultSet)からpojoオブジェクトへのマッピングの定義
package com.jkitn.jkits.dao.common;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* : pojo
* @author xdweleven
* @version 1.0
*/
public class RowMapper{
private Class objectClass;
public RowMapper(Class objectClass) {
this.objectClass = objectClass;
}
/**
*
* @param rs
* @param rowNum
* @return
* @throws SQLException
*/
public T mapRow(ResultSet rs, int rowNum) throws SQLException {
try {
T object = objectClass.newInstance();
//
ResultSetMetaData metaData = rs.getMetaData();
int columnNum = metaData.getColumnCount();
Field[] fields = object.getClass().getDeclaredFields();
// , , null.
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
int flag = 0;
for (int j = 1; j <= columnNum; j++) {
if (metaData.getColumnName(j).toLowerCase().equals(field.getName().toLowerCase())) {
flag = 1;
break;
}
}
field.setAccessible(true);
if (flag == 1) {
this.typeMapper(field, object, rs);
}else {
field.set(object, null);
}
field.setAccessible(false);
}
return object;
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
/**
*
* @param rs
* @return
*/
public List mapRows(ResultSet rs){
int rowNum = 0;
List objList = new ArrayList();
try {
while(rs.next()){
objList.add(this.mapRow(rs, rowNum++));
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
return objList;
}
/**
*
* @param field
* @param obj
* @param rs
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws SQLException
*/
private void typeMapper(Field field, Object obj, ResultSet rs) {
String typeName = field.getType().getName(); //
try {
if (typeName.equals("java.lang.String")) {
field.set(obj, rs.getString(field.getName()));
} else if (typeName.equals("int")
|| typeName.equals("java.lang.Integer")) {
field.set(obj, rs.getInt(field.getName()));
} else if (typeName.equals("long")
|| typeName.equals("java.lang.Long")) {
field.set(obj, rs.getLong(field.getName()));
} else if (typeName.equals("float")
|| typeName.equals("java.lang.Float")) {
field.set(obj, rs.getFloat(field.getName()));
} else if (typeName.equals("double")
|| typeName.equals("java.lang.Double")) {
field.set(obj, rs.getDouble(field.getName()));
} else if (typeName.equals("boolean")
|| typeName.equals("java.lang.Boolean")) {
field.set(obj, rs.getBoolean(field.getName()));
} else if (typeName.equals("java.util.Date")) {
field.set(obj, rs.getTimestamp(field.getName()));
} else {
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
(3)データベース接続支援クラスDBConnの定義
package com.jkitn.jkits.common;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import com.jkitn.jkits.dao.common.RowMapper;
/**
* DBConn
* @author xdweleven
* @version 1.0
*/
public class DBConn {
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
/**
*
* @return
*/
public Connection getConn(){
try {
//
Class.forName(JdbcConfig.DRIVERCLASSNAME);
// Connection , MySQL
conn = DriverManager.getConnection(JdbcConfig.URL, JdbcConfig.USERNAME, JdbcConfig.PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* ( )
* @param sql sql
* @param objs
* @return null
* @throws Exception
*/
public int execUpdate(String sql, Object ...objs) throws Exception{
//
pstmt = this.getConn().prepareStatement(sql);
if(objs != null && objs.length > 0){
for(int i = 0; i < objs.length; i++){
pstmt.setObject(i+1, objs[i]);
}
}
//
int result = pstmt.executeUpdate();
// ,
this.close(rs, pstmt, conn);
return result;
}
/**
*
* @param sql sql
* @param objs
* @return T List ,
* @throws Exception
*/
public List execQuery(String sql, RowMapper mapper, Object ...objs) throws Exception{
//
pstmt = this.getConn().prepareStatement(sql);
if(objs != null && objs.length > 0){
for(int i = 0; i < objs.length; i++){
pstmt.setObject(i+1, objs[i]);
}
}
//
rs = pstmt.executeQuery();
//
List result = mapper.mapRows(rs);
// ,
this.close(rs, pstmt, conn);
return result;
}
/**
* SQL
* @param sql SQL
* @param params
* @return
*/
public ResultSet queryForResultSet(String sql, Object... objs) throws Exception{
//
pstmt = conn.prepareStatement(sql);
if(objs != null && objs.length > 0){
for(int i = 0; i < objs.length; i++){
pstmt.setObject(i+1, objs[i]);
}
}
//
rs = pstmt.executeQuery();
// ,
this.close(null, pstmt, conn);
return rs;
}
/**
* ,
* @param rs 、ppst 、conn
* @return null
* @throws Exception
*/
public void close(ResultSet rs, PreparedStatement ppst, Connection conn) throws Exception{
if(rs != null){
rs.close();
}
if(ppst != null){
ppst.close();
}
if(conn != null){
conn.close();
}
}
}
(4)汎用ページングクエリーエンティティークラスの定義
package com.jkitn.jkits.common;
import java.util.List;
/**
* :
* @author xdweleven
* @version 1.0
*/
public class PageBean {
private int totalRows; //
private int totalPages; //
private int curPage; //
private int prePage; //
private int nextPage; //
private int rowsPerPage; //
private List pageList; //
/**
* bean
* @param totalRows
* @param rowsPerPage
*/
public void initPageBean(int totalRows, int rowsPerPage){
this.rowsPerPage = rowsPerPage;
this.totalRows = totalRows;
this.totalPages = (this.totalRows-1)/this.rowsPerPage + 1;
//
if(this.curPage == 1){
this.setPrePage(1);
}else{
this.setPrePage(this.curPage-1);
}
//
if(this.curPage == this.totalPages){
this.setNextPage(this.totalPages);
}else{
this.setNextPage(this.curPage + 1);
}
}
/**
* SQLServer
* @param sql sql
* @param curPage
* @param rowsPerPage
*/
public String getPageSQLServer(String sql, int curPage, int rowsPerPage){
String afterFrom = sql.toLowerCase().substring(sql.indexOf("from"));
String pageSql = null;
if(afterFrom.indexOf("where") == -1){
pageSql = "select top "+ rowsPerPage + " * "+afterFrom
+" where id not in(select top "+rowsPerPage*(curPage-1)+" id "
+afterFrom+" order by id desc)"+"order by id desc";
}else{
pageSql = "select top "+ rowsPerPage + " * "+afterFrom
+" and id not in(select top "+rowsPerPage*(curPage-1)+" id "
+afterFrom+" order by id desc)"+"order by id desc";
}
return pageSql;
}
/**
* MySql sql
* @param sql sql
* @param curPage
* @param rowsPerPage
* @return SQL
*/
public String getPageMySQL(String sql, int curPage, int rowsPerPage){
String pageSql = sql+" limit "+ (curPage-1)*rowsPerPage+","+rowsPerPage;
return pageSql;
}
/**
* Oracle
* @param sql sql
* @return SQL
*/
public String getOrclPageSql(String sql){
int begin = (curPage - 1) * rowsPerPage;
int end = begin + rowsPerPage;
StringBuffer pagingSelect = new StringBuffer(300);
pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");
pagingSelect.append(sql);
pagingSelect.append(" ) row_ where rownum <= "+end+") where rownum_ > "+begin);
return pagingSelect.toString();
}
public List getPageList() {
return pageList;
}
public void setPageList(List pageList) {
this.pageList = pageList;
}
public int getTotalRows() {
return totalRows;
}
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public int getCurPage() {
return curPage;
}
public void setCurPage(int curPage) {
this.curPage = curPage;
}
public int getPrePage() {
return prePage;
}
public void setPrePage(int prePage) {
this.prePage = prePage;
}
public int getNextPage() {
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public int getRowsPerPage() {
return rowsPerPage;
}
public void setRowsPerPage(int rowsPerPage) {
this.rowsPerPage = rowsPerPage;
}
}
(5)SQL文を定義する一般的なメソッドツールクラス
package com.jkitn.jkits.util;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* : SQL
* @author xdweleven
* @version 1.0
*/
public class SQLUtil {
/**
* SQL ,
* @param obj SQL
* @param tableName
* @return SQL 、SQL Map
*/
public static Map generateInsertExceptNull(Object obj, String tableName) {
StringBuffer columnStrBuf = new StringBuffer(); //
StringBuffer paramStrBuf = new StringBuffer(); // SQL
List
(6)拡張JAVAオブジェクトの反射ツールクラス
package com.jkitn.jkits.util;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
/**
* : JAVA
* @author xdweleven
* @version 1.0
*/
public class ReflectionUtil {
/**
*
* @param obj
* @param fieldName
* @param value
*/
public static void setFieldValue(Object obj, String fieldName, Object value) {
Class extends Object> c = obj.getClass();
try {
Field field = null;
Field[] fields = c.getDeclaredFields();
for(int i = 0; i < fields.length; i++){
String fieldNameTemp = fields[i].getName();
if(fieldNameTemp.equalsIgnoreCase(fieldName)){
field = c.getDeclaredField(fieldNameTemp);
field.setAccessible(true);
field.set(obj, value);
return;
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
*
* @param obj
* @param fieldName
*/
public static Object getFieldValue(Object obj, String fieldName) {
Class extends Object> c = obj.getClass();
Field[] fields = c.getDeclaredFields();
try {
for(int i = 0; i < fields.length; i++){
if(fields[i].getName().equalsIgnoreCase(fieldName)){
fields[i].setAccessible(true);
return fields[i].get(obj);
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return null;
}
/**
*
* @param obj
* @return
*/
public static List getNotNullField(Object obj) {
Class extends Object> c = obj.getClass();
List list = new ArrayList();
try {
Field[] fields = c.getDeclaredFields();
for(int i = 0; i < fields.length; i++){
fields[i].setAccessible(true);
if(fields[i].get(obj) != null){
list.add(fields[i]);
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return list;
}
}
(7)実装データベースを定義するCRUD基本操作BaseDao
package com.jkitn.jkits.dao.common;
import java.io.Serializable;
import java.sql.ResultSet;
import java.util.List;
import java.util.Map;
import com.jkitn.jkits.common.DBConn;
import com.jkitn.jkits.common.PageBean;
import com.jkitn.jkits.util.ReflectionUtil;
import com.jkitn.jkits.util.SQLUtil;
/**
* : CRUD 。
* @author xdweleven
* @version 1.0
*/
public class BaseDao{
//
private DBConn dbconn = new DBConn();
/** */
public static final String TB_PREFIX = "tb_jkit_";
/** */
public static final String SELECT_TB_PREFIX = "select * from tb_jkit_";
/** */
public static final String ASC = "asc";
/** */
public static final String DESC = "desc";
/**
* ID
* @param classType
* @param columnName
* @param id
* @return
*/
public T queryById(Class classType, String columnName, Serializable id)
throws Exception{
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append(SELECT_TB_PREFIX);
sqlBuffer.append(this.toLowerCaseFirstOne(classType.getSimpleName()));
sqlBuffer.append(" where ");
sqlBuffer.append(columnName);
sqlBuffer.append(" = ? ");
this.showSQL(sqlBuffer.toString());
return dbconn.execQuery(sqlBuffer.toString(), new RowMapper(classType),
new Object[]{id}).get(0);
}
/**
* class
* @param classType
* @return
*/
public List queryAll(Class classType) throws Exception{
String sql = SELECT_TB_PREFIX + this.toLowerCaseFirstOne(classType.getSimpleName());
this.showSQL(sql);
return dbconn.execQuery(sql, new RowMapper(classType));
}
/**
* ,
* @param classType
* @param orderColumn
* @param ascOrDesc :asc ,desc
* @return
*/
public List queryAllWithOrder(Class classType, String orderColumn,
String ascOrDesc) throws Exception{
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append(SELECT_TB_PREFIX);
sqlBuffer.append(this.toLowerCaseFirstOne(classType.getSimpleName()));
sqlBuffer.append(" order by ");
sqlBuffer.append(orderColumn);
sqlBuffer.append(" ");
sqlBuffer.append(ascOrDesc);
this.showSQL(sqlBuffer.toString());
return dbconn.execQuery(sqlBuffer.toString(), new RowMapper(classType));
}
/**
* SQL
* @param sql
* @param classType
* @param params SQL
* @return
*/
public List query(String sql, Class classType, Object... params)
throws Exception{
this.showSQL(sql);
return dbconn.execQuery(sql, new RowMapper(classType), params);
}
/**
* SQL
* @param sql
* @param classType
* @param params SQL
* @return
*/
public T queryForObj(String sql, Class classType, Object... params)
throws Exception{
this.showSQL(sql);
return dbconn.execQuery(sql, new RowMapper(classType), params).get(0);
}
/**
*
* @param sql SQL
* @param classType
* @param curPage
* @param rowsPerPage
* @param params SQL
* @return
*/
public PageBean queryByPage(String sql, Class classType, int curPage,
int rowsPerPage, Object... params) throws Exception{
//
int totalRows = this.getTotalRows(sql, params);
PageBean pageBean = new PageBean();
pageBean.setCurPage(curPage); //
pageBean.initPageBean(totalRows, rowsPerPage); //
// (MySql)
String pageSql = pageBean.getPageMySQL(sql, curPage, rowsPerPage);
this.showSQL(pageSql);
//
pageBean.setPageList(dbconn.execQuery(sql, new RowMapper(classType), params));
return pageBean;
}
/**
* , , , ,
* :class _ _SEQ,
* class Users, id, USERS_ID_SEQ.
* @param obj
* @param sequenceKeyColumn , , null。
* @return
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public int insert(T obj, String sequenceKeyColumn) throws Exception{
String tableName = TB_PREFIX + this.toLowerCaseFirstOne(obj.getClass().getSimpleName());
// SQL
Map sqlMap = SQLUtil.generateInsertWithNull(obj, tableName, sequenceKeyColumn);
String sql = sqlMap.get("sql").toString(); // SQL
Object[] paramsValues = (Object[])sqlMap.get("paramsValues"); // SQL
// int[] paramsTypes = this.parseArrayToInt((Object[])sqlMap.get("paramsTypes")); //
this.showSQL(sql);
return dbconn.execUpdate(sql, paramsValues);
}
/**
*
* @param obj
* @param keyColumn
* @return
*/
public int update(T obj, String keyColumn) throws Exception{
String tableName = TB_PREFIX + this.toLowerCaseFirstOne(obj.getClass().getSimpleName());
// SQL
Object[] updateSql = SQLUtil.generateUpdate(obj, tableName, keyColumn);
this.showSQL(updateSql[0].toString());
return dbconn.execUpdate(updateSql[0].toString(), (Object[])updateSql[1]);
}
/**
*
* @param obj
* @param keyColumn
* @return
*/
public int delete(T obj, String keyColumn) throws Exception{
//
Object keyValue = ReflectionUtil.getFieldValue(obj, keyColumn);
if(keyValue == null){
throw new RuntimeException("["+obj.getClass()+"] '"+keyColumn+"' .");
}
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append("delete from ");
sqlBuffer.append(TB_PREFIX);
sqlBuffer.append(this.toLowerCaseFirstOne(obj.getClass().getSimpleName()));
sqlBuffer.append(" where ");
sqlBuffer.append(keyColumn);
sqlBuffer.append(" = ? ");
this.showSQL(sqlBuffer.toString());
return dbconn.execUpdate(sqlBuffer.toString(), keyValue.toString());
}
/**
*
* @param classType
* @param keyColumn ID
* @param id
* @return
*/
public int deleteById(Class classType, String keyColumn, Serializable id)
throws Exception{
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append("delete from ");
sqlBuffer.append(TB_PREFIX);
sqlBuffer.append(this.toLowerCaseFirstOne(classType.getSimpleName()));
sqlBuffer.append(" where ");
sqlBuffer.append(keyColumn);
sqlBuffer.append(" = ? ");
this.showSQL(sqlBuffer.toString());
return dbconn.execUpdate(sqlBuffer.toString(), id);
}
/**
*
* @param classType
* @param idColumnName
* @param ids
*/
public int deleteByIds(Class classType, String idColumnName,
Serializable[] ids) throws Exception{
StringBuffer sqlBuffer = new StringBuffer();
sqlBuffer.append("delete from ");
sqlBuffer.append(TB_PREFIX);
sqlBuffer.append(this.toLowerCaseFirstOne(classType.getSimpleName()));
sqlBuffer.append(" where ");
sqlBuffer.append(idColumnName);
sqlBuffer.append(" = ? ");
this.showSQL(sqlBuffer.toString());
int rowNums = 0; //
for(int i = 0; i < ids.length; i++){
rowNums += this.deleteById(classType, idColumnName, ids[i]);
}
return rowNums;
}
/**
*
* @param sql SQL
* @param params SQL
* @return
*/
public int update(String sql, Object... params) throws Exception{
this.showSQL(sql);
return dbconn.execUpdate(sql, params);
}
/**
*
* @param objs
* @param keyColumn
*/
public int batchUpdate(List objs, String keyColumn) throws Exception{
if(objs == null || objs.isEmpty()){
return 0;
}
int updateNum = 0;
// SQL
for(int i = 0; i < objs.size(); i++){
T obj = objs.get(i);
updateNum += this.update(obj, keyColumn);
}
return updateNum;
}
/**
*
* @param objs
* @param keyColumn
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public int batchInsert(List objs, String keyColumn) throws Exception {
if(objs == null || objs.isEmpty()){
return 0;
}
int updateNum = 0;
// SQL
for(int i = 0; i < objs.size(); i++){
T obj = objs.get(i);
updateNum += this.insert(obj, keyColumn);
}
return updateNum;
}
/**
* SQL
* @param sql SQL
* @param params SQL
* @return
* @throws Exception
*/
public int getTotalRows(String sql, Object... params) throws Exception{
String totalRowsSql = "select count(*) totalRows from ( "+sql+" )";
this.showSQL(totalRowsSql);
ResultSet rs = dbconn.queryForResultSet(totalRowsSql, params);
while(rs.next()){
return rs.getInt("totalRows");
}
return 0;
}
/**
*
* @param sql SQL
* @param params SQL
* @return
*/
public int delete(String sql, Object... params) throws Exception{
this.showSQL(sql);
return dbconn.execUpdate(sql, params);
}
/**
* (MySql)
* @param classType
* @param seqColName
* @return
*/
public int getNextAutoIncrementVal(Class classType, String seqColName) throws Exception{
StringBuffer sqlBuf = new StringBuffer();
sqlBuf.append("select max(");
sqlBuf.append(seqColName);
sqlBuf.append(")+1 nextId from ");
sqlBuf.append(TB_PREFIX);
sqlBuf.append(this.toLowerCaseFirstOne(classType.getSimpleName()));
this.showSQL(sqlBuf.toString());
ResultSet rs = dbconn.queryForResultSet(sqlBuf.toString());
if(rs.next()){
return rs.getInt("nextId");
}else{
return 0;
}
}
/**
*
* @param str
* @return
*/
public String toLowerCaseFirstOne(String str){
if(Character.isLowerCase(str.charAt(0))){
return str;
}else{
return (new StringBuilder()).append(Character.toLowerCase(str.charAt(0))).
append(str.substring(1)).toString();
}
}
/**
*
* @param str
* @return
*/
public String toUpperCaseFirstOne(String str){
if(Character.isUpperCase(str.charAt(0))){
return str;
}else{
return (new StringBuilder()).append(Character.toUpperCase(str.charAt(0))).
append(str.substring(1)).toString();
}
}
/**
* SQL
* @param sql
*/
public void showSQL(String sql){
System.out.println(sql);
}
}
以上は、自身の理解に基づいてパッケージ化された一般的なDAOレイヤの操作であり、導入ラインの2つのプロジェクトに運用されており、BUGはまだ報告されていない.しかし、効率の面では、個人的には最適化が必要なところがたくさんあると思います.例えば、一括削除操作は、私のパソコンのテストの結果、JDBCが持参した一括操作を使用すると、上記の簡単なサイクルの操作速度よりも遅いと思いますが、この部分の効率はまだ大きな向上の余地があると思います.ITカードを持って教えてほしいと思っています.あまり感謝しません.