本文介绍: 在实际开发中,针对一张表的复杂业务功能通常需要和表交互多次(比如转账)。如果每次针对表的简单操作我们都写一遍,代码中会出现大量的代码冗余。DAO模式目的就是将SQL语句转化为通用SQL语句,并封装成Java方法、提高代码复用性。② 一个通用的SQL封装成一个方法,方法名和对应sql关键词一致,且望文生义。将重复的SQL操作提炼至方法中,达到一条SQL操作多次复用的目的。③ 具体实现采用dao接口+impl实现类的形式(③ 接口命名:对应实体类名+Dao,例如表。编写一个关于Person表的DAO操作类。
概念:DAO(Data Access Object) 数据库访问对象,**面向数据库SQL操作
**的封装。
(一)场景
问题分析
在实际开发中,针对一张表的复杂业务功能通常需要和表交互多次(比如转账)。如果每次针对表的简单操作我们都写一遍,代码中会出现大量的代码冗余。
解决思路
将重复的SQL操作提炼至方法中,达到一条SQL操作多次复用的目的
(二)DAO编程
核心思想
DAO模式目的就是将SQL语句转化为通用SQL语句,并封装成Java方法、提高代码复用性。
编码规范:
-
① 一张表的操作对应一个DAO
-
② 一个通用的SQL封装成一个方法,方法名和对应sql关键词一致,且望文生义
操作 Java 数据库 新增 insertXxx(Xxx x) insert into … 删除 deleteXxxxxId(Integer id) delete from … 更新 updateXxx(Xxx x) update t_xxx set … 查询单个 Xxx selectXxxxxId(Integer id) select * from … 查询多个 List<Xxx> selectXxxs() select * from … -
③ 具体实现采用dao接口+impl实现类的形式(目的为提升代码扩展性和维护性)
-
① 接口中做方法声明的约束
-
②实现类中利用JDBCTemplate做具体实现
-
③ 接口命名:对应实体类名+Dao,例如表
t_person
,DAO命名为PersonDAO
-
④ 实现类名:接口名+Impl,如
PersonDAOImpl
-
⑤ 接口存放在
dao
包下 -
⑥ 实现类需要存放在
dao.impl
包下
-
示例
编写一个关于Person表的DAO操作类。
-
简化版
package com.xx.dao;
import com.xx.entity.Account;
import java.util.List;
/**
* t_account表的所有SQL操作
*/
public interface AccountDao {
/**
* 根据账户名查询账户信息
* @param accName 被查询的账户名
* @return 对应的账户对象
*/
Account selectAccountxxAccountName(String accName);
/**
* 根据账户名修改账户信息
* @param account 包含了被修改的账户名和修改后的余额 的对象
* @return 受影响的行数
*/
int updateAccountxxAccountName(Account account);
/**
* 新增账户信息
* @param account 包含所有信息的对象
* @return 受影响的行数
*/
int insertAccount(Account account);
/**
* 根据账户id删除账户信息
* @param id 被删除的id
* @return 受影响的行数
*/
int deleteAccountxxAccountId(int id);
/**
* 查询所有账户信息
* @return 账户对象的list集合
*/
List<Account> selectAccounts();
}
-
详细代码:结合JDBCUtils
package com.xx.dao.impl;
import com.xx.dao.AccountDao;
import com.xx.entity.Account;
import com.xx.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import javax.sql.DataSource;
import java.util.List;
public class AccountDaoImpl implements AccountDao {
@Override
public Account selectAccountxxAccountName(String accName) {
//获取JDBCTemplate
JdbcTemplate jdbcTemplate = JDBCUtils.getJDBCTemplate();
String sql1 = "select * from t_account where account_name=?";
//查询转出人信息
List<Account> list = jdbcTemplate.query(sql1, new BeanPropertyRowMapper<>(Account.class), accName);
//集合内容为空为返回null,内容不为空将对应对象获取返回
return list.isEmpty() ? null : list.get(0);
}
@Override
public int updateAccountxxAccountName(Account account) {
//获取JDBCTemplate
JdbcTemplate jdbcTemplate = JDBCUtils.getJDBCTemplate();
String sql = "update t_account set balance=? where account_name=?";
//执行sql
int n = jdbcTemplate.update(sql, account.getBalance(), account.getAccountName());
return n;
}
@Override
public int insertAccount(Account account) {
//获取JDBCTemplate
JdbcTemplate jdbcTemplate = JDBCUtils.getJDBCTemplate();
//书写sql
String sql = "insert into t_account(account_name,account_password,balance) values(?,?,?)";
//执行sql
int n = jdbcTemplate.update(sql, account.getAccountName(), account.getAccountPassword(), account.getBalance());
return n;
}
@Override
public int deleteAccountxxAccountId(int id) {
//获取JDBCTemplate
JdbcTemplate jdbcTemplate = JDBCUtils.getJDBCTemplate();
String sql = "delete from t_account where account_id=?";
//执行sql
return jdbcTemplate.update(sql, id);
}
@Override
public List<Account> selectAccounts() {
//获取JDBCTemplate
JdbcTemplate jdbcTemplate = JDBCUtils.getJDBCTemplate();
String sql = "select * from t_account";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Account.class));
}
}
原文地址:https://blog.csdn.net/zhzjn/article/details/136000489
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_65463.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。