1. 程式人生 > >為型別的屬性設定非空的預設值

為型別的屬性設定非空的預設值

最近在做資料庫開發時,向資料庫儲存資料,經常出現欄位為空無法儲存的問題。於是想到是否可以通過反射為實體類中那些為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 {