(本测试项目--Helloworld下载地址:http://download.csdn.net/detail/partner4java/5045151 为了减少刷屏,一些比如POJO的get和set方法就省略了,具体查看下载包)
传统JDBC:当您进行增删改查时是不是拼写SQL到都想吐了?好不容易拼写完,想获取结果,还要再遍历封装,遇到一个字段上百的遗留表简直就疯了。
p4jorm:当使用p4jorm时,普通的CURD,也就是占据我们大部分工作的CURD就不需要再书写(真的是一行都不用写);当前端查询时我们只需要把相应数据放入formbean就可以了(如果你使用struts之类的框架formbean数据封装工作也不需要自己完成);你再多的字段也不用担心;更不会再因为忘了关闭数据库连接而被老大k了。
下面进入我们三十分钟学习时间:
(以MySQL数据库进行展示,目前也只支持了MySQL,如需要支持其他数据库,请邮件告知,会尽量添加)
首先创建一个web项目,如果你使用maven的话,请把压缩包的maven目录放入你本机(因为没有发布到公服),且加入maven依赖
<dependency>
<groupId>partner4java</groupId>
<artifactId>p4jorm</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</exclusion>
</exclusions>
</dependency>
如果没有使用maven,本架构的jar为p4jorm-1.0.0.jar,还需要依赖其他jar,你直接考入helloworld项目所有jar(p4jorm_jdbc_test\WebRoot\WEB-INF\lib)即可。第一步:创建表
就和你平时一样创建表就ok了。
我们这里简单创建了一个user表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(20) NOT NULL,
`password` varchar(20) NOT NULL,
`address` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
第二步:创建表对应的实体
换句话说,创建表数据的携带对象,这个也是我们平时所需要的。(你从数据库中取出了数据总要有地方存吧,总不能放到Map里吧?亲,我们可是面向对象啊)
public class User implements Serializable {
private static final long serialVersionUID = -8804762279661495240L;
private int id;
private String username;
private String password;
private String address;
...
你也可以借助工具通过已创建的表,自动生成实体,详细查看文章
http://blog.csdn.net/partner4java/article/details/8560289
(我们这里是不需要JPA之类的注解,生成后,你需要删除)
第三步:添加实体注解
因为我需要对实体进行识别分析,这里您一般只需要添加两个注解
P4jEntity标注于类上、P4jId标注于对应的主键字段上
(具体注解详解,请参照附件文档doc/index.html,后面我们就不再说“请参照文档”之类的客套话,有不明白的,你第一时间就去找文档即可,文档中若解释不清晰,请邮件我)
@P4jEntity
public class User implements Serializable {
private static final long serialVersionUID = -8804762279661495240L;
@P4jId
private int id;
private String username;
private String password;
private String address;
我们说过p4jorm只需要两个注解就齐活了,也就是说现在你就可以对user表进行增删改查操作了。
第四步:整理测试环境书写测试用例
环境:
我们在第一步文章中提到过,p4jorm目前版本需要借助spring,如果对spring ioc不是很熟悉的同学,可参照文章
http://blog.csdn.net/partner4java/article/details/8194747
若当前spring并不在你的学习范围内,也不用担心,你只需要把我提供的配置文件拷入相应的目录即可
p4jorm_jdbc_test\src\main\resources中有三个文件:
datasource-c3p0.xml、beans.xml
jdbc-c3p0.properties:你只需要关心这个,这里配置了你的数据库连接信息
(由于我们这里使用了c3p0,那么相应的jar也需要加入)
单元测试:
我们目前使用第一个工具类 --P4jJdbcDaoTemplate
public class UserTest {
private P4jJdbcDaoTemplate daoTemplate;
// setUp方法其实就是为我们创建了一个P4jJdbcDaoTemplate,具体参照文档中P4jJdbcDaoTemplate说明
@Before
public void setUp() throws Exception {
// 这里为spring的容器创建
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/META-INF/spring/beans.xml");
// 创建了daoTemplate,并传入了namedParameterJdbcTemplate
daoTemplate = new P4jJdbcDaoTemplate(applicationContext.getBean("namedParameterJdbcTemplate",
NamedParameterJdbcTemplate.class));
}
// 我们进行第一个保存测试
@Test
public void testSave() {
for (int i = 0; i < 1000; i++) {
// 创建一个user实体,往里赛数据
User user = new User();
user.setPassword("123456" + i);
user.setUsername("partner4java" + i);
user.setAddress("partner4java@163.com");
// 我们就只需要这一句话就可以保存user进数据库了
daoTemplate.save(user);
}
}
}
一千条保存,当你看到数据表中新增的数据,是否心里暗暗欢喜
// 更新的数据,需要说明一点的是,我们只会更新指定id的数据,且不更新值为null的数据,你可以置空字符
@Test
public void testUpdate() {
User user = new User();
user.setPassword("");
user.setUsername("world");
// 设置id,表示需要更新的数据
user.setId(1);
daoTemplate.update(user);
}
@Test
public void testDelete(){
daoTemplate.delete(User.class, 1);
}
更新和删除也是如此简单。
关于实体,我们还有两个注解:
P4jTransient 用于指定该字段和数据库没关系、P4jColumn对字段的映射进行特殊指定(因为我们是根据实体成员字段的名称对应数据库字段名称,若两者不相同,就需要该注解)。
查询数据:
每次你点击form表单的查询提交后,是否心里暗想,我都已经把数据给你了,你为什么不自动给我返回我想要的数据呢?为什么还需要我费劲的去拼写查询SQL呢?
好吧,我帮你实现,而且不对你奢求太多工作:
如果你使用了struts类似框架,你一定有一层叫formbean,你只需要在formbean为几个需要参与查询字段加上注解就可以了(额外让你劳苦了几秒钟)。
(首先说明一点哈,form的提交到formbean中的数据封装,这是MVC框架的工作,我不会帮你做)
我们这里没有使用MVC框架,直接使用了Servlet:com.partner4java.jdbctest.web.UserListServlet(这个不是我们的重点就不贴出来了,自己去看附件)
我们定义了formbean:
/**
* 你会发现和我的User类很相似,通常情况下formbean会比entity少很多字段,或者多一些时间字段,这不是我们这里的重点,就不多解释了
*
* @author partner4java
*
*/
public class UserFormBean implements Serializable {
private static final long serialVersionUID = 4358513464951563450L;
private String username;
private String password;
private String address;
有了formbean我们还是加俩注解:
P4jQueryForm(标注于类上,表明本类的字段赋值会用于查询拼写,必须指定本注解)、P4jGeneral(用于声明某字段为普通查询,如等值查询)、P4jLike(用于声明某字段为like模糊查询),具体查看附件文档
@P4jQueryForm
public class UserFormBean implements Serializable {
private static final long serialVersionUID = 4358513464951563450L;
// 表示我们会查找名字为此的数据
@P4jGeneral(generalQueryType = GeneralQueryType.EQ)
private String username;
// 我没有任何注解,不会参与查询
private String password;
// 表示我们会根据地址模糊查询
@P4jLike
private String address;
在我们没有写任何dao和service的情况下,就可以直接完成显示层:
/**
* 我们这里简单示例,直接使用了Servlet,如果你使用MVC框架,UserFormbean的获取会自动进行
*
* @author partner4java
*
*/
public class UserListServlet extends HttpServlet {
private static final long serialVersionUID = -5372697351493999670L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
UserFormBean formBean = getUserForm(request);
String currentPage = getCurrentPage(request);
// 这里只给你要了要返回的类型,formbean,当前页,返回类型连强转都不用,不过分吧?
PageData<User> users = P4jJdbcDaoTemplateSingleton.getJdbcDaoTemplate().query(User.class, formBean,
new PageIndex(new Integer(currentPage)), null);
request.setAttribute("users", users);
request.getRequestDispatcher("/WEB-INF/page/users.jsp");
}
jsp和普通的界面一样,我又给大家封装了一个分页:
<input type="hidden" name="currentPage" value="${pageData.pageIndex.currentPage }"/>
<div class="pager">
<c:if test="${pageData.pageIndex.currentPage > 1 }">
<a class="prv" href="javascript:topage('${pageData.pageIndex.currentPage - 1 }')"><span>上一页</span></a>
</c:if>
<c:forEach begin="${pageData.pageIndex.startPage }" end="${pageData.pageIndex.endPage }" varStatus="varStatus">
<c:if test="${pageData.pageIndex.currentPage == (pageData.pageIndex.startPage + varStatus.count - 1) }">
<strong><span>${pageData.pageIndex.startPage + varStatus.count - 1} </span></strong>
</c:if>
<c:if test="${pageData.pageIndex.currentPage != (pageData.pageIndex.startPage + varStatus.count - 1) }">
<a href="javascript:topage('${pageData.pageIndex.startPage + varStatus.count - 1 }') "><span>${pageData.pageIndex.startPage + varStatus.count - 1} </span></a>
</c:if>
</c:forEach>
<c:if test="${pageData.pageIndex.currentPage < pageData.totalCount/pageData.pageIndex.maxResult}">
<a class="next" href="javascript:topage('${pageData.pageIndex.currentPage + 1}') "><span>下一页</span></a>
</c:if>
</div>
使用非常简单。
jsp方面,我们只需要完成一个类似于users.jsp:
<form action="userlist" method="post">
用户名:<input type="text" name="username" value="${username }"/><br/>
地址:<input type="text" name="address" value="${address }"/>
<input type="submit" value="查询"/><br/>
<c:forEach items="${pageData.resultlist }" var="user">
${user.username } -- ${user.password } -- ${user.address } <br/>
</c:forEach>
<%@ include file="fenye.jsp"%>
</form>
到目前为止我们已经完成了CURD操作,回想一下,都需要你做什么?entity两个注解,formbean三个注解。其他都是无可避免本身就需要做的。
如果上面通用的CURD已经无法满足你的需求时,你可以借助P4jJpaDaoSupport,用法如:
定义一个接口:
public interface UserDao extends P4jDao<User> {
}
public class UserDaoImpl extends P4jJdbcDaoSupport<User> implements UserDao {
}
如果你需要额外的方法,在你自己的UserDao接口中完成,在UserDaoImpl类中实现即可。(如果通过继承,你会发现,当你再继续进行CURD操作时,可以省略传入实体类型,因为在继承时父类要求传入了实体类型)
有一点需要注意我们的P4jJdbcDaoSupport需要NamedParameterJdbcTemplate资源,你可以像我们P4jJdbcDaoTemplate一样粗暴的手工塞入。不过我们建议借助Spring IoC,把你的UserDaoImpl交给Spring,自动塞入。
分享到:
相关推荐
2. **实体管理**:在P4JORM中创建、更新和删除实体时,参数位置的修正意味着这些操作将更加准确无误。 3. **事务处理**:在多步骤操作中,如果涉及多个参数的查询,正确的位置索引能保证事务的一致性和原子性。 4....
P4JORM,全称为“Perfected Java Object-Relational Mapping”,是一款基于Java语言的高效ORM(对象关系映射)框架。在1.0.3这个版本中,开发者针对用户需求和常见问题进行了重要的改进,提升了框架的稳定性和用户...
你还写jdbc呢?还在反复HQL拼写工作?p4jorm让你无需写一行代码,即可进行CURD,真正的简单易学。本人用了3天时间完成,还请各位多多指点 http://blog.csdn.net/partner4java/article/details/8559661 ...
开始那个版本是1.7,有些同学遇到“java.lang.UnsupportedClassVersionError: Bad version ”问题,如果是jdk 1.6,请用此版本,或者自己编译一个,因为已发布源码
This project is based on Java, is a lightweight ORM model. Only concerned about the Object-Relationl Mapping, therefore more simple and easier to use, easier to control. Key support functions and ...
**JORM 2.9:Java对象存储映射框架** JORM,全称为Java Object Relational Mapping,是一款针对Java开发者的开源持久性框架。它的主要功能是为Java对象提供数据库映射服务,使得开发者可以更加方便地管理和操作...
jorm-1.0.7.GA-javadoc
**标题解析:** ...综上所述,jorm-unit 是一个面向Java开发者的测试工具,它简化了使用JPA的项目的单元测试,特别是在没有真实数据库服务器的环境中。它对于提高测试质量和开发效率有着显著的帮助。
不用写sql啦,不用创建表啦,一个比mybatis更轻量级,比hibernate好用的orm!
Java OR-Mapper(对象关系映射器)是一种技术,它允许Java开发人员将数据库操作转换为对普通Java对象的操作,从而简化数据访问层的代码。这个开源项目提供了一个轻量级且高性能的解决方案,旨在让开发者能够专注于...
4. **SAP DB, Hypersonic/Hsql, McKoi, Xindice, OJB, Hibernate, Castor, Torque, JORM, XMLBeans, JiBX, JAXB Reference Implementation, JaxMe**:这些是数据库访问和对象关系映射(ORM)工具,它们帮助开发者在 ...
MVC的低耦合性、高重用性、可维护性、软件工程的可管理性等诸多优点使其在java平台中很受欢迎,其间,也诞生了许多优秀的MVC框架,如专注于控制层的Struts、WebWork, Struts2, JSF等框架,专注于业务逻辑方面的...
健康的决定因素 健康的社会决定因素的开源可视化...捕获电子健康记录中的社会和行为领域和措施:第2阶段(2014年)。 华盛顿特区:国家科学院出版社。 Gruszin,S.和Jorm,L.(2010年12月)。 公共卫生分类项目(共和
最近收到的书籍 ...JORM, AF 阅读和拼写障碍的心理学。 波士顿:Routledge & Kegan Paul,1983 年,134 页,价格不详。 KNOWLES, D., & REEVES, N. 但是奶奶不需要她的袜子吗? 爱荷华州迪比克