var user dot1xDataItem
user.UserName = "test11"
dot1xDb.Find(&user)
执行路径:一样
只是在 BuildQuerySQL的时候 会解析传进来参数里面的values,有值就当做where exp eq 处理
func BuildQuerySQL(db *gorm.DB) {
if db.Statement.Schema != nil {
for _, c := range db.Statement.Schema.QueryClauses {
db.Statement.AddClause(c)
}
}
if db.Statement.SQL.Len() == 0 {
db.Statement.SQL.Grow(100)
clauseSelect := clause.Select{Distinct: db.Statement.Distinct}
if db.Statement.ReflectValue.Kind() == reflect.Struct && db.Statement.ReflectValue.Type() == db.Statement.Schema.ModelType {
var conds []clause.Expression
for _, primaryField := range db.Statement.Schema.PrimaryFields {
if v, isZero := primaryField.ValueOf(db.Statement.Context, db.Statement.ReflectValue); !isZero {
conds = append(conds, clause.Eq{Column: clause.Column{Table: db.Statement.Table, Name: primaryField.DBName}, Value: v})
}/*/此时传进来的dest 参数是有值的user_name=”test11“
/ 就会组装 clause.Eq
// Eq equal to for where
type Eq struct {
Column interface{}
Value interface{}
}
*/
}
if len(conds) > 0 {
db.Statement.AddClause(clause.Where{Exprs: conds})
// 将eq 添加到where Clauses
}
}
db.Statement.AddClauseIfNotExists(clauseSelect) //select
db.Statement.Build(db.Statement.BuildClauses...)
}
}