eclipse ProductSystem运用注解完成项目

第一步:导包

第二步web.xml配置监听器和过滤器

  <display-name>news</display-name>
  <welcome-file-list>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value> <!--这里是告诉程序src里有一个应用文件-->
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

第三步 应用文件applicationContext.xml这里要导入一些外部文件jdbc.properties、persistence.xml、

<?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:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">

    <!-- 原理:自动注入processor解析器,用来解析注解 -->
    <!-- <context:annotation-config/> -->

    <!-- 自动扫描包,也会自动注入解释器,所以不需要 context:annotation-config -->
    <context:component-scan base-package="product" /><!-- 这里扫描的是各个包的前命如product.dao、product.service、product.action、product.eitity-->

    <!-- 引入外部属性文件 -->
    <context:property-placeholder location="classpath:jdbc.properties" /><!--告诉有一个外部文件,这个外部文件是给用户使用的,用于配置连接数据库的相关信息-->

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="s3s124"></property>
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <!-- 注入连接池,包含了数据库用户名,密码等等信息 -->
        <property name="dataSource" ref="myDataSource" />

        <!-- 配置Hibernate的其他的属性 -->
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.connection.autocommit">false</prop>
                <!-- 开机自动生成表 -->
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
        <property name="mappingResources">
            <list>

            </list>
        </property>

        <property name="packagesToScan">
            <list>
                <value>product.*</value><!--这个也是用于扫描所有包的-->
            </list>
        </property>

    </bean>

    <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <property name="user" value="${jdbc.user}" />
        <property name="password" value="${jdbc.password}" />
        <!-- 每300秒检查所有连接池中的空闲连接 -->
        <property name="idleConnectionTestPeriod" value="300"></property>
        <!-- 最大空闲时间,900秒内未使用则连接被丢弃。若为0则永不丢弃 -->
        <property name="maxIdleTime" value="900"></property>
        <!-- 最大连接数 -->
        <property name="maxPoolSize" value="2"></property>

    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean><!--这个给注入sessionFactory事例-->

    <tx:annotation-driven transaction-manager="transactionManager"/>

</beans>
            

jdbc.properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/news
jdbc.user=root
jdbc.password=123456

#oracle
jdbc_oracle.driver=oracle.jdbc.driver.OracleDriver
jdbc_oracle.url=jdbc:oracle:[email protected]:1521:orcl
jdbc_oracle.user=news
jdbc_oracle.password=123456

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                        http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <!--必须要有name属性,不能为空 -->
    <persistence-unit name="s3s124" transaction-type="RESOURCE_LOCAL">
        <!--可选 -->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <!--可选 -->
        <class>product.entity.Product</class>

        <!--厂商的特定属性 -->
        <properties>
            <!--配置Hibernate方言 -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
            <!--配置数据库驱动 -->
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            <!--配置数据库用户名 -->
            <property name="hibernate.connection.username" value="root" />
            <!--配置数据库密码 -->
            <property name="hibernate.connection.password" value="123456" />
            <!--配置数据库url -->
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/news" />

            <property name="hibernate.show_sql" value="true" />
            <!--自动输出schema创建DDL语句 -->
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>

</persistence>

messageResource_en_US.properties英语

#\u4EA7\u54C1\u540D\u5B57\uFF1A
proName=Product name
#\u4EA7\u54C1\u4EF7\u683C
proPrice=Product price
#\u4EA7\u54C1\u6570\u91CF
proCount=Product count
#\u4EA7\u54C1\u63CF\u8FF0
proDesc=Product Description

messageResource_zh_CN.properties中文

#\u4EA7\u54C1\u540D\u5B57\uFF1A
proName=\u4EA7\u54C1\u540D\u5B57
#\u4EA7\u54C1\u4EF7\u683C
proPrice=\u4EA7\u54C1\u4EF7\u683C
#\u4EA7\u54C1\u6570\u91CF
proCount=\u4EA7\u54C1\u6570\u91CF
#\u4EA7\u54C1\u63CF\u8FF0
proDesc=\u4EA7\u54C1\u63CF\u8FF0

第四步:创建四个包和内部文件

1、product.action包的Product.java

package product.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="t_product")//这个是创表的注解,里面是对应的表名
public class Product {
    private    Integer proId;
    private String proName;
    private Float proPrice;
    private Integer proCount;
    private String proDesc;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)//这个是主键
    public Integer getProId() {
        return proId;
    }
    public void setProId(Integer proId) {
        this.proId = proId;
    }

    @Column(name="proName",nullable=false,length=50)
    public String getProName() {
        return proName;
    }
    public void setProName(String proName) {
        this.proName = proName;
    }

    @Column(name="proPrice",nullable=false)
    public Float getProPrice() {
        return proPrice;
    }
    public void setProPrice(Float proPrice) {
        this.proPrice = proPrice;
    }

    @Column(name="proCount",nullable=false)
    public Integer getProCount() {
        return proCount;
    }
    public void setProCount(Integer proCount) {
        this.proCount = proCount;
    }

    @Column(name="proDesc",nullable=false,length=250)
    public String getProDesc() {
        return proDesc;
    }
    public void setProDesc(String proDesc) {
        this.proDesc = proDesc;
    }

}

2.product.dao的接口proDao

package product.dao;

import java.util.List;

import product.entity.Product;

public interface ProDao {
    public List<Product> getAllPro();

    public void delPro(Integer proId[]);

    public String addProduct(Product product);
}

proDaoImpl实现类

package product.dao;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
//import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;

import product.entity.Product;

@Repository
@Scope("prototype")
public class ProDaoImpl implements ProDao {
    @Autowired
    @Qualifier("sessionFactory")
    private SessionFactory sessionFactory;

    //@Autowired
    //@Qualifier("entityManagerFactory")
    //private EntityManagerFactory entityManagerFactory;//获取实例有2个方法:1.自己写代码   2.spring注入

    @Override
    public List<Product> getAllPro() {
        Session session = sessionFactory.getCurrentSession();
        Query query = session.createQuery("from Product");
        List<Product> list = query.getResultList();
        return list;
    }

    @Override
    public void delPro(Integer proId[]) {
        // TODO Auto-generated method stub

        Session session = sessionFactory.getCurrentSession();

        Query<Product> query = session.createQuery("from Product where proId=:myid");
        //System.out.println("proId:"+proId);
        for(Integer id : proId){
            query.setParameter("myid", id);

            if(query.getResultList().size()>0){
                Product pro = query.getResultList().get(0);
                session.delete(pro);
            }

        }
    }

    @Override
    public String addProduct(Product product) {
        Session session = sessionFactory.getCurrentSession();
        session.save(product);
        return "ok";
    }

}

3.product.service包的接口proService

package product.service;

import java.util.List;

import product.entity.Product;

public interface ProService {
    public List<Product> getAllPro();

    public void delPro(Integer proId[]);

    public String addProduct(Product product);
}

proServiceImpl实现类

package product.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import product.dao.ProDao;
import product.entity.Product;

@Transactional
@Service
@Scope("prototype")
public class ProServiceImpl implements ProService {
    @Autowired
    private ProDao pd;

    @Override
    @Transactional(readOnly=true)
    public List<Product> getAllPro() {
        // TODO Auto-generated method stub
        return pd.getAllPro();
    }

    @Override
    public void delPro(Integer proId[]) {
        //System.out.println("proId:"+proId);
        pd.delPro(proId);
    }

    @Override
    public String addProduct(Product product) {
        //本例不包含其它的业务逻辑代码,直接调用dao进行保存

        return pd.addProduct(product);
    }

}

4.product.action的proAction

package product.action;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import product.entity.Product;
import product.service.ProService;

@SuppressWarnings("serial")
@Controller("proAction")//这里和struts.xml里的<action>的class=“proAciton”对应
@Scope("prototype")
public class ProAction extends ActionSupport implements ModelDriven<Product>{
    @Autowired
    private ProService ps;

    private Integer[] proIds;

    public void setProIds(Integer[] proIds) {
        this.proIds = proIds;
    }

    //驱动模式
    private Product product;
    public void setProduct(Product product) {
        this.product = product;
    }

    public String showAllPro() {
        List<Product> proList = ps.getAllPro();
        ActionContext.getContext().put("proList", proList);
        return "data";
    }

    public String delPro() {
        System.out.println("123456");
        ps.delPro(proIds);
        return "deleteOK";
    }

    // 跳转到添加页面(PS.其实可以不用,直接用JSP代替也行)
    public String addProduct_view() {
        // 这里可以插入其它代码,比如:日志跟踪
        return "addProduct_view";
    }

    // 跳转到添加页面(PS.其实可以不用,直接用JSP代替也行)
    public String addProduct_deal() {
        //1.获取客户端提交上来的数据(采用字段模式,或者驱动模式,struts会自动帮我们赋值)
        System.out.println("product.getProName():"+product.getProName());

        //2.校验条件的数据是否正确(不需要写代码,服务端校验的配置文件)
             //返回错误
        //3.呼叫service,进行页面逻辑代码的处理,然后dao保存到数据库
             //返回错误
        String resutlDeal = ps.addProduct(product);
        if ("ok".equals(resutlDeal)){
            //4.成功插入到数据库后,跳转到首页的action,重新显示最新的数据
            return "addProduct_success";
        }
        else{
            //失败,跳转到失败页面去
            return "addProduct_failed";
        }
    }

    @Override
    public Product getModel() {
        this.product =new Product();
        return product;
    }

}

第五步:struts2.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <constant name="struts.objectFactory" value="spring" />

    <constant name="struts.ui.theme" value="simple"></constant>

    <constant name="struts.custom.i18n.resources" value="messageResource"></constant>

    <!-- 第1步:先定义一个包 -->
    <package name="mypck001" extends="struts-default">
        <action name="ProAction_*" class="proAction" method="{1}"><!--这里name=“文件里的_某个”  class=“@Controller("proAction")注解里的” method=“里面的方法一般是showall……(){}”-->
            <result name="data">/WEB-INF/jsp/index.jsp</result>
            <result name="addProduct_view">/WEB-INF/jsp/addProduct.jsp</result>
            <result name="deleteOK" type="redirectAction">ProAction_showAllPro</result>
            <result name="addProduct_success" type="redirectAction">ProAction_showAllPro</result>
        </action>
    </package>

</struts>

第六步:创建default.jsp、addProduct.jsp和index.jsp

1.default.jsp这个是完成跳转的该文件在WEB-INF下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    response.sendRedirect("ProAction_showAllPro.action");
%>

2.index.jsp该文件在WEB-INF/jsp下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>welcome</title>
</head>
<body>
    <s:form action="ProAction_delPro">
        <table border="1">
            <s:iterator value="proList">
                <tr>
                    <td><s:checkbox name="proIds" value="false" fieldValue="%{proId}" /></td>
                    <td><s:property value="proName"/></td>
                    <td><s:property value="proPrice"/></td>
                    <td><s:property value="proCount"/></td>
                    <td><s:property value="proDesc"/></td>
                </tr>
            </s:iterator>
            <tr>
                <td colspan="5"><s:submit label="删除" /></td>
            </tr>
            <tr>
                <td colspan="5"><s:a href="ProAction_addProduct_view.action">添加</s:a></td>
            </tr>

        </table>
    </s:form>
</body>
</html>

3.addProduct.jsp该文件在WEB-INF/jsp下

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
添加页面

<s:form action="ProAction_addProduct_deal.action">
<s:text name="proName"></s:text>:<s:textfield id="proName" name="proName"></s:textfield><br>
<s:text name="proPrice"></s:text>:<s:textfield id="proPrice" name="proPrice"></s:textfield><br>
<s:text name="proCount"></s:text>:<s:textfield id="proCount" name="proCount"></s:textfield><br>
<s:text name="proDesc"></s:text>:<s:textfield id="proDesc" name="proDesc"></s:textfield><br>

<s:submit value="提交"></s:submit>

</s:form>
</body>
</html>

第六步:运行

entity注解自动创表,我们使用的是然后我们手动插入几条数据

insert into t_product(proName,proPrice,proCount,proDesc) values(‘aaa‘,123,3,‘xiaolj‘);
insert into t_product(proName,proPrice,proCount,proDesc) values(‘aaa‘,123,3,‘xiaolj‘);
insert into t_product(proName,proPrice,proCount,proDesc) values(‘aaa‘,123,3,‘xiaolj‘);
insert into t_product(proName,proPrice,proCount,proDesc) values(‘aaa‘,123,3,‘xiaolj‘);

运行后如下

点击添加

输入信息

得到

这个就这样完成了

<!---->
时间: 2024-11-06 19:53:17

eclipse ProductSystem运用注解完成项目的相关文章

使用Eclipse构建Maven的SpringMVC项目

使用Eclipse构建Maven的SpringMVC项目 ? 用maven的好处: 1 最主要就是自动下载jar包和它所依赖的包, 2保证多人开发时jar版本不同的问题 3 文件结构清晰,java文件,资源文件,测试文件都分的很清楚. 将介绍两种方法:一,直接建立Maven项目方法:二.建立Dynamic Web project转成Maven项目方法. ?? ? ? ?将介绍两种方法:一,直接建立Maven项目方法:二.建立Dynamic Web project转成Maven项目方法. 一.直接

Eclipse Maven构建Spring MVC项目

工作中项目开发使用Maven管理项目的构建.打包.编译,框架采用的是Spring MVC框架,并且实现了多模块.多项目的管理.自己也简单的参与了架构的设计.对于初学者来说,使用Maven构建项目并不是一件容易的事情,本文的目的就是引导新手使用maven构建springmvc项目. 准本工作 1.Eclipse 尽量选用较高版本的Eclispse,因为eclipse对于maven的支持比较晚. 2.Maven 安装maven,至于其安装方式这里也就不再多提了,请自行google. 3.Eclips

Hadoop1.x目录结构及Eclipse导入Hadoop源码项目

这是解压hadoop后,hadoop-1.2.1目录 各目录结构及说明: Eclipse导入Hadoop源码项目: 注意:如果没有ant的包可以去网上下,不是hadoop里面的. 然后如果通过以上还报错的话,可以右键点击项目,然后如下图(配置**/*):

Eclipse使用Maven构建web项目

Eclipse使用Maven构建web项目 博客分类: J2EE 1.创建Maven项目: 点击“File”菜单,或者通过工具栏的“New”创建Project,如下图所示: 选择Maven->Maven Project,弹出向导对话框,如下图所示: 选中Create a simple project……复选框,其它的设置不变,并点击Next,输入maven项目必须的信息(groupId,artifactid,version),如下图所示: 这里需要选择Packaging,web项目一般选择war

Eclipse导入MyEclipseproject(web项目显示为java项目解决的方法)

在直接Import MyEclipse的项目文件导入到Eclipse之后,须要在项目所放的workspace内改动引入项目文件夹下的.project文件,改动例如以下: 1.在eclipse中新建一个WEB项目将根文件夹下下的.project文件覆盖到导出的项目相同文件夹下, 2.打开导入项目的.project文件,改动下<name>test</name>中间的值就可以 之后,刷新项目project文件.继而,右键项目-->Properties-->选择Project

【转载】如何从Eclipse导入github上的项目源码

如何从Eclipse导入github上的项目源码 分类: Android2013-02-03 10:04 21027人阅读 评论(15) 收藏 举报 1.首先在github.com上申请一个账号,比如笔者的账号为puma0072.Eclipse需要安装egit插件,在Eclipse中选择help->Marketplace,在search中输入egit,找到后安装即可3.在github上找到你要导入的源码项目,比如笔者以oschina的Android客户端为例,网址:https://github.

Intellij IDEA 导入Eclipse或MyEclipse的Web项目(旧版 转载)

Intellij IDEA 导入Eclipse或MyEclipse的Web项目 博客分类: Intellig IDEA Intellij IDEAEclipseWeb Intellij IDEA 导入Eclipse或MyEclipse的Web项目 1.通过TortoiseSVN客户端将远程项目checkout出来,保存到硬盘上 2.File -> Import Module -> 选择之前检出的项目 3.进入"Import Module"窗口,选择"Import

Android 如何编写基于编译时注解的项目

本文已在CSDN<程序员>杂志刊登. 本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/51931859: 本文出自:[张鸿洋的博客] 一.概述 在Android应用开发中,我们常常为了提升开发效率会选择使用一些基于注解的框架,但是由于反射造成一定运行效率的损耗,所以我们会更青睐于编译时注解的框架,例如: butterknife免去我们编写

有时候在Eclipse中打开或者导入项目时会出现很多红叉叉

The type java.lang.Object cannot be resolved 有时候在Eclipse中打开或者导入项目时会出现标题字样的问题:The type java.lang.Object cannot be resolved. It is indirectly referenced.本文介绍解决此问题经验. 方法/步骤 1 此问题从字面上理解是:java.lang.Object不能识别为一个类,请导入相关依赖文件.java.lang.Object是java中最基础的类.为什么E