spring DAO模块支持jdbc

jdbc编程中,需要手动获取Connection、Statement、PreparedStatement、ResultSet、SQLException,使用完毕后还需要手动释放连接。
spring框架对jdbc进行了封装,使用自己的封装的JdbcTemplate进行数据库操作。下面是个简单的例子


Person.java定义Person类,代码:

package com.yeetrack.springDAO;

import java.util.Date;

public class Person
{

    private int id;
    private String name;
    private String sex;
    private int age;
    private Date birthday;
    public int getId()
    {
        return id;
    }
    public void setId(int id)
    {
        this.id = id;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
    public String getSex()
    {
        return sex;
    }
    public void setSex(String sex)
    {
        this.sex = sex;
    }
    public int getAge()
    {
        return age;
    }
    public void setAge(int age)
    {
        this.age = age;
    }
    public Date getBirthday()
    {
        return birthday;
    }
    public void setBirthday(Date birthday)
    {
        this.birthday = birthday;
    }

}

IPersonDAO.java DAO层接口,定义Person中的方法:

package com.yeetrack.springDAO;

import java.util.List;

/**
 * person类操作接口
 * @author youthflies
 *
 */
public interface IPersonDAO
{

    public String getPersonName(int id);   //根据id获取姓名
    public void addPerson(Person person);  //添加person
    public int getPersonCount();    //获取person数目
    public List<Person> listPerson();  //返回所有person
}

PersonDaoImpl.java PersonDaoImpl类实现了IPersonDAO接口,而且继承了Spring DAO模块中的JdbcDaoSupport类。JdbcDaoSupport提供JdbcTemplate对象,封装了常用的jdbc操作,我们使用JdbcTemplate即可。

package com.yeetrack.springDAO;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.support.JdbcDaoSupport;

public class PersonDaoImpl extends JdbcDaoSupport implements IPersonDAO
{

    /**
     * 初始化方法,创建数据库表结构
     */
    public void initDatabase()
    {
        String sql = "create table if not exists tb_person "
                + "(id int auto_increment, " + "name varchar(255), "
                + "sex varchar(10), age int , birthday timestamp, primary key(id) )";

        getJdbcTemplate().execute(sql);
    }

    /**
     * 根据id获取person名字
     */
    public String getPersonName(int id)
    {
        // TODO Auto-generated method stub
        String sql = "select name from tb_person where id = " + id;
        return (String) getJdbcTemplate().queryForObject(sql, String.class); 
    }

    /**
     * 向数据库中添加记录
     */
    public void addPerson(Person person)
    {
        // TODO Auto-generated method stub
        String sql = "insert into tb_person (name, sex, age, birthday ) values (?, ?, ?, ?)";

        getJdbcTemplate().update(sql, new Object[] { person.getName(), person.getSex(), person.getAge(), person.getBirthday()});

    }

    /**
     * 获取记录总条数
     */
    public int getPersonCount()
    {
        // TODO Auto-generated method stub
        String sql = "select count(*) from tb_person";
        return getJdbcTemplate().queryForInt(sql);
    }

    /**
     * 返回所有的Person
     * @return 返回Person List
     */
    public List<Person> listPerson()
    {
        // TODO Auto-generated method stub
        String sql = "select id, name, sex, age, birthday from tb_person";
        @SuppressWarnings("unchecked")
        List<Map<String, Object>> list =getJdbcTemplate().queryForList(sql);
        List<Person> personList = new ArrayList<Person>();

        for(Map<String, Object> row: list)
        {
            Person person = new Person();
            person.setId((Integer)row.get("id"));
            person.setName((String)row.get("name"));
            person.setSex((String)row.get("sex"));
            person.setAge((Integer)row.get("age"));
            person.setBirthday((Date)row.get("birthday"));

            personList.add(person);
        }

        return personList;
    }

}

applicationContext.xml配置,我们需要配置一个数据源,并把该数据源设置到PersonDaoImpl中,PersonDaoImpl中有个方法initDataBase(),用来生成表结构,需要配置到applicationContext.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="     
          http://www.springframework.org/schema/beans     
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd     
          http://www.springframework.org/schema/context     
          http://www.springframework.org/schema/context/spring-context-3.0.xsd 
          http://www.springframework.org/schema/aop     
          http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
    default-autowire="byName">

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties"></property>
    </bean>

    <bean id="personDao" class="com.yeetrack.springDAO.PersonDaoImpl" depends-on="dataSource" init-method="initDatabase">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

</beans>

数据库配置文件,jdbc.properties

#配置数据驱动
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=toor

下面是测试代码(需要有个test数据库),TestDAO.java

package com.yeetrack.springDAO;

import java.util.Date;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestDao
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        IPersonDAO personDao = (IPersonDAO) context.getBean("personDao");

        Person person =new Person();
        person.setName("youthflies");
        person.setAge(22);
        person.setSex("M");
        person.setBirthday(new Date());
        personDao.addPerson(person);

        System.out.println(personDao.getPersonName(1));

        System.out.println(personDao.getPersonCount());

        System.out.println(personDao.listPerson());

    }

}
版权声明

本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。

© 空空博客,本文链接:https://www.yeetrack.com/?p=9