最近学习datanucleus ,datanucleus和Hibernate一样,都是操作数据库的持久层。本人之前一直使用的是SSH框架,这次尝试把Hibernate换成datanucleus,成功。

(1)首先 上maven的pom.xml

</properties>  <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>3.1.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.1.2.RELEASE</version></dependency><!-- <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>3.1.2.RELEASE</version></dependency> --><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>3.1.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>3.1.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>3.1.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>3.1.2.RELEASE</version></dependency><!-- hibernate --><!-- <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>4.2.2.Final</version></dependency> --><!-- struts2 --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.3.16</version><!-- 这里的 exclusions 是排除包,因为 Struts2中有javassist,Hibernate中也有javassist,所以如果要整合Hibernate,一定要排除掉Struts2中的javassist,否则就冲突了。--><exclusions><exclusion><groupId>javassist</groupId><artifactId>javassist</artifactId></exclusion></exclusions> </dependency><!-- 使用了这个插件之后,就可以采用注解的方式配置Struts的Action,免去了在struts.xml中的繁琐配置项 --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-convention-plugin</artifactId><version>2.3.20</version></dependency><!--config-browser-plugin插件,使用了这个插件之后,就可以很方便的浏览项目中的所有action及其与 jsp view的映射 --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-config-browser-plugin</artifactId><version>2.3.20</version></dependency><!-- Struts2和Spring整合插件 --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-spring-plugin</artifactId><version>2.3.4.1</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-json-plugin</artifactId><version>2.3.8</version></dependency><!--Druid连接池包 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.12</version></dependency><!-- MariaDB 数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.20</version></dependency><!--aspectjweaver包 --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.5</version></dependency><dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.18.0-GA</version></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><dependency><groupId>commons-pool</groupId><artifactId>commons-pool</artifactId><version>1.6</version></dependency><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><scope>provided</scope><version>3.0.1</version></dependency><!-- datanucleus  --><dependency><groupId>javax.jdo</groupId><artifactId>jdo-api</artifactId><version>3.1</version></dependency><!-- 下面为DataNucleus所需jar包 --><dependency><groupId>org.datanucleus</groupId><artifactId>datanucleus-core</artifactId><version>4.1.0-m4</version></dependency><dependency><groupId>org.datanucleus</groupId><artifactId>datanucleus-enhancer</artifactId><version>3.1.0-m2</version></dependency> <dependency><groupId>org.datanucleus</groupId><artifactId>datanucleus-api-jdo</artifactId><version>4.1.0-m4</version></dependency><dependency><groupId>org.datanucleus</groupId><artifactId>datanucleus-jdo-query</artifactId><version>4.2.0-m2</version></dependency><dependency><groupId>org.datanucleus</groupId><artifactId>datanucleus-cache</artifactId><version>3.0.0-m2</version></dependency><dependency><groupId>org.datanucleus</groupId><artifactId>datanucleus-rdbms</artifactId><version>4.1.0-m4</version></dependency><dependency><groupId>org.datanucleus</groupId><artifactId>datanucleus-management</artifactId><version>1.0.2</version></dependency><!-- spring-test junit --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>3.2.3.RELEASE</version></dependency><dependency><groupId>cglib</groupId><artifactId>cglib-nodep</artifactId><version>3.2.0</version></dependency></dependencies>

在maven中,去除了Hibernate的依赖jar包  包含了Struts Spring datanucleus jdo junit

2. 同写SSH框架一样,写Action DAO层  代码如下

package com.chi.dao;import java.util.List;import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import javax.jdo.Transaction;import javax.jdo.Query;import com.chi.film.Movie;
import com.chi.util.JDOConfiguration;public class SearchMovieDaoImpl implements SearchMovieDao {private JDOConfiguration jDOConfiguration;    public JDOConfiguration getjDOConfiguration() {return jDOConfiguration;}public void setjDOConfiguration(JDOConfiguration jDOConfiguration) {this.jDOConfiguration = jDOConfiguration;}@Overridepublic List<Movie> searchAll() {// 查询不开启事务PersistenceManagerFactory pmf = jDOConfiguration.persistenceManagerFactory();PersistenceManager pm = pmf.getPersistenceManager();List<Movie> list = null;try {Query q=pm.newQuery("SELECT FROM " + Movie.class.getName());//Query q=pm.newQuery("SELECT FROM " + Movie.class.getName() + " where id == 2 " );//datanucleus 中使用     "==" list = (List<Movie>)q.execute();} catch (Exception e) {e.printStackTrace();         }finally{pm.close();pmf.close();}       return list;}public boolean minusNumber(){PersistenceManagerFactory pmf = jDOConfiguration.persistenceManagerFactory();PersistenceManager pm = pmf.getPersistenceManager();Transaction tx = pm.currentTransaction();try {tx.begin();Movie movie = pm.getObjectById(Movie.class, 2);movie.setMovieNumber(movie.getMovieNumber()+1);pm.makePersistent(movie);            tx.commit();return true;} catch (Exception e) {e.printStackTrace();return false;}finally{if(tx.isActive()) tx.rollback();pm.close();pmf.close();}       }
}

仅展示DAO层代码。此处重点说明,在datanucleus的官网的例子中,并没有update功能的实现。百度、CSDN找了半天都没有提到这个。最后在stackoverflow上找到答案

附上链接: http://stackoverflow.com/questions/3604722/how-to-use-jdodatanucleus-to-update-delete-data

3.Spring的配置文件

此处Spring的用途只是管理bean文件,代码如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"><!-- 依赖注入我们需要的Entity、Dao、Service --><bean id="movie" class="com.chi.film.Movie"></bean><bean id="jDOConfiguration" class="com.chi.util.JDOConfiguration"></bean><bean id="searchMovieDao" class="com.chi.dao.SearchMovieDaoImpl"><property name="jDOConfiguration"><ref bean="jDOConfiguration" /></property></bean>   <bean id="searchMovieService" class="com.chi.service.SearchMovieServiceImpl"><property name="searchMovieDao"><ref bean="searchMovieDao" /></property></bean><bean id="searchMovieAction" class="com.chi.action.SearchMovieAction"><property name="searchMovieService"><ref bean="searchMovieService" /></property></bean></beans>

至此,整个datanucleus+spring+struts构建完成

4. Junit测试

package com.chi.test;import javax.annotation.Resource;import org.junit.Assert;
import org.junit.Test;import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.chi.service.SearchMovieService;
import com.chi.util.JDOConfiguration;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")public class JDOTest {@Resourceprivate JDOConfiguration jDOConfiguration;public JDOConfiguration getjDOConfiguration() {return jDOConfiguration;}public void setjDOConfiguration(JDOConfiguration jDOConfiguration) {this.jDOConfiguration = jDOConfiguration;}@Resourceprivate SearchMovieService searchMovieService;public SearchMovieService getSearchMovieService() {return searchMovieService;}public void setSearchMovieService(SearchMovieService searchMovieService) {this.searchMovieService = searchMovieService;}@Testpublic void testUpdate(){               Assert.assertEquals(true, searchMovieService.minusNumber());}/* @Testpublic void testSave(){PersistenceManagerFactory pmf = jDOConfiguration.persistenceManagerFactory();PersistenceManager pm = pmf.getPersistenceManager();try {Query q=pm.newQuery("SELECT FROM " + Movie.class.getName() + " where id == 2 " );List<Movie> list = (List<Movie>)q.execute();System.out.println(list.size());} catch (Exception e) {e.printStackTrace();}finally{pm.close();pmf.close();}}*/
}

测试之后

成功的在功夫熊猫的MovieNumber增加1

5. 页面效果展示

6.注意 datanucleus中的类是纯pojo,必须在属性上方加上注释,如下图

package com.chi.film;import javax.jdo.annotations.Column;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.PrimaryKey;/*** Movie entity. @author MyEclipse Persistence Tools*/
@PersistenceCapable(table = "MOVIE")
public class Movie implements java.io.Serializable {// Fields@PrimaryKey@Column(name="Id")private Integer id;@Column(name="MovieName")private String movieName;@Column(name ="MovieNumber")private Integer movieNumber;// Constructors/** default constructor */public Movie() {}/** full constructor */public Movie(Integer id, String movieName, Integer movieNumber) {this.id = id;this.movieName = movieName;this.movieNumber = movieNumber;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getMovieName() {return this.movieName;}public void setMovieName(String movieName) {this.movieName = movieName;}public Integer getMovieNumber() {return this.movieNumber;}public void setMovieNumber(Integer movieNumber) {this.movieNumber = movieNumber;}@Overridepublic String toString() {return "Movie [id=" + id + ", movieName=" + movieName+ ", movieNumber=" + movieNumber + "]";}}

最后,struts.xml 和web.xml配置基本不变,需要出去hibernate部分。

详情可以见我的代码。

datanucleus+spring 的JDO操作 select save update delete相关推荐

  1. 数据操纵:SELECT, INSERT, UPDATE, DELETE

    1 SELECT 句法 2 3 SELECT [STRAIGHT_JOIN] 4 [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] 5 [ ...

  2. Hibernate Session中的save(),update(),delete(),saveOrUpdate() 细粒度分析

    Hibernate在对资料库进行操作之前,必须先取得Session实例,相当于JDBC在对资料库操作之前,必须先取得Connection实例, Session是Hibernate操作的基础,它不是设计 ...

  3. Create and Drop Database, Create, Alter and Drop Tables, Select, Insert, Update, Delete Commands

    此文仅做自我学习记录用!!! Introduction (Descriptive) Content:- Creating and Maintaining Tables, Objectives, The ...

  4. QT5 QSqlQuery的SELECT INSERT UPDATE DELETE命令用法

    1.QSqlQuery的SELECT查询记录用法: QSqlQuery q("SELECT * FROM departments");QSqlRecord rec = q.reco ...

  5. oracle execute immediate 报错,oracle中execute immediate的使用(select/insert/update/delete)...

    execute immediate的语法如下: execute immediate 'sql'; execute immediate 'sql_select' into var_1, var_2; e ...

  6. mysql 清除分区数据恢复_MySQL 误操作后数据恢复(update,delete忘加where条件)【转】...

    在数据库日常维护中,开发人员是最让人头痛的,很多时候都会由于SQL语句 写的有问题导致服务器出问题,导致资源耗尽.最危险的操作就是在做DML操作的时候忘加where条件,导致全表更新,这是作为运维或者 ...

  7. mysql 修改数据 where_MySQL 误删数据、误更新数据(update,delete忘加where条件)

    MySQL 误操作后数据恢复(update,delete忘加where条件) 关键词:mysql误删数据,mysql误更新数据 在数据库日常维护中,开发人员是最让人头痛的,很多时候都会由于SQL语句写 ...

  8. DataNucleus之JDO操作示例

    JDO(Java Data Object )是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象的标准化API.注意JDO是一种规范,而不是一个产品.而DataNucleus正是实现J ...

  9. Spring之数据库操作

    本文主要包括以下内容 spring+jdbc数据库操作 spring+jdbc声明事务处理 spring+hibernate声明事务处理 spring+jdbc数据库操作 方法 1.让自己写的一个da ...

最新文章

  1. Java类加载器详解
  2. 三菱modbusRTU通讯实例_干货 | 解析西门子系列PLC编程实例
  3. 针对行业需求服务优质客户 ,网易云信助金融行业“网上冲浪”
  4. OpenCV使用F变换进行修补
  5. 被VS Code牢牢圈粉了!
  6. Java生鲜电商平台-订单配送模块的架构与设计
  7. mux路由_使用大猩猩/ mux进行HTTP请求路由和验证
  8. 【opencv+python】下载安装教程
  9. 怎么用matlab显示噪声,怎么用MATLAB产生噪声调频信号
  10. 面试之MySQL调优问题
  11. Redis配置文件所在位置
  12. 解决了Microsoft Visual C++ Build Tools下载/解决Visual C++ 14.0 is required的问题
  13. matlab怎么表示x的平方,用matlab算多项式x平方
  14. Delphi使用CEF4Delphi制作Chromium谷歌内核浏览器
  15. hdu 2298 Radar 重复覆盖
  16. QQ小游戏接入问题:Uncaught TypeError: wx.saveFile is not a function
  17. matlab编写数学公式计算,关于MATLAB Function实现数学运算的相关介绍
  18. LeetCode - 500 - 键盘行(keyboard-row)
  19. 程序人生:请不要推卸责任
  20. shared_from_this的使用

热门文章

  1. LCD1602开始--麒麟座OK
  2. Angular:失焦校验和失焦方法冲突的解决方案 事件循环
  3. 微信公众平台针对iBeacon 增加摇一摇周边功能
  4. 流利阅读 2019.1.22 Top S. Korean animal rights group slammed for destroying dogs
  5. 文本相似度:Distributed Representations of Sentences and Documents
  6. android开发屏幕投射到电视6,用电视吃鸡!将手机上的内容投射到电视机的屏幕上!...
  7. 网易2019实习生招聘-数对
  8. SDHC 存储卡会导致刷机模式不被识别
  9. 有道翻译 翻译功能的功能实现
  10. Ansible主机清单inventory