Spring整合jdbc
Spring是一个容器,往里面放入什么东西,就能有它的功能。
Spring有个jar包,提供了一个叫jdbcTemplate模板,他可以对数据库进行操作,所以说dao层依赖着这个jdbcTemplate,而jdbcTemplate依赖着数据库连接池或者Connection对象,推荐使用数据库连接池,比较省资源。
首先需要导入响应的jar包
第一步:定义一个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文件中,因为在以后开发中,你用的数据库不可能是公司的数据库,而是你自己的数据库,等项目发布的时候,要将你的数据库地址该改掉,如果不写在一个文件里的话,以后修改起来很麻烦,所以推荐写入文件中,修改时候直接进入到这个文件中修改即可。