八、Spring-jdbc
阿新 • • 發佈:2018-11-24
1.JDBC模板
- Spring是EE開發的一站式的框架,有EE開發的每層的解決方案。
- Spring對持久層也提供瞭解決方案:ORM模組和JDBC的模板。
- Spring提供了很多的模板用於簡化開發,如JDBC、Springmvc
2.JDBC模板入門
- 建立資料庫和表
create table account(
id int primary key auto_increment,
name varchar(20),
money double
);
- 使用JDBC的模板
public class SpringJdbcTest {
@Test
public void test(){
//1.建立資料庫連線池
DriverManagerDataSource source = new DriverManagerDataSource();
source.setDriverClassName("com.mysql.jdbc.Driver");
source.setUrl("jdbc:mysql:///spring");
source.setUsername("root");
source.setPassword("123" );
//2.建立JDBC模板
JdbcTemplate jdbcTemplate = new JdbcTemplate(source);
jdbcTemplate.update("insert into account value(null,?,?)","zs",1000d);
}
}
- 資料插入成功,顯示多了一條記錄!
3.Spring管理JDBC
- 配置檔案:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--資料庫連線池配置-->
<bean id="source" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///spring"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--name是setDataSource的注入,是new JdbcTemplate(source)的注入的變形,類似setUrl-->
<property name="dataSource" ref="source"/>
</bean>
</beans>
- 測試類:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringJdbcTest2 {
@Resource(name = "jdbcTemplate")
private JdbcTemplate jdbcTemplate;
@Test
public void test() {
jdbcTemplate.update("insert into account value(null,?,?)", "ls", 10000d);
}
}
4.使用第三方連線池(只需要更改配置檔案就行)
- DBCP連線池
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--配置dbcp連線池-->
<bean id="dbcp" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///spring"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dbcp"/>
</bean>
</beans>
- C3P0
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--配置c3p0連線池-->
<bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql:///spring"/>
<property name="user" value="root"/>
<property name="password" value="123"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="c3p0"/>
</bean>
</beans>
- Druid
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--配置druid連線池-->
<bean id="druid" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///spring"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="c3p0"/>
</bean>
</beans>
5.載入屬性檔案(bean方式)
- src/下新建jdbc.propertied
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///spring
username=root
password=123
- 配置檔案:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--bean方式:載入屬性檔案-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="jdbc.properties"/>
</bean>
<!--配置druid連線池-->
<bean id="druid" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="druid"/>
</bean>
</beans>
- 執行測試類即可!
6.載入屬性檔案(context方式)
- src/下新建jdbc.propertied
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///spring
username=root
password=123
- 配置檔案:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--context方式:載入屬性檔案-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--配置druid連線池-->
<bean id="druid" class="com.alibaba.druid.pool.DruidDataSource">
<!--key值不能和name一樣,加字首jdbc-->
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="druid"/>
</bean>
</beans>
7.JDBC模板的CRUD操作
- 插入操作
- 刪除操作
- 更新操作
- 查詢單個欄位值
(以下忽略連線資料庫細節)
@Test
public void test() {
/*查詢單個欄位name*/
String name = jdbcTemplate.queryForObject("select name from account where id=?", String.class, 1);
System.out.println(name);
}
- 查詢一條記錄
- 新建domain類
import lombok.Getter;
import lombok.Setter;
@Getter@Setter
public class Account {
private Integer id;
private String name;
private Double money;
@Override
public String toString() {
return "Account{" +
"id=" + id +
", name='" + name + '\'' +
", money=" + money +
'}';
}
}
- 新建結果集處理器類
public class MyRowMap implements RowMapper<Account> {
@Override
public Account mapRow(ResultSet resultSet, int i) throws SQLException {
Account account = new Account();
account.setId(resultSet.getInt("id"));
account.setName(resultSet.getString("name"));
account.setMoney(resultSet.getDouble("money"));
return account;
}
}
- 執行測試類
@Test
public void test() {
Account account = jdbcTemplate.queryForObject("select * from account where id=?", new MyRowMap(), 1);
System.out.println(account); //Account{id=1, name='zs', money=1000.0}
}
- 查詢所有記錄
- domain類、結果集處理類不變
- 測試類
@Test
public void test() {
List<Account> query = jdbcTemplate.query("select * from account", new MyRowMap());
for(Account account:query){
System.out.println(account);
}
}
//將迭代輸出每一個數據記錄的資訊