Spring的JDBCTemplate的基本程式碼操作,這裡沒用c3p0連線池,用的自帶連線池。
阿新 • • 發佈:2019-02-15
Spring的jdbcTemplate操作
1.Spring 框架一站式框架
- 針對 JavaEE 三層,每一層都有解決技術
- 在dao層,使用jdbcTemplate
2.Spring 對不同持久化技術的支援
- Spring為各種支援的持久化技術,都提供了簡單操作的模板和回撥。
ORM持久化技術 | 模板類 |
---|---|
JDBC | org.springframework.jdbc.core.JdbcTemplate |
Hibernate5.0 | org.springframework.orm.hibernate5.HibernateTemplate |
IBatis(MyBatis) | org.springframework.orm.ibatis.SqlMapClientTemplate |
JPA | org.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]]
*/