為型別的屬性設定非空的預設值
最近在做資料庫開發時,向資料庫儲存資料,經常出現欄位為空無法儲存的問題。於是想到是否可以通過反射為實體類中那些為null的欄位設定預設值。這樣就可以避免儲存資料時需要對每一個地段進行判空操作。下面的SetDefaultToProperties方法就是來完成這個操作的。T為與資料庫表對應的實體類,遍歷T中每一個屬性並設定預設值,對於string要特殊處理,因為系統並未將string看成值型別,會返回null,所以自己將string型別處理成空串。
public void SetDefaultToProperties<T>(T obj)
{
Type type = typeof (T);
PropertyInfo[] props = type.GetProperties();
foreach (PropertyInfo property in props)
{
if (property.CanWrite)
{
Type propertyType = property.PropertyType;
if (propertyType.Name == "String" )
{
property.SetValue(obj, string.Empty, null);
}
else
{
object value = GetDefaultForType(propertyType);
property.SetValue(obj, value, null);
}
}
}
}
GetDefaultForType方法通過反射獲取型別的預設值。
public static object GetDefaultForType(Type type)
{
return type.IsValueType ? Activator.CreateInstance(type) : null;
}
相關推薦
為型別的屬性設定非空的預設值
最近在做資料庫開發時,向資料庫儲存資料,經常出現欄位為空無法儲存的問題。於是想到是否可以通過反射為實體類中那些為null的欄位設定預設值。這樣就可以避免儲存資料時需要對每一個地段進行判空操作。下面的SetDefaultToProperties方法就是來完成這個操
PostgreSQL 11 新特性解讀 : 新增非空預設值欄位不需要重寫表
PostgreSQL 10 版本前表新增不帶預設值的DDL不需要重寫表,只需要更新資料字典,因此DDL能瞬間執行,如下: ALTER TABLE table_name ADD COLUMN flag text; 如果新增的欄位帶預設值,則需要重寫表,表越大,執行時間越長,如下。 ALTER TABLE
PostgreSQL技術週刊第9期:PostgreSQL 11新特性解讀之新增非空預設值欄位不需要重寫表
PostgreSQL(簡稱PG)的開發者們: 雲棲社群已有5000位PG開發者,釋出了3000+PG文章(文章列表),沉澱了700+的PG精品問答(問答列表)。 PostgreSQL技術週刊將會為大家介紹最新的PG技術與動態、預告活動、最熱問答、直播教程等,歡迎大家訂閱PostgreSQL技術週刊和關注P
PostgreSQL 11 新特性之快速增加包含非空預設值的列
文章目錄 在 PostgreSQL 11 之前,為表增加一個包含非空預設值的欄位,將會導致表資料的重新寫入,為每一行新增該欄位,並且填充預設值。如果針對大表執行這種操作,將會非常耗時。 以下是一個 PostgreSQL 10 中新增欄位(包含非空預設值)的示例:
使用 JSON JavaScriptSerializer 進行序列化或反序列化時出錯。字串的長度超過了為 maxJsonLength 屬性設定的值。
最近公司佈置了報表的開發,這個模組涉及到了幾萬條資料的匯入,然後後臺處理,再返回到前臺並顯示出來,不過當我匯入4W條資料的資料,VS已經支援不過來,幾乎卡住,電腦也接近奔潰,不過處理2W條的資料還是沒問題的。 具體如何解決? c#後臺方法,返回值為 string
easyUI設定dateBox的預設值為當前時間
function formatterDate(date) { var day = date.getDate() > 9 ? date.getDate() : "0" + date.getDate(); var month = (date.getMonth
sql建立表的時候設定主鍵、標識、欄位欄位額外屬性(如說明)以及預設值
USE [DBName] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[TabStudent]
使用npm set 設定 package.json 預設值
當初始化 package.json 可以執行 npm init -y 複製程式碼 會得到如下結果 如果需要設定預設值 npm set init.license "MIT" npm set init.author.email "[email protected]" npm set
ExtJS Combobox 屬性詳解和預設值選中
var store = new Ext.data.SimpleStore({  
ES6小技巧 - 使用解構賦值設定函式引數預設值
本文要說的並不是下面這種ES6的函式引數預設值: function fn(a = 0, b = 1) {} 複製程式碼 很多時候,我們在寫一個建構函式時,可能需要傳入很多引數,這時候就不可能使用函式引數一個一個的傳入,而是傳入一個物件當作引數。 舉個例子:一個函式,引數傳入一個物件,物件裡可以設定兩個屬性
springboot中設定pageSize的預設值
springboot中設定pageSize的預設值 方式一、使用@PageableDefault註解 可以在形參上使用@PageableDefault註解指定預設的page和size @GetMapping(value="/list") public String li
easyui 判斷select下拉框是否多選,多選情況下清空預設值
$("#checkType").combobox({ onSelect: function(param){ if (param
mybaits3.3.0date型別資料判斷非空報錯
開發中改動mapper檔案後需要重新編譯釋出, 由於工程比較大非常耗時, 所以為方便快速測試乾脆寫了一個小java工程. 工程中用到的dao, mapper和實體類都是從工程中拷出來的, 資料庫也是同一個. 但是遇到一個比較奇怪的問題 實體類中有一個屬性 priv
使用Create Default語句設定列的預設值
語法: Create Default [<owner name.>]<Name of default> AS <constant expression> 如下建立一個表OrderItem: CREATE TABLE [d
String型別字串判斷非空
String型別的字串的非空判斷還是經常會用到滴,但是前幾天用的過程中發現了一個問題:假如有一個字元差為str if(str == null || str.equals("")) 或者 if("".equals(str) || str == null
【shell】設定變數的預設值的幾種寫法
1. if [ -z "$VAR" ] then VAR="some default" fi 2. [ -z "$VAR" ] && VAR="some default" 3. [ ! "$VAR" ] && VAR="some def
jpa設定欄位預設值
private Integer clientArticleCount=0;//文章的數量 相當於設定欄位預設值 @Column public Integer getClientArticleCoun
Spring Data JPA 設定欄位預設值
在Column註解中寫入以下兩個屬性,為什麼自己查一下文件吧,即可實現欄位預設值設定,並順帶解決save方法所生成的sql語句中自動填充欄位為null的問題。預設值無法更新,所以如果想在程式碼裡修改欄位
使用JS動態設定select的預設值
<script language="javascript">...<!--function UpOption(obj,value)...{ for(var i=0;i<3;i++)...{ var newObj=document.createElement('OPTION'); i
java 反射: 當Timestamp型別的屬性值為null時,設定預設值
import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.sql.Timestamp; class Person {