前提:
这个组件是基于Spring的getJdbcTemplate()来进行数据库操作。
组件特性:
1.子类只要继承父类SpringEntityDAO就能自动拥有添加,修改,删除,查询的方法。
2. 子类进行复杂查询的时候,不需要配置烦人的映射关系rowMapper。
这里的rowMapper是在父类中定义的,子类可以直接使用。
java 代码
- @SuppressWarnings("unchecked")
- public List queryNextFlows(String userId, String currentFlowState) {
- return getJdbcTemplate() .query( sql ,new Object[] { userId, currentFlowState }, rowMapper);
- }
3.SpringEntityDAO提供一些比较常用的数据库操作方法,子类自动拥有。
deleteAll 删除当前表的所有数据。
queryAll 查询当前表的所有数据。
queryBy根据属性名和属性值查询对象。
queryBySql使用sql语句进行查询。
具体可以参见SpringEntityDAO类。
4.兼容hibernate3.2.
配置类似于hibernate annotation,但是不需要使用hibernate和hibernate annotation的jar包。
如何使用:
1.继承SpringEntityDAO,User是和数据库表对应的对象。
java 代码
- import org.kiral.model.User;
- import org.kiral.widget.db.SpringEntityDAO;
- public class UserDAO extends SpringEntityDAO < User > {
- }
2. 使用注释配置表和对象的映射关系。
java 代码
- package org.kiral.model;
- import java.util.Date;
- import org.kiral.widget.annotation.Column;
- import org.kiral.widget.annotation.Id;
- import org.kiral.widget.annotation.Table;
- import org.kiral.widget.annotation.Transient;
- @Table(name = "USER_INFO")
- public class User {
- private String id;
- private String name;
- private int old;
- private String email;
- private Date createDate;
- private String memo;
- private boolean isOnline;
- @Transient
- public boolean isOnline() {
- return isOnline;
- }
- public void setOnline(boolean isOnline) {
- this.isOnline = isOnline;
- }
- @Column(name = "CREATE_DATE")
- public Date getCreateDate() {
- return createDate;
- }
- public void setCreateDate(Date createDate) {
- this.createDate = createDate;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- @Id
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getMemo() {
- return memo;
- }
- public void setMemo(String memo) {
- this.memo = memo;
- }
- public int getOld() {
- return old;
- }
- public void setOld(int old) {
- this.old = old;
- }
- }
3.执行测试
java 代码
- package org.kiral.dao;
- import java.util.Date;
- import org.kiral.model.User;
- import org.kiral.test.DaoTestCase;
- public class UserDAOTest extends DaoTestCase {
- private UserDAO userDAO;
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- userDAO = (UserDAO) context.getBean("userDAO");
- }
- public final void testALL() {
- // 构建用户
- User user = new User();
- final String id = "1";
- user.setId(id);
- user.setName("kiral");
- user.setEmail("main_shorttime@163.com");
- user.setCreateDate(new Date());
- user.setMemo("hello");
- user.setOld(100);
- // 添加用户
- userDAO.add(user);
- assertNotNull(userDAO.queryById(id));
- // 更新用户
- user.setName("kiral2");
- userDAO.update(user);
- User newUser =userDAO.queryById(id);
- assertEquals("kiral2", newUser.getName());
- // 查询用户
- assertNotNull(userDAO.queryAll());
- // 删除用户
- userDAO.deleteById(id);
- assertNull(userDAO.queryById(id));
- }
- }
@Table(name="FLOW_TYPE"):配置表名,如果数据库的表名和对象名一致,则无需 配置。 @Id:配置主键,每个对象都必须配置主键。@Id必须放在get方法上面。 @Column(name="FLOW_TYPE_ID") 配置字段。当前的属性叫做ID,而数据库中的表的字段叫做FLOW_TYPE_ID,所以必须通过 Column配置对应关系。当前注释也必须放在get方法上面。 @Transient:忽略当前属性,在get方法上面配置@Transient,表示数据库表中没有当前字段。
一目了然!userDao直接使用CRUD方法。
附件是源代码和事例代码,直接作为project导入到eclipse下,然后执行org.kiral.dao.UserDAOTest。
代码和注释都非常详细,大家一看就能明白。