初步说明:
相关背景:
在使用JDBC时,必须自己来管理数据库资源如:获取PreparedStatement,设置SQL语句参数,关闭连接等步骤。
JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。
增删改
jdbaTemplate.update(sql,...)
update只会返回一个被影响的行数。建议对于insert、update、delete 都用insert into user values(?,?,?) ; 或者 update product set pname=?, price=? where pid=?;
String sql="update user set user(user_name,user_phone,user_num) values (?,?,?) where user_id ='"+user_chabasic.getUser_id()+"'";
jdbcTemplate.update(sql,user_chabasic.getUser_name(),user_chabasic.getUser_phone(),user_chabasic.getUser_num());
查询
int queryForInt(String sql)
执行一个查询语句,返回int值。
long queryForLong(String sql)
执行查询语句,返回一个long类型的数据。
public <T> T queryForObject(String sql, Class<T> requiredType)
执行查询语句,返回一个指定类型的数据。
PS:BeanPropertyRowMapper(User.class)见后面讲解
String sql2 = "select * from user where user_name='"+user_login.getUser_in()+"' and user_password='"+user_login.getUser_password()+"'";
User user2=jdbcTemplate.queryForObject(sql2,new BeanPropertyRowMapper<User>(User.class));
//这里是返回一个user类
//or
//String str = jdbcTemplate.queryForObject(sql, String.class);
//一个String
public Map<String, Object> queryForMap(String sql)
执行查询语句,将一条记录放到一个Map中。
PS:Map是一种依照键存储元素的容器。在map中键可以是任意类型的对象。map中不能有重复的键,每个键都有一个对应的值。
Map<String, Object> map = jdbcTemplate.queryForMap(sql, 6);
public List<Map<String, Object>> queryForList(String sql)
执行查询语句,返回一个List集合,List中存放的是Map类型的数据。
public static void test05() throws Exception {
String sql = "SELECT * FROM product WHERE pid<?;";
JdbcTemplate jdbcTemplate = new JdbcTemplate(DataSourceUtils.getDataSource());
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, 8);
for (Map<String, Object> map : list) {
System.out.println(map);
}
}
public <T> List<T> query(String sql, RowMapper<T> rowMapper)
执行查询语句,返回一个List集合,List中存放的是RowMapper自定义类型的数据。
使用步骤
1、定义Product类
2、创建JdbcTemplate对象
3、编写查询的SQL语句
4、使用JdbcTemplate对象的query方法,并传入RowMapper匿名内部类
5、在匿名内部类中将结果集中的一行记录转成一个Product对象
// query使用rowMap做映射返回一个对象
public static void test06() throws Exception {
JdbcTemplate jdbcTemplate = new JdbcTemplate(DataSourceUtils.getDataSource());
// 查询数据的SQL语句
String sql = "SELECT * FROM product;";
List<Product> query = jdbcTemplate.query(sql, new RowMapper<Product>() {
@Override
public Product mapRow(ResultSet arg0, int arg1) throws SQLException {
Product p = new Product();
p.setPid(arg0.getInt("pid"));
p.setPname(arg0.getString("pname"));
p.setPrice(arg0.getDouble("price"));
return p;
}
});
for (Product product : query) {
System.out.println(product);
}
}
List<Product> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Product.class));
执行查询语句,返回一个List集合,List中存放的是RowMapper指定类型的数据。
BeanPropertyRowMapper类实现了RowMapper接口。
总结:
execute:可以执行所有SQL语句,一般用于执行DDL语句。
update:用于执行INSERT、UPDATE、DELETE等DML语句。
queryXxx:用于DQL数据查询语句。
DML(Data Manipulation Language):
SELECT、UPDATE、INSERT、DELETE,用来对数据库里的数据进行操作的语言
DDL(Data Definition Language):
DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用
DCL(Data Control Language):
是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL
DQL(DataQueryLanguage):
数据查询语言,用来查询记录(数据)
参考资料:
原文链接:https://blog.csdn.net/weixin_40001125/article/details/88538576
原文题目:JdbcTemplate基本使用
原文作者: localhost-9527