系统学习Spring之Spring in action(九)
每日一叨:
我在写完依赖注入和面向切面编程后,后面的Spring知识点,我都不知道该怎么去写,后面的知识很多理论性的东西,其实写出来只要一个Demo
就可以完成,我不知道是不是仍然还是用Demo来支撑博文,推荐大家多去读书,因为我以后只会放我的博文中写出最简单的Demo.
文章导读:
1.用Spring的Template来操作数据库
知识点:
相信你们都会用JDBC去连接和操作数据库,JDBC操作数据的时候需要获取一个Connection,获取Connection的函数需要你自己去写一个工具类去
实现数据库的连接,Spring对最基本的JDBC提供了最基本的封装,可以用Template来代替重复的数据库连接代码.下面来看在Spring下如何用Template
实现对数据库最简单的增删改查操作.
1.用Spring的Template来操作数据库
在用Template写Demo之前,首先要准备数据库连接的Jar包,在这个例子中,我使用Mysql来做测试,mysql-connector-java-版本号.jar
在最低层的JDBC中,每次操作都会得到Connection,操作完了以后还要释放Connection,这样经常的建立和释放Connection会极大程序上减低系统的
性能,所以使用Jakata的dpcp数据库连接池用来Connection的得用,避免了建立和释放Connection造成成的系统开销.
用Dpcp的时,需要两个Jar包,分别是commons-dbcp-版本号.jar,commons-pool-版本号.jar Spring的Jar在这里不在多说了.
在Spring Confiuration配置文件中配置数据库资源如下:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/studyspring"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> </bean>
这是mysql的数据库资源,studyspring,是我新创建的数据库:
create database studyspring;
先在studyspring数据库中建立一个用户表,方便后面测试使用:
create table t_user(id varchar(40) primary key,username varchar(50),password varchar(50));
通过数据库资源在Spring Configuration中配置Spring Template.
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate"> <constructor-arg ref="dataSource"/> </bean>
建立Dao层的interface:
public interface SimpleDao { //新增用户信息 int addUser(Map<String,String> map); //删除用户信息 int deleteUser(Map<String,String> map); //更新用户信息 int updateUser(Map<String,String> map); //查询用户信息 List<Map<String,Object>> queryUser(); }
Dao层的实现:
@Component("simpleDao") public class SimpleDaoImpl implements SimpleDao { @Autowired private SimpleJdbcTemplate jdbcTemplate; @SuppressWarnings("deprecation") @Override public int addUser(Map<String, String> map) { // TODO Auto-generated method stub return jdbcTemplate.update("insert into t_user values(?,?,?)",map.get("id"),map.get("username"),map.get("password")); } @SuppressWarnings("deprecation") @Override public int deleteUser(Map<String, String> map) { // TODO Auto-generated method stub return jdbcTemplate.update("delete from t_user where id=?", map.get("id")); } @SuppressWarnings("deprecation") @Override public int updateUser(Map<String, String> map) { // TODO Auto-generated method stub return jdbcTemplate.update("update t_user set password=? where id=?", map.get("password"),map.get("id")); } @SuppressWarnings("deprecation") @Override public List<Map<String, Object>> queryUser() { // TODO Auto-generated method stub Map<String,String> map = new HashMap<String,String>(); return jdbcTemplate.queryForList("select * from t_user", map); } }
相信对于@component和@autowired注解应该都不陌生了,在这里就不多讲了.记得在用注解和自动发现的时候在配置文件中加上:
<context:component-scan base-package="com.ricky.zero"> </context:component-scan>
com.ricky.zero是你要搜索的包名
下面进行测试:
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml"); SimpleDao s = (SimpleDao)ctx.getBean("simpleDao"); Map<String,String> p = new HashMap<String,String>(); p.put("id", "1"); p.put("username", "test1"); p.put("password", "test1"); s.addUser(p);
先添加一个test1用户,在添加一个test2用户方便测试
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml"); SimpleDao s = (SimpleDao)ctx.getBean("simpleDao"); Map<String,String> p = new HashMap<String,String>(); p.put("id", "1"); p.put("username", "test2"); p.put("password", "test2"); s.addUser(p);
如果执行成功的话,相信你的数据库中有两条数据了.
添加操作完成后,测试查询:
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml"); SimpleDao s = (SimpleDao)ctx.getBean("simpleDao"); List<Map<String,Object>> list = s.queryUser(); System.out.println(list.toString());
结果是:
[{id=1, username=test1, password=test1}, {id=2, username=test2, password=test2}]
查询后测试修改:
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml"); SimpleDao s = (SimpleDao)ctx.getBean("simpleDao"); Map<String,String> p = new HashMap<String,String>(); p.put("id", "1"); p.put("password", "test"); s.updateUser(p);
id为1的数据的密码由原来的test1修改成功为test
测试删除:
ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml"); SimpleDao s = (SimpleDao)ctx.getBean("simpleDao"); Map<String,String> p = new HashMap<String,String>(); p.put("id", "1"); s.deleteUser(p);
数据库中id为1的数据已经不存在了,说明删除成功.
基于Spring Template的增删改查Demo到这里就完成了.
--------------------------------申明----------------------------
本文可以免费阅读以及转载,转载时请注明出处.
本人邮箱:Ricky_LS@163.com
Thank you for your corporation.