datanucleus+spring 的JDO操作 select save update delete

最近学习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;
	  }
	
	@Override
	public 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.xsd
	http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
	http://www.springframework.org/schema/aop 
	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
	http://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 {
	  @Resource
	  private JDOConfiguration jDOConfiguration;
	  
      
      public JDOConfiguration getjDOConfiguration() {
		  return jDOConfiguration;
	  }

	  public void setjDOConfiguration(JDOConfiguration jDOConfiguration) {
		  this.jDOConfiguration = jDOConfiguration;
	  }
	     @Resource
	     private SearchMovieService searchMovieService;
		  public SearchMovieService getSearchMovieService() {
				return searchMovieService;
		  }

		public void setSearchMovieService(SearchMovieService searchMovieService) {
			this.searchMovieService = searchMovieService;
		}
		
		@Test
	      public void testUpdate(){			   
	    	  Assert.assertEquals(true, searchMovieService.minusNumber());
	      }
      
     /* @Test
      public 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 accessors

	public 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;
	}

	@Override
	public String toString() {
		return "Movie [id=" + id + ", movieName=" + movieName
				+ ", movieNumber=" + movieNumber + "]";
	}

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

详情可以见我的代码。







    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值