您的位置:首页 > 编程语言 > Java开发

Spring的JDBCTemplate的基本代码操作,这里没用c3p0连接池,用的自带连接池。

2017-03-31 11:28 435 查看

Spring的jdbcTemplate操作

1.Spring 框架一站式框架

针对 JavaEE 三层,每一层都有解决技术

在dao层,使用jdbcTemplate

2.Spring 对不同持久化技术的支持

Spring为各种支持的持久化技术,都提供了简单操作的模板和回调。

ORM持久化技术模板类
JDBCorg.springframework.jdbc.core.JdbcTemplate
Hibernate5.0org.springframework.orm.hibernate5.HibernateTemplate
IBatis(MyBatis)org.springframework.orm.ibatis.SqlMapClientTemplate
JPAorg.springframework.orm.jpa.JpaTemplate
jdbcTemplate 对 jdbc进行封装

3.jdbcTemplate 使用和Apache公司的DBUtils使用很相似,都是对数据库进行crud操作。

使用jdbcTemplate时要先导包。这里必须导入spring-tx和jdbcTemplate这两个包,缺一不可,虽然spring-tx是关于事务管理的包,但是里面也有jdbcTemplate对tx的依赖。

下载地址

最后别忘了导入数据库驱动的包

下载地址

jdbcTemplate 依赖连接池(这里用到的不是c3p0连接池)获取数据库连接,所以必须先构造连接池。

下面介绍四个操作:增删改查

增加

@Test
public void add() {
//因为JDBCTemplate是依赖数据库连接池的,所以先构造连接池
DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("");
//创建jdbctemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(driverManagerDataSource);

//调用jdbctemplate对象里面的方法实现操作
String sql="insert into user values(?,?)";
int rows=jdbcTemplate.update(sql, "FireLang","123456");
System.out.println(rows);
}


注意上面代码中的数据库url是
jdbc:mysql://localhost:3306/template
,其实这样写也可以
jdbc:mysql:///template


修改

@Test
public void update(){
//因为JDBCTemplate是依赖数据库连接池的,所以先构造连接池
DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("");

//创建jdbctemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(driverManagerDataSource);

//调用jdbctemplate对象里面的方法实现操作
String sql="update user set password=? where name=?";
int rows=jdbcTemplate.update(sql, "1314520","FireLang");
System.out.println(rows);
}


删除

@Test
public void delete(){
//因为JDBCTemplate是依赖数据库连接池的,所以先构造连接池
DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("");

//创建jdbctemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(driverManagerDataSource);

//调用jdbctemplate对象里面的方法实现操作
String sql="delete from user where name=?";
int rows=jdbcTemplate.update(sql, "LangShen");
System.out.println(rows);
}


查询

使用jdbcTemplate实现查询操作

jdbcTemplate实现查询,有接口RowMapper

jdbcTemplate针对这个接口并没有提供实现类,得到不同的类型数据需要自己进行数据封装

查询单值:

@Test
public void showSingleTyepValue(){
//因为JDBCTemplate是依赖数据库连接池的,所以先构造连接池
DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("");

//创建jdbctemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(driverManagerDataSource);

//调用jdbctemplate对象里面的方法实现操作
String sql="select count(name) from user";
int count=jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(count);
}


查询对象:

@Test
public void showSingleObject(){
//因为JDBCTemplate是依赖数据库连接池的,所以先构造连接池
DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("");

//创建jdbctemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(driverManagerDataSource);

//调用jdbctemplate对象里面的方法实现操作
String sql="select * from user where name=?";//这里查询出来的是单个对象。
User temp=jdbcTemplate.queryForObject(sql, new RowMapper<User>(){

@Override
public User mapRow(ResultSet result, int num) throws SQLException {//这里的num表示行号,比如我查询出了几个数据,而num代表ResultSet里面的行号。
User user=new User(result.getString("name"), result.getString("password"));
return user;
}

},"FireLang");
System.out.println(temp);
}


查询返回List集合

@Test
public  void showList(){
//因为JDBCTemplate是依赖数据库连接池的,所以先构造连接池
DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("");

//创建jdbctemplate对象,设置数据源
JdbcTemplate jdbcTemplate=new JdbcTemplate(driverManagerDataSource);

//调用jdbctemplate对象里面的方法实现操作
String sql="select * from user";//查询所有
List<User> templist=jdbcTemplate.query(sql, new RowMapper<User>(){

@Override
public User mapRow(ResultSet result, int num) throws SQLException {//这里的num表示行号,比如我查询出了几个数据,而num代表ResultSet里面的行号。
System.out.println("当前行数: "+num);
User user=new User(result.getString("name"), result.getString("password"));
return user;
}

});
System.out.println(templist);
}

/*
输出结果:

当前行数: 0
当前行数: 1
[User [name=FireLang, password=1314520], User [name=LangShen, password=123456]]

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: