系统学习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-版本号.jarcommons-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.

 

 

 

posted @ 2013-04-02 23:50  养家糊口  阅读(386)  评论(0编辑  收藏  举报