重庆直播网站平台建设,防做网站视频,第三方网站备案,备案域名卖出后涉赌怎么办概念#xff1a;DAO(Data Access Object) 数据库访问对象#xff0c;**面向数据库SQL操作**的封装。
#xff08;一#xff09;场景
问题分析
在实际开发中#xff0c;针对一张表的复杂业务功能通常需要和表交互多次#xff08;比如转账#xff09;。如果每次针对表的…概念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 ...查询多个ListXxx selectXxxs()select * from ... ③ 具体实现采用dao接口impl实现类的形式目的为提升代码扩展性和维护性 ① 接口中做方法声明的约束 ②实现类中利用JDBCTemplate做具体实现 ③ 接口命名对应实体类名Dao例如表t_personDAO命名为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集合*/ListAccount 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 {Overridepublic Account selectAccountxxAccountName(String accName) {//获取JDBCTemplateJdbcTemplate jdbcTemplate JDBCUtils.getJDBCTemplate();String sql1 select * from t_account where account_name?;//查询转出人信息ListAccount list jdbcTemplate.query(sql1, new BeanPropertyRowMapper(Account.class), accName);//集合内容为空为返回null内容不为空将对应对象获取返回return list.isEmpty() ? null : list.get(0);}
Overridepublic int updateAccountxxAccountName(Account account) {//获取JDBCTemplateJdbcTemplate jdbcTemplate JDBCUtils.getJDBCTemplate();
String sql update t_account set balance? where account_name?;//执行sqlint n jdbcTemplate.update(sql, account.getBalance(), account.getAccountName());return n;}
Overridepublic int insertAccount(Account account) {//获取JDBCTemplateJdbcTemplate jdbcTemplate JDBCUtils.getJDBCTemplate();//书写sqlString sql insert into t_account(account_name,account_password,balance) values(?,?,?);//执行sqlint n jdbcTemplate.update(sql, account.getAccountName(), account.getAccountPassword(), account.getBalance());return n;}
Overridepublic int deleteAccountxxAccountId(int id) {//获取JDBCTemplateJdbcTemplate jdbcTemplate JDBCUtils.getJDBCTemplate();
String sql delete from t_account where account_id?;//执行sqlreturn jdbcTemplate.update(sql, id);}
Overridepublic ListAccount selectAccounts() {//获取JDBCTemplateJdbcTemplate jdbcTemplate JDBCUtils.getJDBCTemplate();
String sql select * from t_account;return jdbcTemplate.query(sql, new BeanPropertyRowMapper(Account.class));
}
}