最近重新拾起放下快1年的Java,从Python/Django平台编程经历中得到很多启发,准备在下列几个方面简化Java开发:
1. 对 Hibernate 的简化使用
使用Hibernate的最大困难是表之间一对多和多对多关联的准确理解和使用。现在我决定在数据库表之间不实现物理关联,而是在服务层由程序来维护关联。JPA定义的实体类中,一律不使用集合。
例如,用户和用户组之间的多对多关联,就用一个与数据库表直接对应的JPA实体类来表示:
/**
* 注册用户
*/
@Entity
@Table(name = "t_user")
public class User extends LightEntity implements Serializable {
private Integer id;
private String name; //登录名
private String password;
。。。
/**
* 用户组
*/
@Entity
@Table(name = "t_group")
public class Group extends LightEntity implements Serializable {
private Integer id;
private String name;
。。。
/**
* 用户组和注册用户多对多关联
*/
@Entity
@Table(
name = "t_user_groups",
uniqueConstraints={@UniqueConstraint(columnNames={"user_id","group_id"})}
)
public class UserGroups extends LightEntity implements Serializable {
private Integer id;
private Integer userId;
private Integer groupId;
。。。
2. 对 Spring 的简化使用
除了使用Spring 2.5.x版本的基于注解的配置外,主要的简化在于取消接口(Interface)和DAO层,只有服务层。
例如:
/**
* 与用户组相关的服务
*/
@Component("groupService")
@Transactional
public class GroupService {
protected EntityManager entityManager;
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
// ~ ======= CRUD =========
private String pojoClassName = Group.class.getName();
public Group find(Integer id) {
return entityManager.find(Group.class, id);
}
@SuppressWarnings("unchecked")
public List findAll() {
Query query = entityManager.createQuery("from " + pojoClassName);
return (List) query.getResultList();
}
public int countAll() {
Query query = entityManager.createQuery("select count(*) from " + pojoClassName);
return ((Long) query.getSingleResult()).intValue();
}
public Group save(Group obj) {
return entityManager.merge(obj);
}
3. 使用Sqlite作为开发用数据库
使用Django开发用惯了sqlite,发现Java平台上好像很少有人用它。查找了一些资料,自己写了一个SQLiteDialect类(参见附件)。
4. 在GWT客户端直接使用JPA实体类
使用Gilead
可以轻松地在GWT客户端直接使用JPA实体类,不再需要重复写DTO了。
5. SQL脚本直接用于准备单元测试数据
利用Spring 2.5新的TestContext测试框架对服务层进行测试,测试数据的准备直接写在SQL脚本文件中,例如:
@RunWith(SpringJUnit45ClassRunner.class)
@ContextConfiguration(locations = "classpath:com/divo/test/resources/applicationContext.xml")
public class TestGroupService extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
private GroupService service;
@Before
public void prepareTestData() {
executeSqlScript("com/divo/test/server/service/core/fixture.sql", false);
}
// ~ ========= CRUD =========
@Test
public void canFind() throws Exception {
List<Group> objs = service.findAll();
assertEquals(2, objs.size());
assertEquals(2, service.countAll());
Group obj = service.find(1);
assertEquals("g1", obj.getName());
}
。。。
fixture.sql文件的内容如下:
delete from t_user
insert into t_user (id,full_name,name,password,salt) values (1,'tom','tom','123','1')
insert into t_user (id,full_name,name,password,salt) values (2,'tom2','tom2','123','1')
delete from t_group
delete from t_user_groups
insert into t_group (id,name) values (1,'g1')
insert into t_group (id,name) values (2,'g2')
insert into t_user_groups (id,user_id,group_id) values (1,1,1)
insert into t_user_groups (id,user_id,group_id) values (2,1,2)
。。。
6. 用Ant直接创建数据库表
建好JPA实体类后,运行Ant目标,可以直接在开发用数据库中创建新表。
<?xml version="1.0" encoding="utf-8" ?>
<project name="Next" default="hbm2ddl" basedir=".">
<property name="build.dir" value="./db" />
<path id="project.class.path">
<pathelement location="war/WEB-INF/classes" />
<fileset dir="war/WEB-INF/lib">
<include name="**/*.jar" />
</fileset>
</path>
<!-- Hibernate Tools import -->
<taskdef name="hibernatetool"
classname="org.hibernate.tool.ant.HibernateToolTask"
classpathref="project.class.path" />
<!-- Export the database schema -->
<target name="hbm2ddl" description="Generate DDL">
<hibernatetool destdir="${build.dir}">
<jpaconfiguration persistenceunit="next" />
<classpath refid="project.class.path" />
<hbm2ddl drop="false"
create="true"
update="false"
export="true" />
</hibernatetool>
</target>
</project>
随着Google最近的一系列新产品(GWT1.6、Java版的AppEngine)的推动下,相信Java会重新成为开发Ajax应用的主要平台。
分享到:
相关推荐
该项目为基于Java与HTML的Feilong工具库设计源码,总计包含3428个文件,其中Java源文件3172个,XML配置文件120个,HTML文件16个,旨在简化Java开发流程,通过释放重复简单的代码灵感,提升开发效率。
它简化了项目启动过程,提供了自动配置功能,支持微服务架构,具备强大的开发工具,自动化依赖管理,拥有丰富的生态系统,可灵活扩展,性能优化和安全性等方面的优势 。通过本篇文章的阐述,我们对Spring Boot的优点...
在给定的标题“一套简化Java持久层操作的类库”中,我们可以理解这是一个专为简化Java开发人员进行数据库操作而设计的工具。它可能包含了对数据库CRUD(创建、读取、更新、删除)操作的抽象,使得开发者可以更专注于...
5. **一键运行**:这两个批处理脚本的目的是简化Java开发环境的配置过程,让开发者无需手动修改系统环境变量,只需双击运行即可完成配置。这在团队协作或教学场景中特别有用,因为它确保了所有人的开发环境一致。 6...
* Spring:Spring 是一种轻量级的 Java 框架,用于简化 Java 开发的复杂性。 * Hibernate:Hibernate 是一种对象关系映射(ORM)框架,用于简化 Java 开发中的数据库交互。 如果您掌握了 Java 的基本语法和面向对象...
Java环境变量一键配置工具是专为简化JAVA开发环境搭建而设计的应用程序,它极大地简化了JDK安装后的环境变量配置过程。在传统的Java开发环境中,开发者通常需要手动配置一系列环境变量,包括JAVA_HOME、PATH以及...
总之,"JAVA安装授权的新工具"是一个旨在简化Java开发环境部署和管理的实用工具,通过集成化的授权管理、版本控制、更新机制等功能,提高了Java用户的使用体验和工作效率,同时也确保了合规性和安全性。对于企业IT...
java后台开发框架,简化开发,高效开发,入门简单。亲测好用
Java开发环境配置批处理是Java开发者在安装和设置工作环境时常常会遇到的一个步骤,它主要是为了简化和自动化Java开发所需的环境变量配置过程。本文将详细介绍如何创建和使用批处理文件来配置Java开发环境,以及...
Java系统环境变量设置工具是用来简化Java开发环境配置的软件,特别是在安装Java Development Kit (JDK)后,确保Java运行时环境(JRE)和开发工具能够正常工作。在Windows操作系统中,用户通常需要手动配置三个关键的...
MyBatis等ORM(对象关系映射)框架也常用于简化Java与MySQL的交互。 4. **Spring框架**: Spring是Java企业级应用开发的核心框架,它提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,极大地...
3. **Spring框架**:Spring是Java开发中的基石,提供了一整套服务,包括依赖注入、事务管理、数据访问等。Spring Boot进一步简化了初始化和配置过程,让开发者可以快速搭建应用。 4. **模板引擎**:例如FreeMarker...
这个压缩包中的".exe"文件很可能是一个可执行程序,用于简化Java开发环境的安装和配置过程。 首先,我们来了解Java环境配置的基本步骤,这对于理解一键配置工具的工作原理至关重要。Java环境配置主要包括两个关键...
稿件编号:06122808 稿件名称:用JSTL简化Java Web开发 稿件作者:徐翔斌 源代码名称:book 调试环境:Win XP;SQL,apache-tomcat-5.5
4. **Spring Boot简化Java开发的方式** - **POJO编程**:基于普通Java对象,避免了过于复杂的实体类。 - **依赖注入(DI)和控制反转(IOC)**:通过接口实现松耦合,提高代码的可测试性和可维护性。 - **面向切...
《Java开发实战经典(名师讲坛)》是Java编程领域一本深受开发者喜爱的教程,它以实战为导向,深入浅出地介绍了Java编程的各种核心概念和技术。这本书由知名讲师李兴华编写,以其丰富的教学经验和实战案例,为读者提供...
本源码提供了一个基于Java的AXmlSwing框架的设计,用于简化Swing开发。项目包含30个文件,其中包括17个Java文件、3个JAR文件、2个Markdown文档、1个Classpath文件、1个Gitignore文件、1个Project文件、1个TXT文件和1...
这些工具提供了丰富的功能和灵活性,可以大大简化Java项目的开发和维护。 依赖管理:上述脚本没有处理项目依赖项。在实际项目中,你通常会使用Maven或Gradle等构建工具来管理项目的依赖项,包括自动下载、编译和链接...