JdbcTemplate 操作 user 表

笔记/Java/Java 持久层/JDBC/JdbcTemplate 操作 user 表

前置:事务实战 · pom.xml环境与 user 表

JdbcTemplateDemo.java#

package demo.jdbc;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.support.TransactionTemplate;
import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
public class JdbcTemplateDemo {
private static final RowMapper<User> USER_ROW_MAPPER = (rs, rowNum) -> mapRow(rs);
public static void main(String[] args) {
DataSource ds = Db.dataSource();
JdbcTemplate jdbc = new JdbcTemplate(ds);
SimpleJdbcInsert insert = new SimpleJdbcInsert(jdbc)
.withTableName("user")
.usingGeneratedKeyColumns("id");
Number id = insert.executeAndReturnKey(Map.of(
"user_name", "diana",
"email", "diana@example.com",
"status", 1
));
System.out.println("insert id=" + id);
User one = jdbc.queryForObject(
"SELECT id, user_name, email, status, created_at FROM user WHERE id = ?",
USER_ROW_MAPPER,
id.longValue()
);
System.out.println("query: " + one);
List<User> list = jdbc.query(
"SELECT id, user_name, email, status, created_at FROM user WHERE status = ? ORDER BY id",
USER_ROW_MAPPER,
1
);
System.out.println("list size=" + list.size());
TransactionTemplate tx = new TransactionTemplate(new DataSourceTransactionManager(ds));
tx.execute(status -> {
jdbc.update("UPDATE user SET email = ? WHERE id = ?", "diana.tx@example.com", id.longValue());
return null;
});
System.out.println("after tx: " + jdbc.queryForObject(
"SELECT id, user_name, email, status, created_at FROM user WHERE id = ?",
USER_ROW_MAPPER,
id.longValue()
));
jdbc.update("DELETE FROM user WHERE id = ?", id.longValue());
System.out.println("deleted diana");
}
private static User mapRow(ResultSet rs) throws SQLException {
User user = new User();
user.setId(rs.getLong("id"));
user.setUserName(rs.getString("user_name"));
user.setEmail(rs.getString("email"));
user.setStatus(rs.getInt("status"));
if (rs.getTimestamp("created_at") != null) {
user.setCreatedAt(rs.getTimestamp("created_at").toLocalDateTime());
}
return user;
}
}

运行#

Terminal window
mvn -q exec:java -Dexec.mainClass=demo.jdbc.JdbcTemplateDemo

与原生 JDBC 对比#

原生 JDBCJdbcTemplate
手写关连接框架自动释放
UserDao.mapRowRowMapper
手写事务TransactionTemplate

复杂动态 SQL 仍建议 MyBatis

文章目录

文章目录