在使用JDBC API开发时,当使用Statement对象执行SQL时,SQL语句会嵌入到Java代码中。
如果SQL语句比较复杂,则需要在代码中对SQL语句进行拼接,当条件不固定时,还需要根据条件进行不同的拼接,同时还要注意空格、逗号等的使用。这就使得开发的难度大大增加,且代码的可维护性大大降低。
为了解决这个问题,MyBatis提供了一个SQL工具类。通过使用该工具类,可以方便地在Java代码中动态地构建SQL语句。
示例如下:
@Test
public void testSelectSql() {
String sql = new SQL(){
{
SELECT("id, name, age");
SELECT("phone, birthday");
FROM("user");
WHERE("id = 2");
OR();
WHERE("name = 'user1'");
ORDER_BY("id");
}}.toString();
System.out.println(sql);
}
@Test
public void testInsertSql() {
String sql = new SQL(){
{
INSERT_INTO("user");
VALUES("name, age, phone, birthday", "'user3', 45, '15789654532', '2015-12-13'");
}}.toString();
System.out.println(sql);
}
@Test
public void testUpdateSql() {
String sql = new SQL(){
{
UPDATE("user");
SET("name", "玉皇大帝");
WHERE("id = 1");
}}.toString();
System.out.println(sql);
}
@Test
public void testDeleteSql() {
String sql = new SQL(){
{
DELETE_FROM("user");
WHERE("id = 1");
}}.toString();
System.out.println(sql);
}
控制台输出执行结果:
SELECT id, name, age, phone, birthday
FROM user
WHERE (id = 2)
OR (name = 'user1')
ORDER BY id
INSERT INTO user
(name, age, phone, birthday)
VALUES ('user3', 45, '15789654532', '2015-12-13')
UPDATE user
SET name, 玉皇大帝
WHERE (id = 1)
DELETE FROM user
WHERE (id = 1)
如上面的示例所示,SQL工具类可以调用SELECT()
、FROM()
等方法构建SQL语句,这种方式能够有效地避免字符串拼接过程中出现的问题。
使用SQL工具类还可以很方便地在Java代码中根据条件动态地构建SQL语句。示例如下:
public void selectUser(User user) {
String sql = new SQL(){
{
SELECT("id, name, age");
SELECT("phone, birthday");
FROM("user");
if(user.getId() != null<