以下列方式命名DAO是否典型:
UserDAO - interface
UserDAOImpl - implements UserDAO
Run Code Online (Sandbox Code Playgroud)
我想知道它的标准是使用后缀'Impl'来实现,还是更有意义的东西是最佳实践.谢谢.
以下是我目前在抽象DAO类中使用的方法.如果有并发呼叫,它们是安全的还是应该同步使用?我知道如果存在对方法范围之外的属性的引用,则应该使用同步,但是我不清楚如何使用外部资源来处理事情.
public Connection getConnection() {
// Call to singleton handling JDBC stuff
return Database.getInstance().getCon();
}
public boolean isConnectionAvailable(){
if( getConnection() != null ){
return true;
}
return false;
}
public PreparedStatement getPreparedStatement( String sqlStatement ){
Connection connection = getConnection();
PreparedStatement pS = null;
if( connection != null ){
try {
pS = connection.prepareStatement( sqlStatement );
} catch (SQLException e) {
return null;
}
}
return pS;
}
Run Code Online (Sandbox Code Playgroud)
编辑:我可能会重新编写这个问题,以包含有关编写DAO的信息,因为它在这里很重要.
我喜欢为我的hibernate dao实现编写JUnits,并就编写这些单元测试用例的建议方法征求意见.我可以想到两个策略.
使用像EasyMock这样的库来模拟hibernate模板,并针对这些模拟对象测试DAO实现.(并不是真的令人满意,因为我将针对模拟层进行测试而不是真正针对测试数据)
在运行我的单元测试之前,通过编写一些测试数据来测试真实的测试数据库(内存/外部).
哪种方法是确保我们的DAO得到适当测试的好方法.请指出使用第二种方法配置测试的任何示例.我试着环顾四周,但没找到合适的.
谢谢,西瓦.
我正在Hibernatedaosupport为我的DAO课程使用Spring MVC .在这里混淆在哪里开始交易,是否应该在服务层或DAO层?
我的视图与服务层交互.DAO被注入服务.
在DAO服务层架构中使用Spring MVC和Hibernate的正确方法是什么?
我有一个名为的表datas,我正在执行这样的查询:
SELECT linkurl AS DOWNLOADURL,
lastrevlevel AS VERSION,
code AS DESCRIPTION,
created AS RELEASEDATE,
name AS TYPE
FROM datas
WHERE id IN (SELECT child_id
FROM datas _datas
WHERE parent_id = (SELECT Max(id)
FROM datas
WHERE code = 'AN4307SW'))
Run Code Online (Sandbox Code Playgroud)
它返回如下结果:
DOWNLOADURL VERSION DESCRIPTION RELEASEDATE TYPE
/artifacts/download.txt 2.0 images 25/6/12 download.txt
Run Code Online (Sandbox Code Playgroud)
在Type列中,我正在确定文件的名称.我需要在列中获取文件名的文件扩展名Type.我怎样才能做到这一点?
例子:
TYPE
.txt
.pdf
.xls
Run Code Online (Sandbox Code Playgroud) 我是Java的新手,我正在尝试使用servlet创建一个Web项目.我想查询我的数据库,但我想我不了解JPA和DAO的一切.
我被教导过这样做:
public List<User> findAll()我听说没有必要用JPA创建一个DAO接口,但我完全迷失了,我根本不了解我应该做什么或者EJB是什么.我只是想找到我的数据库中的所有用户,并按照Java的良好实践显示他们的名字.
对于我的servlet和JSP来说已经足够了.
你会推荐什么 ?
我正在实施一个基于Web服务的大学管理系统.该系统将某些课程添加到数据库中.下面是我正在使用的代码.
Course.java
public class Course {
private String courseName;
private String location;
private String courseId;
public String getCourseId()
{
return courseId;
}
public void setCourseId(String courseId) {
this.courseId = courseId;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}
Run Code Online (Sandbox Code Playgroud)
然后另一个文件如下
CourseDaoImpl.java
public class CourseDaoImpl implements IDao {
Connection conn = null;
Statement stmt = null; …Run Code Online (Sandbox Code Playgroud) 我想知道我在这里做错了什么来验证用户.我有一个应用程序,用户通过几个步骤来激活他们的帐户,这样做我想绕过登录表单并将它们直接带到他们的仪表板.
这是我的自动登录功能:
protected void automatedLogin(String username, String password, HttpServletRequest request) {
try {
// Must be called from request filtered by Spring Security, otherwise SecurityContextHolder is not updated
CustomUserDetailsService udService = new CustomUserDetailsService(userDAO, request);
UserDetails uDetails = udService.loadUserByUsername(username);
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(uDetails, password);
token.setDetails(new WebAuthenticationDetails(request));
DaoAuthenticationProvider authenticator = new DaoAuthenticationProvider();
Authentication authentication = authenticator.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(authentication);
} catch (Exception e) {
e.printStackTrace();
SecurityContextHolder.getContext().setAuthentication(null);
}
}
Run Code Online (Sandbox Code Playgroud)
我必须使用DaoAuthenticationProvider类作为我的身份验证提供程序.我已经验证我正在获取包含正确凭据,ID,权限角色等的UserDetails模型.
当它调用authenticate方法时,我会在DaoAuthenticationProvider类中的某个地方遇到Null Pointer:
org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:109)org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate上的org.springframework.security.authentication.AuthenticationServiceException(AbstractUserDetailsAuthenticationProvider.java:132 )在com.bosch.actions.BaseController.doAutoLogin(BaseController.java:659)...引起:org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:101)中的java.lang.NullPointerException
我真的不确定什么是null,因为我没有可用的源代码.
通过在对象上显式设置UserDetailsService,我能够绕过Null指针:
authenticator.setUserDetailsService(udService);
Run Code Online (Sandbox Code Playgroud)
但是,当我知道提供的密码是正确的时,我得到了错误的凭证异常,因为我已经在代码中早先的UserDetails对象中的调试器中看到了它.
org.springframework.security.authentication.BadCredentialsException:org.springframework.security.authentication.dao.DaoAuthenticationProvider.additionalAuthenticationChecks(DaoAuthenticationProvider.java:87)中的错误凭据,位于org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider. Java的:149)
这是源代码,我需要检测ID(请参阅下面两个查询之间的标记位置).
$connection = Yii::app()->db;
$transaction=$connection->beginTransaction();
try {
$q = "INSERT INTO `someTable1` .... ";
$connection->createCommand($q)->execute(); // Single Row Inserted
// HERE!! How to get the last insert ID from query above
$q = "INSERT INTO `someTable2` ....
WHERE id = LAST_INSERT_ID_FROM_FIRST_QUERY ";
$connection->createCommand($q)->execute();
$transaction->commit();
} catch (Exception $e) {
// react on exception
$trans->rollback();
}
Run Code Online (Sandbox Code Playgroud)
最合适的方法是什么?
我有用户和角色实体和服务,DAO层.我需要来自UserService的角色列表.
我应该从UserService使用哪一层?RoleService与RoleDAO的调用列表方法?哪一个是常用的,为什么?
dao ×10
java ×6
spring ×4
hibernate ×3
junit ×2
architecture ×1
ejb ×1
jdbc ×1
jpa ×1
lastinsertid ×1
layer ×1
mysql ×1
php ×1
spring-mvc ×1
sql ×1
subquery ×1
testcase ×1
transactions ×1
unit-testing ×1
web-services ×1
yii ×1