首先,Spring在框架中的地位,无论是SSH还是SSM,都是主要负责业务层。而对于其他方面,Spring都有封装,但是并非所长。而本文所讲的JdbcTemplate则是对Jdbc操作的一个简单封装,功能与专门的数据库框架相比相差较远
(1)原始JDBC操作
Class.forName("com.mysql.cj.jdbc.com");
String url = "";
String userName = "";
String password = "";
Connection connection = DriverManager.getConnection(url,userName,password);
通过对原始JDBC操作,我们可以发现,主要就是设置了四个量:驱动名称driverClassName、数据库url、用户名username和密码password,通过设置这四个量后,再通过DriverManager的静态方法来获得Connection对象,再通过该对象来进行数据库的操作。无论何种数据源或者数据池,其都是为了获得Connection对象,后面均一样
(2)JdbcTemplate
由上面可得,我们需要先获取数据源(new也可以,通过Spring配置也可(推荐使用Spring)),然后设置四个变量(不同数据源的变量名称略有差异)。然后再创建JdbcTemplate对象,并set注入数据源(new、Spring配置均可)。至此,获得JdbcTemplate对象后可以执行后面的操作。这里演示使用Spring的配置文件来获得JdbcTemplate对象
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value=""></property>
<property name="username" value=""></property>
<property name="password" value=""></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
Spring使用的数据源为DriverManagerDataSource。四个量为driverClassName、url、username、password
C3P0使用的数据源为ComboPooledDataSource。四个量为driverClass、jdbcUrl、user、password
Druid使用的数据源为DruidDataSource。四个量为driverClassName、url、username、password
不同的数据源修改下配置即可。通过getBean()获得JdbcTemplate对象完成操作即可。
(3)JdbcTemplate的操作
①增删改:使用update(sql语句,sql语句中?的值);这个没任何问题
②查询1条或者多条记录。使用query(sql语句,RowMapper实现类对象,sql语句中?代表的值)。
这里面只有RowMapper是个新奇玩意。它的作用是将查询到的数据给封装到对象中,然后返回该对象的List集合。因此必须使用该接口的实现类。
1“系统提供了一个实现类new BeanPropertyRowMapper<要封装结果的类>(要封装结果的类.class)。其原理是通过传入的Class来反射得到对象,然后使用对象调用查询到的字段的set方法(例如,表中字段为name,那么就去寻找setName(),至于setName中干了啥不重要)。
2”自己实现该接口,注意要加上泛型。实现其方法,主要就是对于ResultSet中的一条数据如何封装到一个对象中,返回该对象即可。注意是一条数据,只能使用resultSet.get(),接口会自动帮你把所有的记录都进行该操作
③如果说查询count(*)这种只返回一个值:使用queryForObject(sql语句,返回值.class,Sql的?的值),这是Spring3的写法,Spring2使用了queryForXXX,XXX为返回值
(4)改进提升JDBCDaoSupport
JDBCDaoSupport是一个抽象类,其内部封装了一个单例的JdbcTemplate对象,同时提供了setDataSource()和setJdbcTemplate(),因此配置中向其子类注入DataSource对象,就可以创建这个单一JdbcTemplate对象,从而使用getJdbcTemplate()就可以获得该单例对象,来进行相关的操作。
首先,需要实现该抽象类,由于抽象类基本都实现了功能,因此可以提供空实现
public class MyDaoTest extends JdbcDaoSupport{}
然后在配置文件中进行配置该实现类
<bean id="jdbcDaoSupport" class="Test.MyDaoTest">
<property name="dataSource" ref="dataSource"></property>
</bean>
最后获得对象,再获得JdbcTemplate对象执行相关操作即可
public static void main(String[] args) throws ClassNotFoundException, SQLException {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("Test/beans.xml");
JdbcDaoSupport daoSupport = (JdbcDaoSupport) applicationContext.getBean("jdbcDaoSupport");
// daoSupport.getJdbcTemplate().update("insert into acount(name,money) values(?,?)","Moze",1000.0f);
List<Acount> query = daoSupport.getJdbcTemplate().query("select * from acount", new BeanPropertyRowMapper<Acount>(Acount.class));
for(Acount acount:query) {
System.out.println(acount.toString());
}
}
总结:学习使用了使用JdbcTemplate来操作数据库。