Android GreenDao 无法生成xxxDao

作者在使用Kotlin结合GreenDAO进行数据库操作时遇到实体类无法生成的问题,发现GreenDAO暂时不支持Kotlin实体类,最终选择用Java实体类解决。

最近清闲下来,准备写个小demo。在demo里面学习点平时工作接触不到的内容。 
项目中用的greendao作为数据库框架。数据库操作不是学习的重点啦。demo久继续沿用greendao。 
demo 采用koltin编写。按照配置greendao的方法配置好后。然后编译,奇怪的事情发生了。DaoMaster DaoSession无法生成。 why????? 
满头问号!!第一反应去百度。结果没搜出可行的解决方案。然后开始翻阅greendao源码。绕来绕去也没发现可行的方案。 
最后去greendao招解决方案。 
结果发现一句话。 
 
只支持java 的实体类。 
日哦~~koltin写实体类的不支持。 
解决方案就出了!放弃koltin写greendao实体类。 
ennnnn~ 希望greendao开发团队早日做兼容吧
--------------------- 
版权声明:本文为优快云博主「亿万少女的梦」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq1221jyj/article/details/78406106

<think>好的,我现在需要帮助用户理解Java DAO类的设计示例。根据用户的问题,他们想知道xxxdao.java应该定义为什么类,可能是在询问DAO模式的实现。首先,我需要回忆DAO模式的基本概念和结构,确保自己理解正确。 DAO模式主要分为三层:数据访问层(DAO)、业务逻辑层(Service)和示层(如Servlet或Controller)。DAO层的核心是封装对数据的访问,比如数据库操作,使得业务逻辑层不需要关心数据的具体存取细节。因此,xxxdao.java应该是一个接口,定义数据操作的方法,然后由具体的实现类(如xxxDaoImpl.java)来实现这些方法。这样设计的好处是符合面向接口编程的原则,提高代码的可维护性和可扩展性。 接下来,我需要参考用户提供的引用内容。引用[2]中提到DAO分层设计,包括Dao包、Impl包以及具体的UserDao和CourseDao示例。引用[3]中的代码示例展示了Servlet如何调用Service层,而Service层再调用DAO层。这些引用支持了DAO模式的分层结构和接口与实现类的分离。 用户可能需要一个具体的代码示例来说明如何设计DAO类。例如,定义一个UserDao接口,包含增删改查的方法,然后创建UserDaoImpl类实现这个接口,并使用数据库连接工具类来执行SQL。同时,应该提到使用工厂模式或依赖注入来解耦接口和实现,但根据引用中的例子,可能不需要涉及复杂的设计模式,保持示例简单明了。 需要确保代码示例正确,比如在UserDaoImpl中使用PreparedStatement来防止SQL注入,以及正确管理数据库连接的关闭。此外,要提到异常处理,但代码中可以简化,重点展示结构。 另外,用户可能对如何组织项目结构感兴趣,比如包名的划分,如com.dao、com.dao.impl、com.entity等,这在引用[2]中也有提到。因此,在回答中应该包括包结构的建议,帮助用户理解类的存放位置。 最后,生成的相关问题需要与DAO模式相关,比如分层的好处、接口与实现类的区别、结合Spring框架的方法等,这样可以引导用户进一步学习。</think>### Java DAO类设计规范与示例 #### 一、DAO类定义原则 1. **接口与实现分离**:`xxxDao.java`应定义为接口,声明数据操作方法;`xxxDaoImpl.java`为实现类 2. **职责单一**:每个DAO类只操作单一实体(如`UserDao`只处理用户数据) 3. **数据库无关性**:通过接口隔离具体数据库操作实现[^2] #### 二、典型代码结构 ```java // 实体类定义(com.entity) public class User { private Integer id; private String name; // getter/setter省略 } // DAO接口定义(com.dao) public interface UserDao { User findById(int id); List<User> findAll(); void save(User user); void update(User user); void delete(int id); } // DAO实现类(com.dao.impl) public class UserDaoImpl implements UserDao { private static final String FIND_BY_ID_SQL = "SELECT * FROM users WHERE id = ?"; @Override public User findById(int id) { try (Connection conn = DBUtil.getConnection(); PreparedStatement pstmt = conn.prepareStatement(FIND_BY_ID_SQL)) { pstmt.setInt(1, id); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { User user = new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); return user; } } catch (SQLException e) { throw new DaoException("Query failed", e); } return null; } // 其他方法实现类似 } // 数据库工具类(com.util) public class DBUtil { public static Connection getConnection() throws SQLException { return DriverManager.getConnection( "jdbc:mysql://localhost:3306/mydb", "user", "pass"); } } ``` #### 三、分层调用关系 $$ \text{示层} \rightarrow \text{业务层(Service)} \rightarrow \text{DAO层} \rightarrow \text{数据库} $$ ```java // Service层示例 public class UserService { private UserDao userDao = new UserDaoImpl(); public User getUser(int id) { return userDao.findById(id); } } ``` #### 四、设计要点 1. **事务管理**:应在Service层处理事务边界 2. **异常封装**:自定义`DaoException`包装底层异常 3. **资源释放**:使用try-with-resources确保连接关闭[^3] 4. **SQL注入防护**:必须使用PreparedStatement
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值