SSM
(Spring+MyBatis)框架中的JdbcTemplate
是Spring JDBC模板,它封装了基本的JDBC操作,简化了与数据库交互的过程。以下是一些JdbcTemplate
的常用操作:
-
数据库连接初始化:
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml"); JdbcTemplate jdbcTemplate = (JdbcTemplate) applicationContext.getBean("jdbcTemplate");
-
删除操作:
@Test public void testDelete(){ jdbcTemplate.update("delete from account where name=?", "小C"); }
这里通过
update
方法执行SQL语句来删除满足条件的数据。 -
更新操作:
@Test public void testUpdate(){ jdbcTemplate.update("update account set money=? where name=?", 100000, "小C"); }
update
用于更新表中的记录。 -
查询操作:
- 简单查询计数:
String sql = "select count(*) from user"; Integer count = jdbcTemplate.queryForObject(sql, Integer.class); System.out.println(count);
- 查询并获取列表:
String sql = "select name from user where id > ?"; List<String> name = jdbcTemplate.queryForList(sql, String.class, "1"); System.out.println(name);
queryForObject
用于单条结果查询,而queryForList
则适用于返回多个结果的情况。 - 简单查询计数:
这些操作展示了JdbcTemplate
如何以更加简洁的方式处理数据库操作,避免直接编写复杂的JDBC代码。使用@Autowired
可以自动注入到Spring容器管理的对象中,方便单元测试。
- jdbcExample
- 简单的分层:
- entity:数据对象层
- dao: 数据访问层
- service:领域模型层
- 业务流程层
SSM
(Spring+MyBatis)框架中的JdbcTemplate
简化了Spring应用与JDBC的交互,它是Spring JDBC模块的一部分。这个模板提供了一种更高级别的API来执行常见的数据库操作,比如查询、更新和删除,而无需显式管理连接和结果集。
下面是一个简单的示例演示如何使用JdbcTemplate
执行插入操作:
@Autowired
private JdbcTemplate jdbcTemplate;
public void insertCoupon(CouponEntity coupon) {
String sql = "INSERT INTO coupons (user_id, type, expires) VALUES (?, ?, ?)";
// 使用PreparedStatement防止SQL注入
jdbcTemplate.update(sql,
coupon.getUserId(),
coupon.getType(),
coupon.getExpires());
}
在这个例子中,jdbcTemplate
自动负责处理连接打开、关闭以及预编译语句的设置,使得开发者可以专注于业务逻辑,而不是底层的JDBC细节。
在SSM架构中,MyBatis的作用主要体现在简化数据库操作上。它通过将接口和Java对象(POJOs,Plain Ordinary Java Objects,即普通Java类)映射到数据库表结构,使得开发者可以使用简单易懂的SQL语句或注解来进行数据库的操作,如查询、插入、更新和删除。这不仅提高了开发效率,还降低了代码与数据库之间的耦合度,有利于后期的维护和扩展。具体来说,MyBatis允许开发者通过编写SQL模板(XML或注解),然后通过调用这些接口的方法执行相应的数据库操作。例如,通过配置文件指定一个接口方法对应哪种SQL语句,MyBatis会自动处理数据绑定和结果集的返回。
package com.ssm.chapter12.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.ssm.chapter12.pojo.Role;
public class JdbcExample {
public Role getRole(Long id) {
Role role = null;
// 声明JDBC变量
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 注册驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 获取连接
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/chapter12", "root", "123456");
// 预编译SQL
ps = con.prepareStatement("select id, role_name, note from t_role where id = ?");
// 设置参数
ps.setLong(1, id);
// 执行SQL
rs = ps.executeQuery();
// 组装结果集返回POJO
while (rs.next()) {
role = new Role();
role.setId(rs.getLong(1));
role.setRoleName(rs.getString(2));
role.setNote(rs.getString(3));
}
} catch (ClassNotFoundException | SQLException e) {
// 异常处理
e.printStackTrace();
} finally {
// 关闭数据库连接资源
try {
if (rs != null && !rs.isClosed()) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (ps != null && !ps.isClosed()) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (con != null && !con.isClosed()) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return role;
}