这更像是一个正确性问题.假设我的数据库中有一个包含主键列的表.在我的DAO代码中,我有一个名为insertRow(string key)的函数,如果表中不存在该键并且使用该键插入一个新行,则该函数将返回true.否则,如果该键已经存在,则返回false.让insertRow首先检查密钥是否存在更好/更糟或只是继续执行插入并捕获重复密钥错误?或者在单个选择语句中保存太微不足道的优化甚至令人担心?
所以在sudo代码中:
boolean insertRow(String key){
//potentially a select + insert
if(select count(*) from mytable where key = "somekey" == 0){
insert into mytable values("somekey")
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
要么
boolean insertRow(String key){
try{
//always just 1 insert
insert into mytable values("somekey")
return true;
} catch (DuplicateKeyException ex){}
return false;
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个需要编辑Access数据库中某些对象的程序.它还运行一个子程序(长篇故事),试图访问底层的JET数据库,而Access仍然通过ODBC 打开它.
问题是,一旦我开始使用VBA编辑Form对象 - 例如,使用Application.LoadFromText - Access将数据库更改为独占模式.独家模式本身很好,我知道它为什么需要它.但我之后需要能够切换回"共享"模式,以便我可以运行我的子程序.
我观察到,如果您使用UI在设计模式下打开表单,Access会将数据库切换到Exclusive.(您可以通过尝试从另一台计算机打开它来确认这一点.)但是当您关闭表单设计器时,Access会立即将其切换回共享模式,这是我希望的.
有没有办法使用VBA/COM调用自己来回切换?
我知道我可以调用Application.CloseCurrentDatabase(),然后调用OpenCurrentDatabase(),但这会关闭所有窗口并扰乱UI,因此它并不理想.
我写的房地产网站具有选择和订购房地产的基本功能.
这是一个小型/简单的项目,但我想以方式编写,所以将来我或其他开发人员可以将其转换为中型企业应用程序而无需从头开始重写.
那么你可以建议我用什么样的模式来处理数据库?
现在我有这个:
class db_DBConnection
{
// basic singleton pattern here...
}
// primary class to be extende by other table DAOs
abstract class db_Table
{
protected $table;
protected $order_by;
/**
* Executes specified query with prepared statements
* returns statement object, which can fetch data.
*
* @param $sql - SQL query to execute
* @param $params - bind values to markers through associative arrays
*/
protected function executeQuery($sql, $params = null)
{
$dbh = db_DBConnection::getConnection();
$stmt = …Run Code Online (Sandbox Code Playgroud) 我试图谷歌答案,但我仍然对他们的关系感到困惑.我推测Hibernate是一种DAO.我在维基百科看了DAO, DAO
但发现那里没有与hibernate相关的东西.那两者之间的关系到底是什么?一些例子会很棒!
是否可以将DAO和网关多次调用,但只需要在应用程序范围内实例化一次?
谢谢
@Entity
@Table(name="dt_user" , uniqueConstraints = {@UniqueConstraint(columnNames="user_no"), @UniqueConstraint(columnNames="account")}
)
public class User implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = -8149578944942492965L;
// Fields
private long id;
private String userNo;
private Set<UserRelative> userRelatives = new HashSet<UserRelative>(0);
// Constructors
/** default constructor */
public User() {
}
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="user")
public Set<UserRelative> getUserRelatives() {
return this.userRelatives;
}
}
Run Code Online (Sandbox Code Playgroud)
上面是用户实体;下面是另一个UserRelative实体:当想要getUserRelatives()时,问题就出现了.
@Entity
@Table(name="dt_user_relative")
public class UserRelative implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 5035928604641787267L;
// Fields …Run Code Online (Sandbox Code Playgroud) 我读了这个代码审查的问题在这里通过BalusC和教程.在那里我发现异常类被扩展.
有什么需要呢?我读了一些东西,client layer should not know SQLExecption但我不确定我理解它.
你能说出为什么要做专门的例外吗?如果我的DAO方法没有throws并且客户端代码在try-catch.?中怎么办?
在Spring MVC项目中,我有一个DAO类myproj.models.UserDAO:
@Repository
@Transactional
public class UserDAO {
// UserDAO methods ...
}
Run Code Online (Sandbox Code Playgroud)
我应该在控制器内使用它,说myproj.controllers.UserController:
@Controller
public class UserController {
// UserController methods ...
@RequestMapping(value="/{user}")
public String create(String user) {
// Here I want to use the UserDAO
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
如何创建UserDAO对象的实例并在控制器方法中使用它?
关于存储库,它们在stackoverflow和整个Web上的使用和布局存在争议性的讨论.我对如何有效地实现存储库后面的数据访问抽象(例如数据库)感到困惑.
我没有使用ORM工具/框架,因为我想亲眼看到细节.目前我正在使用DAO对象访问(mysql)数据库并提供Business Objects(域对象).由数据库表中的外键给出的关联被解析并加载到相应对象的DAO中(当前没有延迟加载).由于我不想直接在业务逻辑中使用我的数据库DAO,因此我认为存储库是一个很好的进一步抽象.当我在Repository中实现像GetEmployeesByShopAndPosition()这样的复杂查询时,我遇到了困难:我看到了实现这个的两种可能性:
第一种方法使用了存储库实际应具有的集合性质,但似乎效率非常低.第二种方法生成一个膨胀的DAO,但效率更高.
我的问题:
我知道这个主题不是黑/白,因为所涉及的设计模式也可以以不同的方式实现,但我想有一些指导方针不应该被打破或混淆以分离关注点和持久性无知(PI).
我正在开发javaSE中的小应用程序,只是为了让我的技能更好.所以我有业务服务(BS进一步),其中一些方法就像registerUser(用户用户),addAmount(长accountId).BS使用dao.假设从WS或其他接口元素调用BS.我有以下DAO:
public interface UserDao {
User getUserByUsername(String username);
void saveUser(User user);
}
public interface AccountDao {
void saveAccount(Account account);
Account getAccountByUserId(Long userId);
}
Run Code Online (Sandbox Code Playgroud)
我的BS看起来像
public class FastAccountServiceImpl implements FastAccountService{
private UserDao userDao;
private AccountDao accountDao;
public void registerUser(User user, Account account) throws Exception {
if (user.getUsername() == null || user.getUsername().isEmpty()) {
throw new Exception("all params are mandatory");
}
if (userDao.getUserByUsername(user.getUsername()) != null) {
throw new Exception("This user exists");
}
userDao.saveUser(user);
accountDao.saveAccount(account);
}
public void withdrawAmount(Double amount, Long userId) throws Exception …Run Code Online (Sandbox Code Playgroud) dao ×10
java ×4
hibernate ×2
spring ×2
access-vba ×1
api ×1
coldfusion ×1
database ×1
exception ×1
gateway ×1
ms-access ×1
mysql ×1
orm ×1
php ×1
scope ×1
spring-boot ×1
spring-mvc ×1
vba ×1