JdbcTemplate 有关CRUD的操作

Spring JdbcTemplate

excute(String sql)

可执行任何sql语句,但返回值是void,所以一般用于数据库的新建、修改、删除和数据表记录的增删改。


queryForObject()

必须只能返回一条记录,且只能查询一个字段,必须且只能返回一条记录,如果返回多条记录或没有记录匹配,都会报错;且只能查询一个字段。

  • queryForObject(String sql, T.class) //不需向sql语句传递参数

int count = jdbcTemplate.queryForObject("select count(1) from ("+sql.toString()+")a",Integer.class);
  • queryForObject(String sql, Object[] args, T.class) //args是sql语句中?对应的值

 String sql="select id from student_tb where name = ? and gender = ?"
Object[] args=new Object[]{"张三",1};
int id=jdbcTemplate.queryForObject(sql,args,int.class);
  • queryForObject(String sql, T.class, Object... args)

 String sql="select id from student_tb where name = ? and gender = ?"
Object[] args=new Object[]{"张三",1};
int id=jdbcTemplate.queryForObject(sql,int.class,"zhangsan","男");

 

queryForList

可以返回0条或多条记录,普通类型的List只能查询一个字段,Map类型的List可以查询多个字段

  • List queryForList(String sql, T.class)

        String sql="select name from student_tb";
       List<String> list=jdbcTemplate.queryForList(sql,String.class);
       for (String name:list){
           System.out.println(name);
      }  
  • List queryForList(String sql, Object[] args, T.class) //args是sql语句中?的对应值(实参)

  • List queryForList(String sql, T.class, Object...args)

基本数据类型的List,只能选中数据表的一列

 

  • List> queryForList(String sql)

  • List> queryForList(String sql, Object...args)

String sql="select * from student_tb";
       List<Map<String,Object>> list=jdbcTemplate.queryForList(sql);
       //list装的是结果集中所有的记录,一个map装一条记录
       for (Map<String,Object> map:list){
           //map的key是字段名,value是该字段的值。get()的返回值是Object。
           Object id = map.get("id");
           Object name = map.get("name");
           Object age = map.get("age");
           System.out.println("id:"+id+"\tname:"+name+"\tage:"+age);
      }

Map类型的List,可以选择多列。字段名都是String,值可能是各种类型,所以使用Map

 

queryForMap

可以查询多个字段,但只能装一条记录(因为key的值不能重复)

  • Map queryForMap(String sql)

  • Map queryForMap(String sql, Object...args)

        String sql="select * from student_tb where id = 1";
       Map<String,Object> map=jdbcTemplate.queryForMap(sql);
       Object name = map.get("name");
       Object age = map.get("age");
       System.out.println("name:"+name+"\tage:"+age);

因为是Map,可以装多个字段,但只能装一条记录。

如果返回多条记录,则只取第一条来装;如果没有匹配的记录,会报错

 

queryForRowSet()

返回结果集

  • SqlRowSet queryForRowSet(String sql)

  • SqlRowSet queryForRowSet(String sql, Object...args) //args是sql语句中的?对应的值。

        String sql="select * from student_tb";
       SqlRowSet rowSet=jdbcTemplate.queryForRowSet(sql);
       //遍历结果集
       while (rowSet.next()){
           // 参数指定列名,可以用String类型的字段名,也可以用int型的值(该字段在结果集中的第几列,从1开始)
           // int id = rowSet.getInt(1);
           int id = rowSet.getInt("id");
           String name = rowSet.getString("name");
           //......
      }

 

query()

将结果集的记录映射为bean类型的List

  • List query(String sql, RowMapper rowMapper)

  • List query(String sql, Object[] args, RowMapper rowMapper)

  • List query(String sql, RowMapper rowMapper, Object...args)

 

bean:

@Data
@AllArgsConstrctor
@NoArgsConstrctor
public class Student {
   private int id;
   private String name;
   private int age;
}

使用:

        String sql="select * from student_tb";
       RowMapper<Student> rowMapper=new BeanPropertyRowMapper<>(Student.class);
       List<Student> list=jdbcTemplate.query(sql,rowMapper);
       System.out.println(list);

 

RowMapper是接口,BeanPropertyRowMapper是spring提供的唯一的实现类。

 

query()只能将结果集的记录映射为Bean类型的List,不能映射为基本类型的List。

映射时会自动将结果集中的字段赋给同名的成员变量,所以要求Bean的成员变量名要与结果集的字段名相同,很死板

如果结果集中没有同名的字段,该成员变量就不会被映射(值是JVM赋的初始值)。

映射时是调用setter方法给Bean的成员变量赋值,所以Bean要提供setter方法。

 

 

增删改等操作

//插入
public int insert() {
String sql = "insert into business(username,tell) values(?,?)";
Object args[] = {"王五","12345678911"};
int i = jdbcTemplate.update(sql,args);
System.out.println("插入了"+i+"条数据");
return i;
}

//删除
//如果我们在后台页面中删除某条数据,可以通过获取
//该条数据的id值并通过设成方法的参数值的方式来进行删除操作
//可以通过ajax的方式异步传递参数(推荐),也可以通过作用域的方式进行存储取值
public void deleteById() {
String sql = "delete from business where id=?";
Object args[] = {"3"};
int i = jdbcTemplate.update(sql,args);
System.out.println("删除了"+i+"条数据");
}

//通常我们更新一个对象时可以获取整个对象来作为参数
//通过后台修改的方式将修改的传递update方法来进行修改
//点击修改按钮,获取该对象的id值 并通过findBusinessById(id)来获取改对象-->
//后台表单中可以给初始值business.username business.tell 然后修改初始值-->
//通过表单取值并执行update方法
public void update(Business business) {
String sql = "update business set username=? and tell=? where id =?";
Object args[] = {business.getUsername(),business.getTell(),business.getId()};
int i = jdbcTemplate.update(sql,args);
}

 

你可能感兴趣的:(JdbcTemplate 有关CRUD的操作)