前言
先入门,把核心理解后再回过头来看这些我觉得效果更好,不知道说的对不对,要是理解不当,还望指教。此篇为Spring的数据库编程,主要讲jdbcTemplate,让初学者直接上手。
数据库切入
数据库编程是互联网编程的基础,Spring框架为开发者提供了JDBC模板模式,即jdbcTemplate,它可以简化许多代码,需要提醒的是jdbcTemplate在实际应用中并不常用,但我觉得对新手来说苍蝇再小也是肉,要想往前走,就得把这些小肉先吃了。
Spring JDBC配置
使用Spring JDBC操作数据库,需要对其进行配置,配置如下
<!--配置spring-jdbcTemplate--> <!--配置数据源--> <beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--MySQL数据库驱动--> <propertyname="driverClassName"value="com.mysql.jdbc.Driver"></property> <!--连接数据库的URL--> <propertyname="url"value="jdbc:mysql://localhost:3306/bbb?useUnicode=true&characterEncoding=UTF-8"></property> <!--连接数据库的用户名--> <propertyname="username"value="root"></property> <!--连接数据库的密码--> <propertyname="password"value="root"></property> </bean> <!--配置JDBC模板--> <beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="dataSource"></property> </bean>
配置JDBC模板时需要将dataSource注入到jdbcTemplate,而在数据访问层(Dao类)需要使用jdbcTemplate时也需要将jdbc Template注入到对应的Bean中,我在这演示用最简单的注解注入
@Repository("userDao") publicclassUserDaoImplimplementsUserDao{ @Autowired //使用配置文件中的JDBC模板 privateJdbcTemplatejdbcTemplate; }
Spring Jdbc Template的常用方法
在上面我们获取了JDBC模板,下面我来说如何使用它。首先需要了解JdbcTemplate常用的方法,该类的常用方法是update和query.
1、public int update(String sql,Object args[])
该方法可以对数据表进行增加、修改、删除等操作。使用args[]设置SQL语句中的参数,并返回更新的行数。
示例如下:
publicvoidadd(){ StringinsertSql="insertintouservalues(null,?,?)"; Objectparem1[]={"成功","123456"}; jdbcTemplate.update(insertSql,parem1); System.out.println("UserDao中的添加功能实现了"); }
2、public List query(String sql,RowMapper rowMapper,Object args[])
该方法可以对数据表进行查询操作,rowMapper将结果集映射到用户自定义的类中(前提是自定义类中的属性要与数据表的字段对应)。
示例如下:
publicvoidquery(){ StringselectSql="select*fromuser"; RowMapper<User>rowMapper=newBeanPropertyRowMapper<User>(User.class); List<User>list=jdbcTemplate.query(selectSql,rowMapper,null); System.out.println("UserDao中的查询功能实现了"); }
案例辅助
Pom.xml
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!--spring核心依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.1.5.RELEASE</version> </dependency> <!--日志相关--> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> </dependencies>
spring-config.xml
<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <!--配置注解要扫描的包--> <context:component-scanbase-package="com.my"></context:component-scan> <mvc:annotation-driven></mvc:annotation-driven> <!--将指定类TestDaoImpl配置给Spring,让Spring创建其实例--> <beanid="testDIDao"class="com.my.dao.impl.TestDaoImpl"/> <!--使用构造方法注入--> <!--<beanid="testDIService"class="com.my.service.impl.TestServiceImpl">--> <!--<!–将TestDIDao注入到TestDIServiceImpl类的属性testDao上–>--> <!--<constructor-argindex="0"ref="testDIDao"/>--> <!--</bean>--> <!--使用setter方法注入--> <beanid="testDIService"class="com.my.service.impl.TestServiceImpl"> <!--调用TestDIServiceImpl类的setter方法,将TestDao注入到TestServiceImpl类的属性testDao上--> <propertyname="testDao"ref="testDIDao"></property> </bean> <!--配置spring-jdbcTemplate--> <!--配置数据源--> <beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--MySQL数据库驱动--> <propertyname="driverClassName"value="com.mysql.jdbc.Driver"></property> <!--连接数据库的URL--> <propertyname="url"value="jdbc:mysql://localhost:3306/bbb?useUnicode=true&characterEncoding=UTF-8"></property> <!--连接数据库的用户名--> <propertyname="username"value="root"></property> <!--连接数据库的密码--> <propertyname="password"value="root"></property> </bean> <!--配置JDBC模板--> <beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate"> <propertyname="dataSource"ref="dataSource"></property> </bean> <!--配置事务--> <beanid="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <propertyname="dataSource"ref="dataSource"></property> </bean> <!--注册事务注解驱动--> <tx:annotation-driventransaction-manager="txManager"></tx:annotation-driven> </beans>
<!—-><!—-><!—->
User
packagecom.my.pojo; publicclassUser{ privateintid; privateStringusername; privateStringpassword; publicUser(){ } publicUser(intid,Stringusername,Stringpassword){ this.id=id; this.username=username; this.password=password; } publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } @Override publicStringtoString(){ return"User{"+ "id="+id+ ",username='"+username+'''+ ",password='"+password+'''+ '}'; } }
UserDao
packagecom.my.dao; publicinterfaceUserDao{ publicvoidadd(); publicvoiddelete(); publicvoidupdate(); publicvoidquery(); }
UserDaoImpl
@Override publicvoidupdate(){ StringupdateSql="updateusersetusername=?,password=?whereid=?"; Objectparem3[]={"修改","654321",3}; jdbcTemplate.update(updateSql,parem3); System.out.println("UserDao中的修改功能实现了"); } @Override publicvoidquery(){ StringselectSql="select*fromuser"; RowMapper<User>rowMapper=newBeanPropertyRowMapper<User>(User.class); List<User>list=jdbcTemplate.query(selectSql,rowMapper,null); System.out.println("UserDao中的查询功能实现了"); for(Useruser:list){ System.out.println(user); } } }
测试Test3
packagecom.my.test; importcom.my.dao.UserDao; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.context.ApplicationContext; importorg.springframework.context.support.ClassPathXmlApplicationContext; publicclassTest3{ @Autowired privateUserDaouserDao; publicstaticvoidmain(String[]args){ ApplicationContextappCon=newClassPathXmlApplicationContext("spring-config.xml"); //从容器中获取目标对象 UserDaouserDao=(UserDao)appCon.getBean("userDao"); //userDao.add(); userDao.delete(); userDao.update(); userDao.query(); } }
测试结果
结束
对于Spring JbdcTemplate的讲解到此结束,对于新手来说没必要太复杂,能完成增删改查做个入门即可,等了解了再详细学习才有帮助,希望能对一些需要的朋友有用吧。