`
fangzhouxing
  • 浏览: 213345 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

简化Java开发

    博客分类:
  • Java
阅读更多

最近重新拾起放下快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工具库设计源码,简化Java开发流程,释放重复代码灵感

    该项目为基于Java与HTML的Feilong工具库设计源码,总计包含3428个文件,其中Java源文件3172个,XML配置文件120个,HTML文件16个,旨在简化Java开发流程,通过释放重复简单的代码灵感,提升开发效率。

    Spring Boot框架:简化Java开发的革命

    它简化了项目启动过程,提供了自动配置功能,支持微服务架构,具备强大的开发工具,自动化依赖管理,拥有丰富的生态系统,可灵活扩展,性能优化和安全性等方面的优势 。通过本篇文章的阐述,我们对Spring Boot的优点...

    一套简化Java持久层操作的类库

    在给定的标题“一套简化Java持久层操作的类库”中,我们可以理解这是一个专为简化Java开发人员进行数据库操作而设计的工具。它可能包含了对数据库CRUD(创建、读取、更新、删除)操作的抽象,使得开发者可以更专注于...

    一键配置java 一键检测java 环境.rar

    5. **一键运行**:这两个批处理脚本的目的是简化Java开发环境的配置过程,让开发者无需手动修改系统环境变量,只需双击运行即可完成配置。这在团队协作或教学场景中特别有用,因为它确保了所有人的开发环境一致。 6...

    Java学到什么程度可以找工作

    * Spring:Spring 是一种轻量级的 Java 框架,用于简化 Java 开发的复杂性。 * Hibernate:Hibernate 是一种对象关系映射(ORM)框架,用于简化 Java 开发中的数据库交互。 如果您掌握了 Java 的基本语法和面向对象...

    Java环境变量一键配置工具

    Java环境变量一键配置工具是专为简化JAVA开发环境搭建而设计的应用程序,它极大地简化了JDK安装后的环境变量配置过程。在传统的Java开发环境中,开发者通常需要手动配置一系列环境变量,包括JAVA_HOME、PATH以及...

    JAVA安装授权的新工具

    总之,"JAVA安装授权的新工具"是一个旨在简化Java开发环境部署和管理的实用工具,通过集成化的授权管理、版本控制、更新机制等功能,提高了Java用户的使用体验和工作效率,同时也确保了合规性和安全性。对于企业IT...

    java后台开发框架,简化开发,高效开发,入门简单

    java后台开发框架,简化开发,高效开发,入门简单。亲测好用

    Java开发环境配置批处理

    Java开发环境配置批处理是Java开发者在安装和设置工作环境时常常会遇到的一个步骤,它主要是为了简化和自动化Java开发所需的环境变量配置过程。本文将详细介绍如何创建和使用批处理文件来配置Java开发环境,以及...

    Java系统环境变量设置工具

    Java系统环境变量设置工具是用来简化Java开发环境配置的软件,特别是在安装Java Development Kit (JDK)后,确保Java运行时环境(JRE)和开发工具能够正常工作。在Windows操作系统中,用户通常需要手动配置三个关键的...

    java开发API相关文档

    MyBatis等ORM(对象关系映射)框架也常用于简化Java与MySQL的交互。 4. **Spring框架**: Spring是Java企业级应用开发的核心框架,它提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,极大地...

    Java简化开发套路集.zip

    3. **Spring框架**:Spring是Java开发中的基石,提供了一整套服务,包括依赖注入、事务管理、数据访问等。Spring Boot进一步简化了初始化和配置过程,让开发者可以快速搭建应用。 4. **模板引擎**:例如FreeMarker...

    C:\Users\liumingzhuang\Downloads\一键配置java环境.zip

    这个压缩包中的".exe"文件很可能是一个可执行程序,用于简化Java开发环境的安装和配置过程。 首先,我们来了解Java环境配置的基本步骤,这对于理解一键配置工具的工作原理至关重要。Java环境配置主要包括两个关键...

    用JSTL简化Java Web开发

    稿件编号:06122808 稿件名称:用JSTL简化Java Web开发 稿件作者:徐翔斌 源代码名称:book 调试环境:Win XP;SQL,apache-tomcat-5.5

    狂神JAVA-18-SpringBoot学习1

    4. **Spring Boot简化Java开发的方式** - **POJO编程**:基于普通Java对象,避免了过于复杂的实体类。 - **依赖注入(DI)和控制反转(IOC)**:通过接口实现松耦合,提高代码的可测试性和可维护性。 - **面向切...

    Java开发实战经典(名师讲坛) 完整版 PDF

    《Java开发实战经典(名师讲坛)》是Java编程领域一本深受开发者喜爱的教程,它以实战为导向,深入浅出地介绍了Java编程的各种核心概念和技术。这本书由知名讲师李兴华编写,以其丰富的教学经验和实战案例,为读者提供...

    基于Java的AXmlSwing框架简化Swing开发设计源码 - AXmlSwing

    本源码提供了一个基于Java的AXmlSwing框架的设计,用于简化Swing开发。项目包含30个文件,其中包括17个Java文件、3个JAR文件、2个Markdown文档、1个Classpath文件、1个Gitignore文件、1个Project文件、1个TXT文件和1...

    一个简化的Java项目开发脚本

    这些工具提供了丰富的功能和灵活性,可以大大简化Java项目的开发和维护。 依赖管理:上述脚本没有处理项目依赖项。在实际项目中,你通常会使用Maven或Gradle等构建工具来管理项目的依赖项,包括自动下载、编译和链接...

Global site tag (gtag.js) - Google Analytics