上一章节《Spring4基础三十-数据库篇-JDBC模板-2》
如果文中有纰漏,请多多指正!!!
JDBC模板的使用:增删改查
一、数据准备
1.数据库定义表productinfo
/**商品信息*/create table productinfo( id int primary key auto_increment, --主键 proName varchar(50),--商品名称 proNo varchar(50), --商品编号 proDescription varchar(200),--商品描述 proAmount decimal(10,2)--价格);
2.实体定义ProductInfo
/**商品信息*/public class ProductInfo { private Integer id;//主键 private String proName;//商品名称 private String proNo;//商品编号 private String proDescription;//商品描述 private BigDecimal proAmount;//价格 }
3.接口定义DataDealDao
public interface DataDealDao { //增、删、改 void insert(ProductInfo info); void deleteById(int id); void update(ProductInfo info); //简单对象查询 String fingNameById(int id); List fingNamesByProNo(String proNo); //自定义对象查询 ProductInfo findById(int id); List findAll();}
4.接口实现定义
使用JDBC模板,需要继承JdbcDaoSupport类。
//Dao实现类public class DataDealImpl extends JdbcDaoSupport implements DataDealDao{ //TODO}
5.配置
- jdbc属性配置
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3366/testjdbc.username=rootjdbc.password=root
- xml配置
二、增删改查操作
Dao实现类继承JdbcDaoSupport类后,就可以直接通过getTempLate()获取到JDBC模板对象。
JDBC模板对DB的增、删、改、查都可以通过update()方法实现,常用的两个重载方法为
public int update(String sql);public int update(String sql, Object... args);
其中,第一个参数String sql为要执行的SQL语句;第二个参数Object... args为要执行SQL语句中所包含的动态参数;返回值int为该语句执行所影响的记录数。
1. 增,删,改演示
//新增@Overridepublic void insert(ProductInfo info) { String insertSql = "insert into productInfo (proName,proNo,proDescription,proAmount) values(?,?,?,?)"; this.getJdbcTemplate().update(insertSql,info.getProName(),info.getProNo(),info.getProDescription(),info.getProAmount());}//删除@Overridepublic void deleteById(int id) { String deleteSql = "delete from productInfo where id = ?"; this.getJdbcTemplate().update(deleteSql,id);}//更新@Overridepublic void update(ProductInfo info) { String updateSql = "update productInfo set proName = ?,proNo = ?,proDescription = ?,proAmount = ? where id = ?"; this.getJdbcTemplate().update(updateSql,info.getProName(),info.getProNo(),info.getProDescription(),info.getProAmount(),info.getId()); }
2. 查询演示
在JDBC模板中,查询结果都是以对象的形式返回的,根据返回对象类型的不同,可将查询可分为两种情况
1.)简单对象的查询,也就是查询基本数据类型(String,Integer等); 2.)自定义对象的查询。
- 2.1)简单对象的查询
简单对象的查询常用的有两种方法(也可以是其他重载方法),一个是查询结果为单个对象,一个是查询结果为List。
//查询结果为单对象public T queryForObject(String sql, Class requiredType, Object... args);//查询结果为Listpublic List queryForList(String sql, Class elementType, Object... args);
其中,第一个参数String sql为要执行的SQL语句;第二个参数Class elementType 为SQL执行结果数据的封装类型;第三个参数Object... args为要执行SQL语句中所包含的动态参数。
-
- 演示
//简单对象查询@Overridepublic String fingNameById(int id) { String fingNameByIdSQL = "select proName from ProductInfo where id = ?"; String proName = this.getJdbcTemplate().queryForObject(fingNameByIdSQL,String.class,id); return proName;}//简单对象查询@Overridepublic List fingNamesByProNo(String proNo) { String fingNameProNoSQL = "select proName from ProductInfo where proNo like '%"+proNo+"%'"; List namesList = this.getJdbcTemplate().queryForList(fingNameProNoSQL,String.class); return namesList;}
- 2.2)自定义对象的查询
自定义对象的查询常用的也有两种方法(也可以是其他重载方法),一个是查询结果为单个对象,一个是查询结果为List。
//查询结果为单对象public T queryForObject(String sql, RowMapper rowMapper, Object... args);//查询结果为Listpublic List query(String sql, RowMapper rowMapper, Object... args);
其中,第一个参数String sql为要执行的SQL语句;第二个参数RowMapper rowMapper 为SQL执行结果数据的记录映射接口;第三个参数Object... args为要执行SQL语句中所包含的动态参数。
RowMapper rowMapper 为SQL执行结果数据的记录映射接口,主要用于将查询结果集中的每条记录包装到指定对象中,该接口有一个方法需要实现:
//ResultSet rs:当前要处理的结果集(非总的结果集)//int rowNum:表示总的结果集中的当前行号public ProductInfo mapRow(ResultSet rs, int rowNum) ;
-
- 演示
在本演示程序中使用的是匿名内部类形式,当然也可以进行自定义RowMapper 去实现RowMapper接口,然后将自定义RowMapper对象放入queryForObject()、query()方法中即可。
//自定义对象:单个对象@Overridepublic ProductInfo findById(int id) { String findByIdSQL = "select * from ProductInfo where id = ?"; ProductInfo productInfo = this.getJdbcTemplate().queryForObject(findByIdSQL, new RowMapper(){ @Override public ProductInfo mapRow(ResultSet rs, int rowNum) throws SQLException { ProductInfo info = new ProductInfo(); info.setId(rs.getInt("id")); info.setProAmount(rs.getBigDecimal("proAmount")); info.setProName(rs.getString("proName")); info.setProNo(rs.getString("proNo")); info.setProDescription(rs.getString("proDescription")); return info; } },id); return productInfo;}//自定义对象:List@Overridepublic List findAll() { String findAll = "select * from ProductInfo"; List list = this.getJdbcTemplate().query(findAll, new RowMapper(){ @Override public ProductInfo mapRow(ResultSet rs, int rowNum) throws SQLException { ProductInfo info = new ProductInfo(); info.setId(rs.getInt("id")); info.setProAmount(rs.getBigDecimal("proAmount")); info.setProName(rs.getString("proName")); info.setProNo(rs.getString("proNo")); info.setProDescription(rs.getString("proDescription")); return info; } }); return list;}
![fff7ff04c878618bc5d5a2d13d2f6b4f.png](https://i-blog.csdnimg.cn/blog_migrate/1580d35cca4c996e2d3a83b37ea497fe.jpeg)