【Spring】整合JDBC连接数据库
2017-11-10 17:07
357 查看
Spring其实无须Hibernate和Mybatis等组件,自己就能够借助JDBC连接数据库的。毕竟,在《【Spring】value和ref》(点击打开链接)我早就指出Spring只是一个将Java的各类初始化语句写在xml里面之中而已。Spring可以在Javaee设置数据库的原因,实际上,它是将一些诸如数据库用户名、密码等东西在xml中初始化,让各类数据库组件避免一系列繁琐的XX
xx=new XX();xx.setusername("xx");等语句而已。下面,则使用一个Spring整合JDBC连接Mysql数据库的例子说明这个问题。
一、程序目标
数据库中有张已经被举了无数次个栗子废表User里面的数据:
我们能将它的内容在Java中打印出来,如下图所示,也能在Java中修改它的数据。而连接这个数据库的地址、用户名、密码等通通写在xml文件中好管理。
二、程序所需的jar包
由2部分组成,一个是非常常见的JDBC连接Mysql的核心jar,一个是我在《【Spring】Spring3.x的下载与配置》(点击打开链接)提到过的Spring3.x组成的核心包。这里不再赘述了,将这些jar添加到你的Java工程之中。
三、程序制作
首先贴上程序的工程结构
1、首先User.java作为数据库的实体Java,也就是上面那张废表在Java的表现方式,相信大家见到这个private+setter+getter已经屡见不鲜了,输入完一系列私有变量,利用alt+shift+s让eclipse自动生成setter和getter,估计大家已经非常熟络。
2、接下来是UserMapper.java这个是Spring直接整合JDBC的指定动作,告诉Spring,数据库和Java是如何匹配的,你照着上面的User.java改就行。这就是为何这么多Java应用,尤其是Javaee应用,常常数据库组件不直接用Spring,除了Spring之外,还要多一个Mybatis和Hibernate支持,毕竟这些组件能将这部分Mapper写到xml或者用注解的形式完成之后,Spring再写个xml整合下就好,无须写这个充满xx.setXX("")的Java这么不好维护了。要知道,在业内一大堆+=,=赋值语句是一件很羞耻的事情-_-!我也不知道什么时候形成这种风气的!
3、然后是UserDao.java,关于数据库接口Java,实质上是一系列Java和数据库真正打交道的操作,你要Java怎么和数据库都应该写在这里,其它的Java类直接调用就好。我这里定义了查询整张表的数据、修改password字段两个方法。
这里,jdbcTemplate通过query(sql.mapper)方法,将sql查询到东西放到刚才定义的实体mapper中,返回值就是大家非常熟悉的Java List容器。而通过execute(sql)方法,直接对数据库进行修改,无返回值。这也和你平时在处理数据库一样的,查询是返回一个表给你,User代表其中一行,List则是这么多行的结合,而执行则无返回,只提示有几行被修改。
4、最后完成applicationContext.xml这个spring的核心文件。
(1)首先,直接在org.springframework.jdbc.datasource.DriverManagerDataSource这个系统自带的数据库连接源(其本质就是拥一个类class),初始化各个连接数据库必须的类变量driverClassName、url等,这里,&应该写成&,所有xml中的&都应该这样转义,不然由于&是xml文件的关键字就像<>一样,直接写&是无法被处理。
(2)然后,在org.springframework.jdbc.core.JdbcTemplate这个系统自带的类,赋予刚才的数据库连接类让其初始化,也就是几乎可以完全等同JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);这个意思了。这里的ref="dataSource"就是将上面的bean id="dataSource"里面成功初始化的数据库连接源,赋予给JdbcTemplate的意思。
(3)最后,将我们刚刚在自己写的UserDao.java中的jdbcTemplate初始化了,然后给个userDao的id,一会儿,在测试类Client.java中的UserDao userDao=new UserDao();让业内大部分装X的程序猿、大部分装X的架构师看不惯的话省去了。
5、完成client.java直接可以看到效果了。
xx=new XX();xx.setusername("xx");等语句而已。下面,则使用一个Spring整合JDBC连接Mysql数据库的例子说明这个问题。
一、程序目标
数据库中有张已经被举了无数次个栗子废表User里面的数据:
我们能将它的内容在Java中打印出来,如下图所示,也能在Java中修改它的数据。而连接这个数据库的地址、用户名、密码等通通写在xml文件中好管理。
二、程序所需的jar包
由2部分组成,一个是非常常见的JDBC连接Mysql的核心jar,一个是我在《【Spring】Spring3.x的下载与配置》(点击打开链接)提到过的Spring3.x组成的核心包。这里不再赘述了,将这些jar添加到你的Java工程之中。
三、程序制作
首先贴上程序的工程结构
1、首先User.java作为数据库的实体Java,也就是上面那张废表在Java的表现方式,相信大家见到这个private+setter+getter已经屡见不鲜了,输入完一系列私有变量,利用alt+shift+s让eclipse自动生成setter和getter,估计大家已经非常熟络。
public class User { private Integer id; private String username; private String password; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
2、接下来是UserMapper.java这个是Spring直接整合JDBC的指定动作,告诉Spring,数据库和Java是如何匹配的,你照着上面的User.java改就行。这就是为何这么多Java应用,尤其是Javaee应用,常常数据库组件不直接用Spring,除了Spring之外,还要多一个Mybatis和Hibernate支持,毕竟这些组件能将这部分Mapper写到xml或者用注解的形式完成之后,Spring再写个xml整合下就好,无须写这个充满xx.setXX("")的Java这么不好维护了。要知道,在业内一大堆+=,=赋值语句是一件很羞耻的事情-_-!我也不知道什么时候形成这种风气的!
import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; public class UserMapper implements RowMapper<User> { @Override public User mapRow(ResultSet rs, int rownum) throws SQLException { User user = new User(); user.setId(rs.getInt("id")); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); return user; } }
3、然后是UserDao.java,关于数据库接口Java,实质上是一系列Java和数据库真正打交道的操作,你要Java怎么和数据库都应该写在这里,其它的Java类直接调用就好。我这里定义了查询整张表的数据、修改password字段两个方法。
这里,jdbcTemplate通过query(sql.mapper)方法,将sql查询到东西放到刚才定义的实体mapper中,返回值就是大家非常熟悉的Java List容器。而通过execute(sql)方法,直接对数据库进行修改,无返回值。这也和你平时在处理数据库一样的,查询是返回一个表给你,User代表其中一行,List则是这么多行的结合,而执行则无返回,只提示有几行被修改。
import java.util.List; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; public class UserDao { private JdbcTemplate jdbcTemplate;//利用applicationContext.xml让它初始化,不用每个类都出现jdbcTemplate= new JdbcTemplate(xx)这些玩意! /*查询整张表的数据*/ public List<User> findAllUser() { String sql = "select * from user"; RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class); return this.jdbcTemplate.query(sql, rowMapper); } /*修改password字段*/ public void updatePassword(int id,String password){ String sql = "update user set password='"+password+"' where id="+id; jdbcTemplate.execute(sql); } /*JdbcTemplate jdbcTemplate的getter setter必须有,不然spring读不到这个变量。由于不太重要,习惯性放在最后*/ public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } }
4、最后完成applicationContext.xml这个spring的核心文件。
(1)首先,直接在org.springframework.jdbc.datasource.DriverManagerDataSource这个系统自带的数据库连接源(其本质就是拥一个类class),初始化各个连接数据库必须的类变量driverClassName、url等,这里,&应该写成&,所有xml中的&都应该这样转义,不然由于&是xml文件的关键字就像<>一样,直接写&是无法被处理。
(2)然后,在org.springframework.jdbc.core.JdbcTemplate这个系统自带的类,赋予刚才的数据库连接类让其初始化,也就是几乎可以完全等同JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);这个意思了。这里的ref="dataSource"就是将上面的bean id="dataSource"里面成功初始化的数据库连接源,赋予给JdbcTemplate的意思。
(3)最后,将我们刚刚在自己写的UserDao.java中的jdbcTemplate初始化了,然后给个userDao的id,一会儿,在测试类Client.java中的UserDao userDao=new UserDao();让业内大部分装X的程序猿、大部分装X的架构师看不惯的话省去了。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd "> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useOldAliasMetadataBehavior=true" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="userDao" class="UserDao"> <property name="jdbcTemplate" ref="jdbcTemplate" /> </bean> </beans>
5、完成client.java直接可以看到效果了。
import java.util.*;//打印数据库表的时候,用到容器List、ArrayList不得不应用 /*用于初始化Spring*/ import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.context.ConfigurableApplicationContext;//用于关闭Spring public class Client { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext( "applicationContext.xml");// 初始化spring UserDao userDao = (UserDao) applicationContext.getBean("userDao");// 初始化userDao这个数据库接口类 // userDao.updatePassword(1, "cc");这样就能修改id=1的password字段,让其变成cc,这里不作展示 /* 查询整张表的内容将其打印出来 */ List<User> user_list = new ArrayList<User>(); user_list = userDao.findAllUser(); for (User user : user_list) {// jdk1.5+的foreach打印,省事,不用写这么多代码了 System.out.println(user.getId() + "\t" + user.getUsername() + "\t" + user.getPassword()); } ((ConfigurableApplicationContext) applicationContext).close();// 关闭Spring避免警告 } }
相关文章推荐
- Spring中使用JDBC连接数据库的配置
- spring与hibernate整合配置多个数据库连接
- Spring 使用原生的jdbc或整合ORM操作数据库的模板编程
- Spring Boot JDBC 连接数据库
- spring与ibatis的整合及多数据库连接
- 【SSH (六)】struts2 整合 spring 并 连接数据库
- Spring连接数据库整合-实例
- hibernate和spring整合时出现的数据库连接问题
- spring 框架jdbc连接数据库
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(七)JDBC url的连接参数
- Spring连接数据库整合-实例
- spring与hibernate整合-使用properties文件分离数据库连接设置
- Spring Boot JDBC 连接数据库示例
- Spring与JDBC连接实现对数据库的增删改查
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(七)JDBC url的连接参数
- Spring的数据库操作---- Spring框架对JDBC的整合---- spring集成jdbc概述
- Spring Boot JDBC 连接数据库
- Spring和数据库连接 --- 征服数据库jdbc
- Spring数据库数据源JDBC连接池连接MySQL的超时问题
- Spring事务之二(JDBC连接数据库的四种方式)