jdbcTemplate 使用简析

现在很多项目都是使用 Hibernate 或 mybatis 框架操作数据库,不过一些老项目很多还是使用的 jdbcTemplate 来操作数据库。每个框架有每个框架的优缺点,不做点评,下面看看 jdbcTemplate 的常用功能。


增删改数据

增删改数据都是用的同样的方法
1、插入一行数据

//插入一条数据
String sql="insert into userinfo(userName,sex,age,addr,tel) values (?,?,?,?,?)";
int count= jdbcTemplate.update(sql, new Object[]{"xiaoming","男", 18, "湖北武汉", 66667777});

2、插入多行数据(批量插入)

//批量插入
String sql="insert into userinfo(userName,sex,age,addr,tel) values (?,?,?,?,?)";
List<Object[]> batchArgs=new ArrayList<Object[]>();
batchArgs.add(new Object[]{"admin","男", 25, "江苏南京", 11111111});
batchArgs.add(new Object[]{"lily","女", 20, "江西南昌", 888888888});
batchArgs.add(new Object[]{"john","男", 21, "福建福州", 66666666});

jdbcTemplate.batchUpdate(sql, batchArgs);

3、更新一行数据
跟插入一行数据一样,只是改一下 sql 就行了

//更新一行数据,其实这里不一定更新一行数据,主要取决于 where 后面的条件了,符合条件的数据都会被更新
String sql="update userinfo set age=? where userName=?";
int count= jdbcTemplate.update(sql, new Object[]{20, "xiaoming"});
System.out.println(count);

4、更新多行数据(根据不同的条件)

//批量
String sql="update userinfo set age=? where sex=?";
List<Object[]> batchArgs=new ArrayList<Object[]>();
batchArgs.add(new Object[]{20,"男"});
batchArgs.add(new Object[]{18,"女"});

int[] count = jdbcTemplate.batchUpdate(sql, batchArgs);
//这个 count 数组存储的是根据各条件所更新的数据条数

5、删除数据

//删除一条数据(根据 where 也可以删除多条数据)
String sql="delete from userinfo where uid = 1)";
int count= jdbcTemplate.update(sql);
System.out.println(count);

//批量删除
String sql="delete from userinfo where  userName=? and sex=?)";
List<Object[]> batchArgs=new ArrayList<Object[]>();
batchArgs.add(new Object[]{"admin", "男"});
batchArgs.add(new Object[]{"xiaoyue", "女"});
int[] count = jdbcTemplate.batchUpdate(sql, batchArgs);
//上面这段批量删除执行时报错了,可能删除不能使用这个方法?有知道原因的朋友麻烦留言指点指点

查询数据

1、查询一个数据

String sql="select count(*) from userinfo";
int num = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(num);
String sql2="select userName from userinfo where uid=1";

//查到的数据是什么类型,就用什么类型变量接收
String name = jdbcTemplate.queryForObject(sql2, String.class);
System.out.println(name);

2、查询一行数据(一个对象)

//查询一个对象 a
String sql1="select * from userinfo where uid=?";
RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
User user= jdbcTemplate.queryForObject(sql1, rowMapper,2);
System.out.println(user);

//查询一个对象 b   同 a,比 a 灵活
String sql="select * from userinfo where uid=1";
User u = jdbcTemplate.queryForObject(sql, new RowMapper<User>(){

    public User mapRow(ResultSet rs, int arg1) throws SQLException {
        // TODO Auto-generated method stub
        User user = new User();
        user.setUid(rs.getInt("uid"));
        user.setUserName(rs.getString("userName"));
        user.setSex(rs.getString("sex"));

        return user;
    }
});

System.out.println(u);

// c ,该方法返回一个Map<String, Object>,键是该表的列名,值是该列对应的数据
//该方法适用于该表没有于之映射的实体类的情况,取值相对麻烦
String sql = "select * from userinfo where uid = ?";
Map<String, Object> map = jdbcTemplate.queryForMap(sql, new Object[]{1});
Set<String> keyset = map.keySet();
Iterator<String> it = keyset.iterator();
while(it.hasNext()){
    Object key = it.next();
    System.out.println(key + "====" + map.get(key));
}

3、查询多行数据(对象)

//查询多个对象 a
String sql="select uid,userName,sex,age,addr,tel from userinfo";
RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
List<User> users= jdbcTemplate.query(sql, rowMapper);

for (User user : users) {
    System.out.println(user);
}

//查询多个对象 b  同 a,比 a 灵活
String sql = "select * from userinfo where sex = ?";
List<User> list = new ArrayList<User>();
Object[] param = {"男"};
list = jdbcTemplate.query(sql, param, new RowMapper<User>(){

    public User mapRow(ResultSet rs, int arg1) throws SQLException {
        // TODO Auto-generated method stub
        User u = new User();
        u.setUid(rs.getInt("uid"));
        u.setUserName(rs.getString("userName"));

        return u;
    }
});

//for(User u: list){
//  System.out.println(u); //获得整个对象
//}
for(int i = 0; i < list.size(); i++){
    System.out.println(list.get(i).getUid()); //获得该对象的某个属性
}

// c ,该方法返回 List<Map<String, Object>>,键为该表的相应列名,值为对应列的数据。
//该方法适用于该表没有与之映射的实体类的情况,取数据相对麻烦
String sql = "select * from userinfo where sex = ?";
List list = jdbcTemplate.queryForList(sql, new Object[]{"女"});
for(int i = 0; i < list.size(); i++) {
    Map map = (Map) list.get(i);
    Set keyset = map.keySet();
    Iterator it = keyset.iterator();
    while(it.hasNext()){
        Object key = it.next();
        System.out.println(key + "====" + map.get(key));
    }
}

jdbcTemplate 的用法还是比较方便、简单。以上用法仅供参考!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值