Spring整合jdbc

Spring是一个容器,往里面放入什么东西,就能有它的功能。

Spring有个jar包,提供了一个叫jdbcTemplate模板,他可以对数据库进行操作,所以说dao层依赖着这个jdbcTemplate,而jdbcTemplate依赖着数据库连接池或者Connection对象,推荐使用数据库连接池,比较省资源。

首先需要导入响应的jar包

Spring整合jdbc

第一步:定义一个dao层接口,并实现这个接口

第二步:如果要执行sql语句要有jdbcTemplate对象,并设置你的数据库地址以及账号密码和加载驱动,写一个sql语句 ,通过update方法去添加一条记录。

update:修改、添加、删除都用update

query:查询

ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/springjdbc");
dataSource.setUser("root");
dataSource.setPassword("root");

JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);

String sql = "insert into user (uid,balance,uName) values ('3','1000','张三')";

int i = jdbcTemplate.update(sql);

这是我们自己定义账号密码来实现的,那么现在要让Spring帮你配置账号密码以及数据库驱动和地址,那么怎么弄呢?

第一步:定义一个新的Demo,我们首先要清楚他们之间额依赖关系。

dao层依赖jdbcTemplate       jdbcTemplate   依赖 数据库连接池(dataSource)    数据库连接池依赖账号密码驱动及数据库地址


所以,我们要在application.xml文件中配置引用关系

<bean name="userDao" class = "cn.hd.springJDBC.impl.UserDaoImpl">这是我们dao层那个类的全路径名

<property name = "userDao" ref = "jdbcTemplate"></property>在这里引用模板jdbcTemplate

</bean>


然后让jdbcTemplate引入dataSource

<bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"></property>
</bean>

最后定义账号密码等。

<bean name = "dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

        <property name="dirverClass" value="com.mysql.jdbc.Driver"></property>

         <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/springjdbc"></property>

         <property name="user" value="root"></property>

         <property name="password" value="root"></property>

</bean>

这样的话还要在dao里添加一个私有属性jdbcTemplate,并生成它的set方法

private JdbcTemplate jdbcTenplate;

public void setJdbcYTemplate( JdbcTemplate jdbcTenplate){

        this.jdbcTenplate = jdbcTenplate;

}

在你的Demo1里

@Resource(name="userDao")
private UserDao userDao;

@Test
public void fun(){
   /*添加*/
   User user = new User();
    user.setUid(3);
    user.setBalance(1000);
    user.setuName("王二");
    int i = userDao.add(user);
    System.out.println(i);

这样才能通过userDao调用dao层的方法,也能实现。这样的话就实现了spring管理jdbc。


或者改变依赖关系,spring中提供了一个类,我们可以去继承这个类,那么在application.xml可以将依赖关系改成dao层直接依赖dataource,而不通过模板(jdbcTemplate),这样的话在dao层中的声明的jdbcTemplate及他的set方法就可以删除掉,并且获取jdbcTemplate的时候,变成了this.getJdbcTemplate()

@Override
public int add(User user) {
    String sql = "insert into user (uid,balance,uName) values (?,?,?)";
    int i = this.getJdbcTemplate().update(sql,user.getUid(),user.getBalance(),user.getuName());
    return i;
}

而最终版本就是,账号密码等放入到一个properties文件中

jdbc.driverClass = com.mysql.jdbc.Driver
jdbc.jdbcUrl = jdbc:mysql://localhost:3306/springjdbc
jdbc.user = root
jdbc.password = root

并且在配置文件中首先读取这个文件

<context:property-placeholder location="classpath:cn/hd/springJDBC/db.properties">

</context:property-placeholder>

记得这两行之间一定不紧挨着不能有空格等,否则会报错,这个location是你的propert文件的全路径地址

然后下面账号密码等的值变成了这样

<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>

为什么要将信息写入properties文件中,因为在以后开发中,你用的数据库不可能是公司的数据库,而是你自己的数据库,等项目发布的时候,要将你的数据库地址该改掉,如果不写在一个文件里的话,以后修改起来很麻烦,所以推荐写入文件中,修改时候直接进入到这个文件中修改即可。