· 8 years ago · Aug 27, 2018, 10:50 AM
1case class User(id: Long, name: String, createdAt: Instant, updatedAt: Instant)
2
3object User {
4 implicit val rowMapper: RowMapper[User] =
5 new RowMapper[User] {
6 override def mapRow(rs: ResultSet): User =
7 User(
8 rs.getLong("id"),
9 rs.getString("name"),
10 rs.getInstant("created_at"),
11 rs.getInstant("updated_at")
12 )
13 }
14}
15
16object Main extends App {
17 import com.libmacro.molder.syntax._
18
19 MySQLConnectorJava.initialize()
20
21 val config = new HikariConfig()
22 config.setJdbcUrl("jdbc:mysql://localhost:3306/molder")
23 config.setUsername("molder")
24 config.setPassword("molder")
25
26 val dataSource = new HikariDataSource(config)
27
28 val db = Database(dataSource)
29
30 db.execute(
31 DDLQuery
32 .Builder(
33 """
34 |CREATE TABLE IF NOT EXISTS `user`(
35 | `id` bigint unsigned NOT NULL AUTO_INCREMENT,
36 | `name` varchar(255) NOT NULL,
37 | `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
38 | `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
39 | PRIMARY KEY (`id`)
40 |) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
41 """.stripMargin)
42 .build()
43 )
44
45 println(
46 db.select[User](
47 SelectQuery
48 .Builder("SELECT * FROM user WHERE id = ?")
49 .withParams(1L.asSQL)
50 .build()
51 )
52 )
53
54 println(
55 db.selectList[User](
56 SelectQuery
57 .Builder("SELECT * FROM user")
58 .build()
59 )
60 )
61
62 val userIds = (1 to 4).toVector
63 println(
64 db.selectList[User](
65 SelectQuery
66 .Builder(s"SELECT * FROM user WHERE id IN ${userIds.asPlaceHolders}")
67 .withParams(userIds.map(_.asSQL):_*)
68 .build()
69 )
70 )
71
72 println(
73 db.update(
74 UpdateQuery
75 .Builder("UPDATE user SET name = ? WHERE id = ?")
76 .withParams("db".asSQL, 2L.asSQL)
77 .build()
78 )
79 )
80
81 println(
82 db.insert(
83 InsertQuery
84 .Builder("INSERT INTO user(name) VALUES(?)")
85 .withParams("bob".asSQL)
86 .withReturnGeneratedKeys()
87 .build()
88 )
89 )
90
91 println(
92 db.delete(
93 DeleteQuery
94 .Builder("DELETE FROM user WHERE name = ?")
95 .withParams("bob".asSQL)
96 .build()
97 )
98 )
99}