SSH+Oracle的整合(SSH与Oracle整合坑巨多)

Posted 话森林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSH+Oracle的整合(SSH与Oracle整合坑巨多)相关的知识,希望对你有一定的参考价值。

这里用SSH+Oracle做一个仓库管理系统,其中包含了查询、条件查询、删除、批量删除、修改、添加的功能。值得注意的是,Oracle与其它数据库存在很多不同之处,所以SSH和Oracle整合的时候小细节处理稍有不慎,就要花费大量时间去排查,亲身体会!

下面进入正文 ↓↓↓↓

Oracle数据库:

goods.sql

注意:创建表的时候,无论表名大写小写,创建完成时都会默认设置成大写。

--创建仓库表
create table goods
(
       Gno number not null primary key, --编号
       gname varchar2(500) not null,  --物质名称
       gtype varchar2(20) not null,   --物质类型
       Gnumber number not null check (Gnumber > 0),       --物质数量
       Gcompany varchar2(500) not null, --生产商
       Gcreatetime date default sysdate,       --生产日期
       Uintime date default sysdate   --入库时间
);
drop table goods;
--创建自增序列
create sequence goods_id
increment by 1  --增量为1
start with 1    --从1开始生成序列
nomaxvalue;      --没有最大值

--插入数据
insert into goods(Gno,gname,gtype,gnumber,gcompany) values(goods_id.nextval,\'康师傅方便面\',\'食品\',\'150000\',\'康师傅食品有限公司\');
insert into goods(Gno,gname,gtype,gnumber,gcompany) values(goods_id.nextval,\'康师傅矿泉水\',\'饮用水\',\'150000\',\'康师傅食品有限公司\');
insert into goods(Gno,gname,gtype,gnumber,gcompany) values(goods_id.nextval,\'康师傅辣条\',\'食品\',\'150000\',\'康师傅食品有限公司\');
insert into goods(Gno,gname,gtype,gnumber,gcompany) values(goods_id.nextval,\'康师傅可乐\',\'食品\',\'150000\',\'康师傅食品有限公司\');
insert into goods(Gno,gname,gtype,gnumber,gcompany) values(goods_id.nextval,\'康师傅面包\',\'食品\',\'150000\',\'康师傅食品有限公司\');

select * from goods;

select * from goods order by gcreatetime desc;

commit;

 

SSH:

包结构:

 

idea中数据库插件配置:

 

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.hsl</groupId>
    <artifactId>Goods</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <!--spring-->
        <!-- 这个依赖可以让spring容器有bean管理,依赖注入,基本的切面配置功能,但不支持切点表达式以及其解析-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
        <!-- 让spring支持切点表达式功能-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.13</version>
        </dependency>
        <!-- 这个依赖是spring专门用来与其他持久层框架进行整合用的一个依赖里面有LocalSessionFactoryBean类型-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
        <!-- 此依赖有事务方面的通知,事务管理器等 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>

        <!--hibernate-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.10.Final</version>
        </dependency>

        <!--struts-->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.5.12</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.5.12</version>
        </dependency>

        <!--oracle-->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency>


        <!-- 这是dbcp连接池依赖,完全可以换别的连接池组件-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.2.0</version>
        </dependency>

        <!--<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>-->

    </dependencies>

    <build>
        <plugins>
            <!--用于设定源代码文件的编码,以及项目代码运行的目标jdk版本为1.8 -->
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!-- 指定项目中web资源的根目录,用于maven打包时把此目录的所有内容拷贝到war中-->
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <warSourceDirectory>web</warSourceDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

 

Goods.java

package entity;

import java.util.Date;

public class Goods {

    private int Gno ; //编号
    private String gname ;  //物质名称
    private String gtype ;  //物质类型
    private int Gnumber ;  //物质数量
    private String Gcompany ;  //生产商
    private Date Gcreatetime ;  //生产日期
    private Date Uintime ;  //入库时间

    public int getGno() {
        return Gno;
    }

    public void setGno(int gno) {
        Gno = gno;
    }

    public String getGname() {
        return gname;
    }

    public void setGname(String gname) {
        this.gname = gname;
    }

    public String getGtype() {
        return gtype;
    }

    public void setGtype(String gtype) {
        this.gtype = gtype;
    }

    public int getGnumber() {
        return Gnumber;
    }

    public void setGnumber(int gnumber) {
        Gnumber = gnumber;
    }

    public String getGcompany() {
        return Gcompany;
    }

    public void setGcompany(String gcompany) {
        Gcompany = gcompany;
    }

    public Date getGcreatetime() {
        return Gcreatetime;
    }

    public void setGcreatetime(Date gcreatetime) {
        Gcreatetime = gcreatetime;
    }

    public Date getUintime() {
        return Uintime;
    }

    public void setUintime(Date uintime) {
        Uintime = uintime;
    }
}

 

GoodsDao.java

package dao;

import entity.Goods;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;

import java.util.Date;
import java.util.List;

public class GoodsDao {
    private SessionFactory sessionFactory;

    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    //查询全部
    public List<Goods> getAll(){
        Session session = sessionFactory.getCurrentSession();
        String sql = "from Goods as g order by g.Gcreatetime desc";
        return session.createQuery(sql).list();
    }

    //增加
    public void addGoods(Goods goods){
        Session session = sessionFactory.getCurrentSession();
        session.save(goods);
    }

    //删除
    public void delete(int Gno){
        Session session = sessionFactory.getCurrentSession();
        session.delete(session.get(Goods.class,Gno));
    }

    //根据编号查询
    public Goods getById(int Gno){
        Session session = sessionFactory.getCurrentSession();
        return session.get(Goods.class,Gno);
    }

    //修改
    public void update(Goods goods){
        Session session = sessionFactory.getCurrentSession();
        session.update(goods);
    }

    //按条件查询
    public List<Goods> getByTerm(String gname, Date firstTime,Date lastTime){
        Session session = sessionFactory.getCurrentSession();
        String hql = "from Goods g where g.gname like :gname and g.Gcreatetime between :firstTime and :lastTime";
        Query query = session.createQuery(hql);
        query.setParameter("gname","%"+gname+"%");
        query.setParameter("firstTime",firstTime);
        query.setParameter("lastTime",lastTime);
        return query.list();

    }

    //批量删除
    public void deleteAll(String[] Gno){
        Session session = sessionFactory.getCurrentSession();
        for(int i=0;i<Gno.length;i++){
            Goods goods = this.getById(Integer.parseInt(Gno[i]));
            session.delete(goods);
        }
    }

}

 

 GoodsService.java

package service;

import dao.GoodsDao;
import entity.Goods;

import java.util.Date;
import java.util.List;

public class GoodsService {
    private GoodsDao goodsDao;

    public GoodsDao getGoodsDao() {
        return goodsDao;
    }

    public void setGoodsDao(GoodsDao goodsDao) {
        this.goodsDao = goodsDao;
    }

    public List<Goods> getAll(){
        return goodsDao.getAll();
    }

    public void addGoods(Goods goods){
        goodsDao.addGoods(goods);
    }

    public void delete(int Gno){
        goodsDao.delete(Gno);
    }

    public Goods getById(int Gno){
        return goodsDao.getById(Gno);
    }

    public void update(Goods goods){
        goodsDao.update(goods);
    }

    public List<Goods> getByTerm(String gname, Date firstTime, Date lastTime){
        return goodsDao.getByTerm(gname,firstTime,lastTime);
    }

    public void deleteAll(String[] Gno){
        goodsDao.deleteAll(Gno);
    }
}

 

GoodsController.java

package controller;

import com.opensymphony.xwork2.ActionContext;
import entity.Goods;
import service.GoodsService;

import java.util.Date;
import java.util.List;

public class GoodsController {
    private GoodsService goodsService;

    private Goods goods;

    private Date firstTime;
    private Date lastTime;
    private String Gnos;

    public String getGnos() {
        return Gnos;
    }

    public void setGnos(String gnos) {
        Gnos = gnos;
    }

    public Date getFirstTime() {
        return firstTime;
    }

    public void setFirstTime(Date firstTime) {
        this.firstTime = firstTime;
    }

    public Date getLastTime() {
        return lastTime;
    }

    public void setLastTime(Date lastTime) {
        this.lastTime = lastTime;
    }

    public Goods getGoods() {
        return goods;
    }

    public void setGoods(Goods goods) {
        this.goods = goods;
    }

    public GoodsService getGoodsService() {
        return goodsService;
    }

    public void setGoodsService(GoodsService goodsService) {
        this.goodsService = goodsService;
    }

    //查询全部
    public String list(){
        List<Goods> goods = goodsService.getAll();
        ActionContext.getContext().put("goods",goods);
        return "list";
    }
    //添加商品
    public String add(){
        goodsService.addGoods(goods);
        return "success";
    }
    //删除商品
    public String delete(){
        goodsService.delete(goods.getGno());
        return "success";
    }
    //批量删除
    public String deleteAll(){
        System.out.println(Gnos);
        String[] gnos = Gnos.split(",");
        goodsService.deleteAll(gnos);
        return "success";
    }
    //查询要修改的商品
    public String edit(){
        Goods goods1 = goodsService.getById(goods.getGno());
        ActionContext.getContext().put("goods1",goods1);
        return "edit";
    }
    //修改商品
    public String update(){
        goodsService.update(goods);
        return "success";
    }

    //按条件查询
    public String getByTerm(){
        List<Goods> goods2 = goodsService.getByTerm(goods.getGname(),firstTime,lastTime);
        ActionContext.getContext().put("goods",goods2);
        return "list";
    }
}

 

Goods.hbm.xml

注意:

  1.table需要写全称。

  2.dynamic-insert和dynamic-update表示是否启动默认值,如果没有设置true则数据库中默认的字段会为空。

  3.主键生成策略为increment,其它无效,不知道为什么。

<?xml version=\'1.0\' encoding=\'utf-8\'?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="entity">

    <class name="entity.Goods" table="SCOTT.GOODS" dynamic-insert="true" dynamic-update="true" >
        <id name="Gno" column="Gno">
            <generator class="increment">
                <!--<param name="sequence">GOODS_ID</param>-->
            </generator>
        </id>
        <property name="gname" column="gname"/>
        <property name="gtype" column="gtype"/>
        <property name="Gnumber" column="Gnumber"/>
        <property name="Gcompany" column="Gcompany"/>
        <property name="Gcreatetime" column="Gcreatetime"/>
        <property name="uintime" column="uintime"/>
    </class>
</hibernate-mapping>

 

db.properties

url=jdbc:oracle:thin:@localhost:1521:orcl
driverclass=oracle.jdbc.driver.OracleDriver
username=SCOTT
password=tiger

 

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

    <context:property-placeholder location="classpath:db.properties" local-override="true"/>
    <ssh整合oracle数据源报错????

SSH(Spring+struts2+hibernate)整合版详解

springmvc+mybatis+spring 整合 bootstrap html5 mysql oracle SSM框架源码 SSH maven

springmvc+mybatis+spring 整合 bootstrap html5 mysql oracle SSM框架源码 SSH maven

springmvc4 mybatis 整合 框架源码 bootstrap html5 mysql oracle sqlsever spring SSM SSH

springmvc4 mybatis 整合 框架源码 bootstrap html5 mysql oracle sqlsever spring SSM SSH