码迷,mamicode.com
首页 > 编程语言 > 详细

spring-DAO-06

时间:2020-12-18 12:09:48      阅读:2      评论:0      收藏:0      [点我收藏+]

标签:context   ase   细节   持久性   jdb   override   通过   nal   ide   

spring-DAO

DAO 模式


DAO(Data Access Object数据访问对象)

  • 是用于访问数据的对象。
  • 提供读写数据库中数据的一种方法。
  • 通过接口提供对外服务,程序的其它模块通过这些接口来访问数据库 。

优点

  • 将持久性相关问题与一般业务规则隔离开来,为定义业务层可以访问的持久性操作引入一个接口,并隐藏实现的具体细节。
  • 接口功能会随持久化技术的不同而改变,但DAO接口基本不变。
  • 可在不需要连接数据库的情况下进行测试。

DAO属于O/R Mapping技术的一种实现。


Spring DAO


Spring DAO 提供了一套抽象的DAO类,这有利于以统一的方式操作各种DAO技术,如:JDO、JDBC等。

spring dao 提供的抽象类:

  • JdbcDaoSupport:JDBC DAO抽象类。
    • 开发者需要为它设置数据源(DataSource),通过子类,开发者能够获得JdbcTemplate来访问数据库。
  • HibernateDaoSupport:Hibernate DAO抽象类。
    • 开发者需要为它配置Hibernate SessionFactory。通过其子类,开发者能够获得Hibernate实现。
  • JdoDaoSupport:JDO DAO抽象类.
    • 开发者需要为它配置PersistenceManagerFactory,通过其子类,开发者能够获得JdoTemplate。

spring dao持久化流程


  1. 在applicationContext.xml中,配置数据源,并注入连接参数。

    使用类org.springframework.jdbc.datasource.DriverManagerDataSource,

  2. 将数据源注入数据库操作DAO类

  3. 创建接口

  4. 定义实体类对象

  5. 编写接口实现、数据库操作DAO类

  6. 加载applicationContext.xml


step1:在applicationContext.xml中,配置数据源,注入连接参数

<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    
	<!-- 配置数据源 -->
	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
		<property name="url" value="jdbc:mysql:///db_database_spring"/>
		<property name="username" value="root"/>
		<property name="password" value=""/>
	</bean>
</beans>

step2:将数据源注入数据库操作DAO类

<!-- UserDAO注入数据源,dataSource获取数据库的连接等 -->
<bean id="userDAO" class="springdao.UserDAO">
    <property name="dataSource">
        <ref local="dataSource"/>
    </property>
</bean>

step3:创建接口

package springdao;

public interface UserDAOImpl {
	//向数据表tb_user中添加数据
	public abstract void inserUser(User user);
}

step4:定义实体类对象

package springdao;

public class User {
    private Integer id;//唯一性标识
    private String name;
    private String password;
    private Integer age;
    private String sex;

	public Integer getId() {return id;}
	public void setId(Integer id) {this.id = id;}
	public String getName() {return name;}
	public void setName(String name) {this.name = name;}
	public String getPassword() {return password;}
	public void setPassword(String password) {this.password = password;}
	public Integer getAge() {return age;}
	public void setAge(Integer age) {this.age = age;}
	public String getSex() {return sex;}
	public void setSex(String sex) {this.sex = sex;}
}

step5:编写接口实现、数据库操作DAO类

package springdao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.sql.DataSource;

public class UserDAO implements UserDAOImpl {
    private DataSource dataSource;//注入DataSource
    public DataSource getDataSource() {
        return dataSource;
    }
    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }
    
    //向数据表tb_user中添加数据
    @Override
	public void inserUser(User user) {
        String name = user.getName();//获取姓名
        Integer age = user.getAge();//获取年龄
        String sex = user.getSex();//获取性别
        Connection conn = null;//定义Connection
        PreparedStatement ps = null;//定义Statement   
         try {
             conn = dataSource.getConnection();//获取数据库连接
             String sql="INSERT INTO tb_user(name,age,sex) VALUES(?,?,?)";
             ps = conn.prepareStatement(sql);
             ps.setString(1,name);
             ps.setInt(2, age);
             ps.setString(3,sex);
             ps.execute();//添加数据的SQL语句
         } catch (SQLException e) {
             e.printStackTrace();
         }
         finally {
             if(ps != null) {
                 try {
                     ps.close();//关闭Statement对象
                 }   
                 catch(SQLException e) {
                     e.printStackTrace();
                 }
             }
             if(conn != null) {
                 try {
                     conn.close();//关闭数据库连接
                 }
                 catch(SQLException e) {
                     e.printStackTrace();
                 }
             }
         }
    }
}

step6:加载applicationContext.xml

package example5;

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

public class Manager {

	public static void main(String[] args) {
        //装载配置文件
        ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = new User();//实例化User对象
        user.setName("springdao");//设置姓名
        user.setAge(new Integer(15));//设置年龄
        user.setPassword("123456");
        user.setSex("男");//设置性别
        UserDAO userDAO = (UserDAO) factory.getBean("userDAO");//获取UserDAO
        userDAO.inserUser(user);//执行添加方法
        System.out.println("数据添加成功!!!");
    }
}

spring-DAO-06

标签:context   ase   细节   持久性   jdb   override   通过   nal   ide   

原文地址:https://www.cnblogs.com/2020-6-12/p/14126839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!