datanucleus+spring 的JDO操作 select save update delete

来源:互联网 发布:淘宝店铺如何提高销量 编辑:程序博客网 时间:2024/05/18 09:11

最近学习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/context        http://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 {  @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 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部分。

详情可以见我的代码。







    

0 0
原创粉丝点击