Skip to content

Instantly share code, notes, and snippets.

@yangbajing
Last active December 16, 2015 03:28
Show Gist options
  • Save yangbajing/5369719 to your computer and use it in GitHub Desktop.
Save yangbajing/5369719 to your computer and use it in GitHub Desktop.
为squeryl 添加joda的DateTime和LocalDate支持。(注:version 0.9.6)
package yangbajing.persistence
import scala.language.implicitConversions
import java.sql.Timestamp
import org.joda.time._
import org.squeryl._
import org.squeryl.dsl._
object SquerylEntrypoint extends SquerylEntrypoint
trait SquerylEntrypoint extends PrimitiveTypeMode with MyJodaTime
trait MyJodaTime {
this: PrimitiveTypeMode =>
implicit val jodaTimeTEF = new NonPrimitiveJdbcMapper[Timestamp, DateTime, TTimestamp](timestampTEF, this) {
def convertFromJdbc(t: Timestamp) = new DateTime(t)
def convertToJdbc(t: DateTime) = new Timestamp(t.getMillis())
}
implicit val optionJodaTimeTEF =
new TypedExpressionFactory[Option[DateTime], TOptionTimestamp] with DeOptionizer[Timestamp, DateTime, TTimestamp, Option[DateTime], TOptionTimestamp] {
val deOptionizer = jodaTimeTEF
}
implicit def jodaTimeToTE(s: DateTime) = jodaTimeTEF.create(s)
implicit def optionJodaTimeToTE(s: Option[DateTime]) = optionJodaTimeTEF.create(s)
}
trait MyLocalDate {
this: PrimitiveTypeMode =>
implicit val localDateTEF = new NonPrimitiveJdbcMapper[java.util.Date, LocalDate, TDate](dateTEF, this) {
def convertFromJdbc(t: java.util.Date) = new LocalDate(t)
def convertToJdbc(t: LocalDate) = t.toDateMidnight.toDate
}
implicit val optionLocalDateTEF =
new TypedExpressionFactory[Option[LocalDate], TOptionDate] with DeOptionizer[java.util.Date, LocalDate, TDate, Option[LocalDate], TOptionDate] {
val deOptionizer = localDateTEF
}
implicit def localDateToTE(s: LocalDate) = localDateTEF.create(s)
implicit def optionLocalDateToTE(s: Option[LocalDate]) = optionLocalDateTEF.create(s)
}
trait MyLocalTime {
this: PrimitiveTypeMode =>
implicit val localTimeTEF = new NonPrimitiveJdbcMapper[java.sql.Time, LocalTime, TTim]() {}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment