Spring框架提供了对JDBC操作的简单封装,使用JDBCTemplate对象来简化JDBC开发流程
步骤
- 从官网下载对应的spring-jdbc相关的jar包,导入工程类路径下,放到lib文件夹下面即可
- 创建JDBCTemplate对象。依赖于DataSource连接池(数据源)
- 使用JDBCTemplate对象中的api方法实现crud操作
1、DML操作:update()
2、DQL操作:查询 不用select,使用query - query():将查询的结果集封装成javaBean对象
query()方法的参数:RowMapper
① 手动装配:使用匿名内部类,自定义装配查询的每条记录值
②自动装配:使用Spring提供的BeanPropertyRowMapper实现类,完成对数据的自动装配
具体操作–>new BeanPropertyRowMapper<类型>(类型.class) - queryForMap():将查询的结果集封装成map集合 ,只能封装一条记录:键key是字段名,值value是字段值,结果集记录数只能是1
- queryForList():将结果集封装成List集合,在List集合中有多条记录,每一条记录都是一个map集合List<Map<Object,Object>> list
- queryForObject:将结果集封装成一个对象,一般用于聚合函数 查询总记录数int count()
具体操作:
数据库字段映射实体类
/**
* 按照javaBean标准类
*/
public class Account implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private String username;
private double balance;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public Account() {
super();
// TODO Auto-generated constructor stub
}
public Account(int id, String username, double balance) {
super();
this.id = id;
this.username = username;
this.balance = balance;
}
@Override
public String toString() {
return "Account [id=" + id + ", username=" + username + ", balance=" + balance + "]";
}
JDBCTmeplateUtil工具类 使用的是德鲁伊的数据库连接池
/**
* 使用德鲁伊连接池配置工具类
*
*/
public class DruidUtil {
private static DataSource pool;
// 把加载德鲁伊的一套放进静态代码块中
static {
// 手动加载配置文件信息 使用Properties集合
Properties properties = new Properties();
// 使用当前类的字节码对象获取该字节码对象的类加载器读取配置文件信息 classpath 类路径下+
InputStream is = DruidDemo02.class.getClassLoader().getResourceAsStream("druid.properties");
// 把输入流中的信息读取properties集合当中
try {
properties.load(is);
// 获取DataSource对象,通过工厂方式来实现的 DruidDataSourceFactory
pool = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 对外提供获取连接的对象
public static Connection getConnection() throws SQLException {
return pool.getConnection();
}
// 提供获取连接池的方法
public static DataSource getDataSource() {
return pool;
}
// 释放资源的方法
public static void closeAll(ResultSet set, PreparedStatement ps, Connection con) {
if (set != null) {
try {
set.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
测试类
// 创建JDBCTmeplate对象 依赖于DataSource数据源
static JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidUtil.getDataSource());
// 增删改动作
// 修改数据
public static void modifyData() {
int count = jdbcTemplate.update("update account set username = ? where username = ?", "小五","王五");
System.out.println(count);
}
// 删除数据
public static void deleteData() {
int count = jdbcTemplate.update("delete from account where username = ?", "小五");
System.out.println(count);
}
// 插入一条数据
public static void insertDate() {
int count = jdbcTemplate.update("insert into account values(null,?,?)", "王五",5000);
System.out.println(count);
}
public static void test() {
// 查询张三的这条信息 封装到账户对象中
String username = "张三";
String sql = "select * from account where username = ?";
Map<String, Object> map = jdbcTemplate.queryForMap(sql,username);
System.out.println(map);
}
// 查询总记录 查询account表中的所有记录数
public static void queryTotalNum() {
// queryFoObject()
Integer count = jdbcTemplate.queryForObject("select count(*) from account", Integer.class);
System.out.println(count);
}