MySQL_JDBC_DAO复习

本文介绍了一个典型的Java分层架构案例,包括View层、Service层、DAO层等,并详细展示了DAO层的设计与实现过程,特别是如何通过BasicDao类进行数据库操作。

 

view层

service层

dao层

bean实体类层

sql层

 

dao层属于处理sql语句的java类层次,通过处理sql语句实现ORM思想,数据库表字段到java实体类中的映射(此处小白自述,往不错误之处请大家见谅,还请大家能批评指正)

 

 

一、数据库层面

创建account数据表

                                                             

 

二、java层面

Account实体类

package bean;

public class Account {

	private int id;
	private String username;
	private double balance;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public double getBalance() {
		return balance;
	}

	public void setBalance(double balance) {
		this.balance = balance;
	}

	public Account(int id, String username, double balance) {
		super();
		this.id = id;
		this.username = username;
		this.balance = balance;
	}

	public Account() {
		super();
	}

	@Override
	public String toString() {
		return "Account [id=" + id + ", username=" + username + ", balance=" + balance + "]";
	}

}

  BasicDao

package dao;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import utils.JDBCUtils;

/**
 * 封装一个通用的BasicDao
 * 
 * @author Administrator
 * 功能:
 * 1、增删改(所有的表都通用)
 * 2、获取单条记录(所有的表都通用)
 * 3、获取多条记录(所有的表都通用)
 * 4、获取单个值(所有的表都通用)
 */
public class BasicDao<T> {

	QueryRunner qr;
	{
		qr = new QueryRunner();
	}
	
	//增删改
	public int update(String sql,Object ... objects){
		Connection connection = null;
		try {
			connection = JDBCUtils.getConnection();
			return qr.update(connection, sql, objects);
		} catch (Exception e) {
			throw new RuntimeException();
		} finally{
			JDBCUtils.close(null, null, connection);
		}
	}
	
	//查询返回单条记录
	public T SearchOne(String sql,Class clazz,Object ... objects){
		Connection connection = null;
		try {
			connection = JDBCUtils.getConnection();
			return qr.query(connection, sql, new BeanHandler<T>(clazz), objects);
		} catch (Exception e) {
			throw new RuntimeException();
		} finally{
			JDBCUtils.close(null, null, connection);
		}
	}
	
	//查询返回多条记录
	public List<T> SearchMore(String sql,Class clazz,Object ... objects){
		Connection connection = null;
		try {
			connection = JDBCUtils.getConnection();
			return qr.query(connection, sql, new BeanListHandler<T>(clazz), objects);
		} catch (Exception e) {
			throw new RuntimeException();
		} finally{
			JDBCUtils.close(null, null, connection);
		}
	}
	
	//查询返回单值
	public Object Scalar(String sql,Class clazz,Object ... objects){
		Connection connection = null;
		try {
			connection = JDBCUtils.getConnection();
			return qr.query(connection, sql, new ScalarHandler(), objects);
		} catch (Exception e) {
			throw new RuntimeException();
		} finally{
			JDBCUtils.close(null, null, connection);
		}
	}
}

 AccountDao

package dao;

import bean.Account;

public class AccountDao extends BasicDao<Account>{

}

 

 TestAccountDao

package demo.connection4;

import java.util.List;

import org.junit.Test;

import bean.Account;
import dao.AccountDao;

public class TestAccountDao {
	
	@Test
	public void test1(){
		AccountDao dao = new AccountDao();
		List<Account> accounts = dao.SearchMore("select * from account", Account.class);
		for (Account account : accounts) {
			System.out.println(account);
		}
	}
}

 

 TestAccountDao运行结果

 

 

 

 

### SSH框架整合实践复习 #### 一、环境搭建与依赖引入 为了实现SSH(Struts2 + Spring + Hibernate)框架的整合,需先构建开发环境并导入必要的库文件。通常情况下,在Maven项目中通过`pom.xml`管理依赖项可以简化这一过程[^1]。 ```xml <dependencies> <!-- Struts2 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts.version}</version> </dependency> <!-- Spring Framework --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- Hibernate Core --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> <!-- Other necessary dependencies... --> </dependencies> ``` #### 二、配置文件设置 ##### (一)Hibernate核心配置文件中的数据库连接参数调整 在`hibernate.cfg.xml`内定义好相应的JDBC属性以及映射资源路径等信息,并确保这些设定同样被Spring所知晓以便于统一管理和事务控制[^3]。 ```xml <!-- hibernate.cfg.xml --> <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/testdb</property> <property name="connection.username">root</property> <property name="connection.password"></property> <!-- JDBC Connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <!-- Mapping files or annotated classes can be listed here --> <mapping resource="User.hbm.xml"/> </session-factory> </hibernate-configuration> ``` ##### (二)Spring上下文配置 创建`applicationContext.xml`来声明Bean实例化逻辑和服务层组件扫描规则;同时在此处注入持久层对象给业务处理单元使用[^2]。 ```xml <!-- applicationContext.xml --> <context:component-scan base-package="com.example.service, com.example.dao"/> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.user}" /> <property name="password" value="${jdbc.pass}" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="packagesToScan" value="com.example.entity" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.show_sql">${hibernate.showSql}</prop> <prop key="hibernate.format_sql">${hibernate.formatSql}</prop> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddlAuto}</prop> </props> </property> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> ``` ##### (三)Struts2配置解析 编写`struts.xml`用于描述请求转发链路,特别是当涉及到Action类时应指明其对应的Spring Bean ID而非具体实现类名称,从而达到解耦目的[^4]。 ```xml <!-- struts.xml --> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.devMode" value="false" /> <package name="default" namespace="/" extends="struts-default"> <action name="save" class="userAction"> <result name="success">/WEB-INF/jsp/success.jsp</result> </action> </package> </struts> ``` #### 三、代码层面集成要点说明 针对上述提到的各种技术栈之间的协作关系,下面给出几个关键点: * **DAO接口设计**:采用面向接口编程的思想,让具体的CRUD操作封装在一个抽象层次之上; * **Service层职责划分**:负责协调多个DAO间的交互流程,并对外提供稳定的数据访问API; * **Controller端口暴露**:即Action部分,它接收前端传来的HTTP POST/GET指令后转交给后台的服务处理器执行实际的任务。 最后提醒一点就是要注意版本兼容性和安全性方面的问题,比如防止SQL注入攻击等措施也应当纳入考虑范围之内。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值