第1章Spring基础:6、Spring的数据库编程
学习⽬标:
Spring的数据库编程:数据库编程是互联⽹编程的基础,Spring框架为开发者提供了JDBC模板模式,即jdbcTemplate,它可以简化许多代码,但在实际应⽤中jdbcTemplate并不常⽤。⼯作更多的时候,⽤的是Hibernate框架和MyBatis框架进⾏数据库编程。
学习⼤纲:
⼀、Spring JDBC的XML配置
⼆、Spring JDBC的Java配置
三、Spring JdbcTemplate的常⽤⽅法
四、基于@Transactional注解的声明式事务管理
学习内容:
⼀、Spring JDBC的XML配置
本节Spring数据库编程主要使⽤Spring JDBC模块的core和dataSource包。core包是JDBC的核⼼功能包,包括常⽤的JdbcTemplate 类;dataSource包是访问数据源的⼯具类包。使⽤Spring JDBC操作数据库,需要对其进⾏配置。
<!--配置数据源-->
<bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- MySQL数据库驱动-->
<property name="driverClassName" value="sql.jdbc.Driver"/>
<!--连接数据库的URL-->
<property name="url" value="jdbc:mysql://localhost:3306/springtest?characterEncoding=utf8"/>
<!--连接数据库的⽤户名-->
<property name="username" value="root"/>
<!--连接数据库的密码-->
<property name="password" value="root"/>
</bean>
<!--配置JDBC模板-->
<bean id="jdbcTemplate"class="org.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
配置JDBC模板时,需要将dataSource注⼊到jdbcTemplate,⽽在数据访问层(如Dao类)使⽤jdbcTemplate时,也需要将jdbcTemplate注⼊到对应的Bean中。代码⽰例如下:
……
@Repository
public class TestDaoImpl implements TestDao{
@Autowired
//使⽤配置⽂件中的JDBC模板
private JdbcTemplate jdbcTemplate;
……
}
⼆、Spring JDBC的Java配置
@Configuration //通过该注解来表明该类是⼀个Spring的配置,相当于⼀个xml⽂件
@ComponentScan(basePackages ="dao")//配置扫描包
@PropertySource(value={"classpath:jdbc.properties"},ignoreResourceNotFound=true)
//配置多个属性⽂件时  value={"classpath:jdbc.properties","xx","xxx"}
public class SpringJDBCConfig {
@Value("${jdbc.url}")//注⼊属性⽂件jdbc.properties中的jdbc.url
private String jdbcUrl;
@Value("${jdbc.driverClassName}")
private String jdbcDriverClassName;
@Value("${jdbc.username}")
private String jdbcUsername;
@Value("${jdbc.password}")
private String jdbcPassword;
/**
* 配置数据源
*/
@Bean
public DriverManagerDataSource dataSource(){
DriverManagerDataSource myDataSource =new DriverManagerDataSource();
// 数据库驱动
myDataSource.setDriverClassName(jdbcDriverClassName);;
// 相应驱动的jdbcUrl
myDataSource.setUrl(jdbcUrl);
// 数据库的⽤户名
myDataSource.setUsername(jdbcUsername);
// 数据库的密码
myDataSource.setPassword(jdbcUsername);
return myDataSource;
}
/**
* 配置JdbcTemplate
*/
@Bean(value="jdbcTemplate")
public JdbcTemplate getJdbcTemplate(){
return new JdbcTemplate(dataSource());
}
}
三、Spring JdbcTemplate的常⽤⽅法
获取JDBC模板后,如何使⽤它是本节将要讲述的内容。⾸先,需要了解JdbcTemplate类的常⽤⽅法。该类的常⽤⽅法是update()和query()⽅法。
public int update(String sql,Object args[])
该⽅法可以对数据表进⾏增加、修改、删除等操作。使⽤args[]设置SQL语句中的参数,并返回更新的⾏数。⽰例代码如下:
String insertSql ="insert into user values(null,?,?)";
Object param1[]={"chenheng1","男"};
jdbcTemplate.update(sql, param1);
public List<T> query (String sql, RowMapper<T> rowMapper, Object args[])
该⽅法可以对数据表进⾏查询操作。rowMapper将结果集映射到⽤户⾃定义的类中(前提是⾃定义类中的属性要与数据表的字段对应)。⽰例代码如下:
String selectSql ="select * from user";
RowMapper<MyUser> rowMapper =new BeanPropertyRowMapper<MyUser>(MyUser.class);
List<MyUser> list = jdbcTemplate.query(sql, rowMapper,null);
下⾯通过⼀个实例【例1-8】演⽰Spring JDBC的使⽤过程
1.使⽤Eclipse创建Web应⽤并导⼊JAR包
在这⾥插⼊图⽚描述
2.创建属性⽂件与配置类
在ch1_8应⽤的src⽬录下,创建数据库配置的属性⽂件jdbc.properties
在ch1_8应⽤的src⽬录下,创建config包,并在该包中创建配置类SpringJDBCConfig。在该配置类中使⽤@PropertySource注解读取属性⽂件jdbc.properties,并配置数据源和JdbcTemplate
//jdbc.properties属性⽂件
jdbc.sql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springtest?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456
//SpringJDBCConfig
package config;
import org.springframework.beans.factory.annotation.Value;
import t.annotation.Bean;
import t.annotation.ComponentScan;
import t.annotation.Configuration;
import t.annotation.PropertySource;
import org.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.DriverManagerDataSource;
import ansaction.annotation.EnableTransactionManagement; @Configuration //通过该注解来表明该类是⼀个Spring的配置,相当于⼀个xml⽂件
@ComponentScan(basePackages ={"dao","service"})//配置扫描包
@PropertySource(value={"classpath:jdbc.properties"},ignoreResourceNotFound=true) @EnableTransactionManagement//开启声明式事务的⽀持
//配置多个配置⽂件  value={"classpath:jdbc.properties","xx","xxx"}
public class SpringJDBCConfig {
@Value("${jdbc.url}")//注⼊属性⽂件jdbc.properties中的jdbc.url
private String jdbcUrl;
@Value("${jdbc.driverClassName}")
private String jdbcDriverClassName;
@Value("${jdbc.username}")
private String jdbcUsername;
@Value("${jdbc.password}")
private String jdbcPassword;
/**
* 配置数据源
*/
@Bean
public DriverManagerDataSource dataSource(){
DriverManagerDataSource myDataSource  =new DriverManagerDataSource();
// 数据库驱动
myDataSource.setDriverClassName(jdbcDriverClassName);
/
/ 相应驱动的jdbcUrl
myDataSource.setUrl(jdbcUrl);
// 数据库的⽤户名
myDataSource.setUsername(jdbcUsername);
// 数据库的密码
myDataSource.setPassword(jdbcUsername);
return myDataSource;
}
/**
* 配置JdbcTemplate
*/
@Bean(value="jdbcTemplate")
public JdbcTemplate getJdbcTemplate(){
return new JdbcTemplate(dataSource());
}
/**
* 为数据源添加事务管理器
*/
@Bean
public DataSourceTransactionManager transactionManager(){
DataSourceTransactionManager dt =new DataSourceTransactionManager();
dt.setDataSource(dataSource());
return dt;
}
}
3.创建数据表与实体类
在ch1_8应⽤的src⽬录下,创建包entity,在该包中创建实体类MyUser
//MyUser
package entity;
public class MyUser
{
private Integer uid;
private String uname;
private String usex;
//省略set和get⽅法
public String toString(){
return"myUser[uid="+uid+",uname="+uname+",usex="+usex+"]";
}
}
4.创建数据访问层
在ch1_8应⽤的src⽬录下,创建包dao,在该包中创建数据访问接⼝TestDao和接⼝实现类TestDaoImpl。在实现类TestDaoImpl中使⽤@Repository注解标注此类为数据访问层,并使⽤@Autowired注解依赖注⼊JdbcTemplate。
//TestDao
package dao;
import java.util.List;
import entity.MyUser;
public interface TestDao {
public int update(String sql, Object[] param);
public List<MyUser>query(String sql, Object[] param);
}
//TestDaoImpl
package dao;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.BeanPropertyRowMapper;
import org.JdbcTemplate;
import org.RowMapper;
import org.springframework.stereotype.Repository;
import entity.MyUser;
@Repository
public class TestDaoImpl implements TestDao{
@Autowired
//使⽤配置类中的JDBC模板
private JdbcTemplate jdbcTemplate;
/**
* 更新⽅法,包括添加、修改、删除
mysql的jar包下载* param为sql中的参数,如通配符?
*/
@Override
public int update(String sql, Object[] param){
return jdbcTemplate.update(sql, param);
}
/**
* 查询⽅法
* param为sql中的参数,如通配符?
*/
@Override
public List<MyUser>query(String sql, Object[] param){
RowMapper<MyUser> rowMapper =new BeanPropertyRowMapper<MyUser>(MyUser.class);
return jdbcTemplate.query(sql, rowMapper);
}
}
5.创建业务逻辑层
在ch1_8应⽤的src⽬录下,创建包service,在该包中创建数据访问接⼝TestService和接⼝实现类TestServiceImpl。在实现
类TestServiceImpl中使⽤@Service注解标注此类为业务逻辑层,并使⽤@Autowired注解依赖注⼊TestDao。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。