jdbcTemplate的⽤法
jdbcTemplate是Springframework为⽅便数据库的操作, ⽽的⼀个jar包, 如果要使⽤它,就必须安装其依赖jar包, 下⾯是它所依赖的jar包
spring-beans-4.1.2.RELEASE.jar
spring-core-4.1.2.RELEASE.jar
spring-jdbc-4.1.2.RELEASE.jar
spring-tx-4.1.2.RELEASE.jar
apachemons.logging
以上是和spring-jdbc⼀安装的包
当然, 我这是数据库的操作类, 并且是有数据库连接池的, 所以我们还需要 jdbc的连接和数据库连接池的包
mysql-connector-java mysql数据连接包
com.alibaba.druid 和 c3p0 的数据库连接池的包 可以任选⼀个, 只在有 数据库连接池对象就可以了
jdbcTemplate的⽤法
1. ⽣成⼀个连接池对象(这⾥使⽤ druid来⽣成连接池对象)
druid连接池的配置如下 database.properties
sql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/ddd?serverTimezone=UTC
username=root
password=123456
initialSize=5
maxActive=10
maxWait=3000
得到jdbcTemplate对象
//读取配置⽂件
Properties pro =new Properties();
ClassLoader classLoader = ClassLoader();
InputStream inrs = ResourceAsStream("database.properties");
pro.load(inrs);
//得到数据库连接池
DataSource ds = ateDataSource(pro);
//⽣成template对象
JdbcTemplate jdbcTemplate =new JdbcTemplate(ds);
jdbcTemplate的使⽤
先来⼀个总结 query
//1.查询⼀⾏数据并返回int型结果
jdbcTemplate.queryForInt(“select count() from test");
//2. 查询⼀⾏数据并将该⾏数据转换为Map返回
jdbcTemplate.queryForMap(“select * from test where name=‘name5’”);
//3.查询⼀⾏任何类型的数据,最后⼀个参数指定返回结果类型
jdbcTemplate.queryForObject("select count() from test”, Integer.class);
//4.查询⼀批数据,默认将每⾏数据转换为Map
jdbcTemplate.queryForList(“select * from test”);*
//5.只查询⼀列数据列表,列类型是String类型,列名字是name
jdbcTemplate.queryForList("
select name from test where name=?", new Object[]{“name5”}, String.class);
mysql的jar包下载//6.查询⼀批数据,返回为SqlRowSet,类似于ResultSet,但不再绑定到连接上
SqlRowSet rs = jdbcTemplate.queryForRowSet(“select * from test”);
修改操作
String modSql ="update links set siteurl = ? where id = ?";
int res = jdbcTemplate.update(modSql,"www.baidu",1);//把第⼀条数据的siteurl修改为 baidu
System.out.println(res);
新增操作
//新增操作
String insertSql ="insert into links values (null,?,?,?)";
int sian = jdbcTemplate.update(insertSql,"新浪","sina",1);//新增⼀条数据
System.out.println(sian);
此处写⼊数据的时候发现 中⽂乱码了,解决⽅法是在配置⽂件中修改⼀下字符编码
url=jdbc:mysql://127.0.0.1:3306/ddd?serverTimezone=UTC&characterEncoding=utf-8
删除操作
String delSql ="delete from links where id = ?";
int del = jdbcTemplate.update(delSql,3);//把第三条数据删除
System.out.println(del);
批量操作 (⽅法⼀)
//批量插⼊数据
//⽐如现在有三条数据要写⼊数据库
Links l1 =new Links(1,"哈哈⼩事","www.haha",4);
Links l2 =new Links(5,"呵呵⼩事","www.hehe",7);
Links l3 =new Links(8,"轰轰⼤事","www.honghong",9);
//把这三条数据放到⼀个 arraylist中, 其实不⼀定⾮要是⼀个arraylist , 其它类型也应该是可以了
ArrayList<Links> linkslist =new ArrayList<Links>();
linkslist.add(l1);
linkslist.add(l2);
linkslist.add(l3);
int[] ints = jdbcTemplate.batchUpdate(insertSql,new BatchPreparedStatementSetter(){
@Override
public void setValues(PreparedStatement preparedStatement,int i)throws SQLException {
Links links = (i);//注意这⾥的sql的对应?号的位置是从1开始的
preparedStatement.setString(1, Sitename());
preparedStatement.setString(2, Siteurl());
preparedStatement.setInt(3, Sort());
}
@Override
public int getBatchSize(){
return linkslist.size();//这⾥得到了list集合的⼤⼩, 我估计,是帮助上⾯那个 setValues 设置循环次数的}
});
System.out.String(ints));
批量操作⽅法⼆
在list数组中添加⼀个 object[] 的数组 批量添加时传⼊ list<object[]> 集合就可以了
List<Object[]> olist =new ArrayList<>();
olist.add(new Object[]{"天天上⽹","www.tiantian",10});
olist.add(new Object[]{"day day up","www.dayup",29});
olist.add(new Object[]{"up up up","www.up",50});
int[] ints1 = jdbcTemplate.batchUpdate(insertSql, olist);
System.out.String(ints1));
查询操作
查询⼀⾏数据并返回int型结果
queryForInt(这个⽅法已过时, 使⽤queryForObject)
这个⽅法 queryForObject(String sql, Class requiredType) ⼀般是⽤于聚合查询
String sql ="select count(id) from links";
Integer in = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(in);
查询⼀⾏数据并将该⾏数据转换为Map返回
queryForMap()
//查询⼀⾏数据并将该⾏数据转换为Map返回
String sql1 ="select * from links where id = ?";
Map<String, Object> map = jdbcTemplate.queryForMap(sql1,1);
System.out.("sitename"));
3.查询⼀⾏任何类型的数据,最后⼀个参数指定返回结果类型
queryForObject()
queryForObject(String sql, Class requiredType) requiredType 只能是 基本数据类型和String类型,如果写其它的话, 会报错⽤法 : 这⾥查的是单⼀⾏的单个字段
String sql2 ="select sitename from links where id = ?";
String links = jdbcTemplate.queryForObject(sql2,String.class,1);
System.out.println(links);
queryForObject(String sql, RowMapper rowMapper, @Nullable Object… args)
查询⼀⾏数据,把数据封成指定的类型
String sql2 ="select * from links where id = ?";
Links links1 = jdbcTemplate.queryForObject(sql2,new RowMapper<Links>(){
@Override
public Links mapRow(ResultSet resultSet,int i)throws SQLException {
Links l =new Links();
l.Int("id"));
l.String("siteurl"));
l.String("sitename"));
l.Int("sort"));
return l;
}
},1);
System.out.println(links1);
Spring 给我们封装了⼀个 BeanPropertyRowMapper类, 可以很⽅便⽤简化 Rowmapper 的操作
Links l = jdbcTemplate.queryForObject(sql2,new BeanPropertyRowMapper<>(Links.class),1);
System.out.println(l);
查询多⾏数据 queryForList()
List<Map<String, Object>> queryForList(String sql, @Nullable Object… args)
查询多条数据以list集合回
String sql5 ="select * from links where id > ?";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql5,3);
for(Map<String, Object> m : maps){
System.out.println(m);
}
List queryForList(String sql, Class elementType, @Nullable Object… args)
这个⽅法是查询单列数据的⽅法, 其中 elementType 只能是基本数据类型和String 数据类型
String sql6 ="select id from links where id > ?";
List<Integer> ii = jdbcTemplate.queryForList(sql6, Integer.class,4);
System.out.println(ii);
多⾏数据 queryForRowSet() 这个就简单多了, 就不再多写了,
SqlRowSet sqlRowSet = jdbcTemplate.queryForRowSet(sql6,9);
()){
int id = Int("id");
System.out.println(id);
}
数据操作完成后, 不需要关闭资源, 数据库的连接会⾃动返回给数据库连接池
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论