一.数据库(Oracle)环境搭建
1.我将数据库放在了虚拟机里,XP系统.
安装Oracle注意事项:
1.如果是 win7 或者 win10 系统右键点击 setup.exe 选择兼容性,以 xp 方式,并且以管理员方式运行,以及其他所有用户都按着此规则如图
2.检查先决条件,选中红框所示的选择框,如下图:
3.完成后,出现“口令管理”界面,点击“口令管理”,如下图:
4.将 SCOTT 和 HR 用户的勾去掉(解锁这两个账户),如下图所示,点击“确定”:
5.测试是否安装成功
运行 cmd 进入命令行
Sqlplus 用户名/密码@ip 地址:1521/orcl [as sysdba]
2.配置网络:使虚拟机和本机在同一局域网,这样本机就能通过IP地址来访问虚拟机的Oracle数据库了.
注意事项
1.配置时使用同一个虚拟机网卡.
2.虚拟机中的网络配置和主机子网要在同一个网段
3.修 改 oracle 的两个核心文件中的IP地址为XP的IP,之后记得重启服务.
3.客户端连接oracle
工具:
1.instantclient_12_1
2.安装 PLSQL Developer
3.设置环境变量 TNS_ADMIN
4.解决中文乱码问题
1>查看服务器端编码select userenv('language') from dual;
5.创建用户ssm及授权
我实际查到的结果为:AMERICAN_AMERICA.ZHS16GBK
2>执行语句 select * from V$NLS_PARAMETERS
查看第一行中PARAMETER项中为NLS_LANGUAGE 对应的VALUE项中是否和第一步得到的值一样。如果不是,需要设置环境变量.否则PLSQL客户端使用的编码和服务器端编码不一致,插入中文时就会出现乱码.
3>设置环境变量
计算机->属性->高级系统设置->环境变量->新建
设置变量名:NLS_LANG,变量值:第1步查到的值, 我的是AMERICAN_AMERICA.ZHS16GBK
4>重新启动PLSQL,插入数据正常
二.建表
CREATE TABLE product(
id varchar2(32) default SYS_GUID() PRIMARY KEY,
productNum VARCHAR2(50) NOT NULL,
productName VARCHAR2(50),
cityName VARCHAR2(50),
DepartureTime timestamp,
productPrice Number,
productDesc VARCHAR2(500),
productStatus INT,
CONSTRAINT product UNIQUE (id, productNum)
)
insert into PRODUCT (id, productnum, productname, cityname, departuretime, productprice,
productdesc, productstatus)
values ('676C5BD1D35E429A8C2E114939C5685A', 'gxd-002', '北京三日游', '北京', to_timestamp('10-
10-2018 10:10:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'), 1200, '不错的旅行', 1);
insert into PRODUCT (id, productnum, productname, cityname, departuretime, productprice,
productdesc, productstatus)
values ('12B7ABF2A4C544568B0A7C69F36BF8B7', 'gxd-003', '上海五日游', '上海', to_timestamp('25-
04-2018 14:30:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'), 1800, '魔都我来了', 0);
insert into PRODUCT (id, productnum, productname, cityname, departuretime, productprice,
productdesc, productstatus)
values ('9F71F01CB448476DAFB309AA6DF9497F', 'gxd-001', '北京三日游', '北京', to_timestamp('10-
10-2018 10:10:00.000000', 'dd-mm-yyyy hh24:mi:ss.ff'), 1200, '不错的旅行', 1);
三.maven工程搭建
1.子父工程目录
2.父pom文件内容
4.0.0
com.gxd.gxd-ssm
gxd-ssm
pom
1.0-SNAPSHOT
5.0.2.RELEASE
1.6.6
1.2.12
10.2.0.4.0
3.4.5
5.0.1.RELEASE
org.aspectj
aspectjweaver
1.6.8
org.springframework
spring-aop
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-orm
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-core
${spring.version}
org.springframework
spring-test
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-tx
${spring.version}
junit
junit
4.12
test
javax.servlet
javax.servlet-api
3.1.0
provided
javax.servlet.jsp
jsp-api
2.0
provided
jstl
jstl
1.2
log4j
log4j
${log4j.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
slf4j-log4j12
${slf4j.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
1.3.0
c3p0
c3p0
0.9.1.2
jar
compile
com.github.pagehelper
pagehelper
5.1.2
org.springframework.security
spring-security-web
${spring.security.version}
org.springframework.security
spring-security-config
${spring.security.version}
org.springframework.security
spring-security-core
${spring.security.version}
org.springframework.security
spring-security-taglibs
${spring.security.version}
com.oracle
ojdbc14
${oracle.version}
org.apache.maven.plugins
maven-compiler-plugin
3.2
1.8
UTF-8
true
gxd-ssm-domain
gxd-ssm-service
gxd-ssm-dao
gxd-ssm-utils
gxd-ssm-web
3.各类配置文件
0>
contextConfigLocation
classpath*:applicationContext.xml,classpath*:spring-security.xml
org.springframework.web.context.ContextLoaderListener
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
1
dispatcherServlet
*.do
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
characterEncodingFilter
/*
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
1>applicationContext.xml
2>db.properties
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@192.168.107.10:1521:orcl
jdbc.username=ssm
jdbc.password=gxd
3>spring-mvc.xml
4.编写Dao层
public interface IProductDao {
@Select("select * from product")
List findAll() throws Exception;
}
5.编写实体层
package com.gxd.ssm.domain;
import com.gxd.ssm.utils.DateUtils;
import java.util.Date;
public class Product {
private String id; // 主键
private String productNum; // 编号 唯一
private String productName; // 名称
private String cityName; // 出发城市
private Date departureTime; // 出发时间
private String departureTimeStr;
private double productPrice; // 产品价格
private String productDesc; // 产品描述
private Integer productStatus; // 状态 0 关闭 1 开启
private String productStatusStr;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getProductNum() {
return productNum;
}
public void setProductNum(String productNum) {
this.productNum = productNum;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
public Date getDepartureTime() {
return departureTime;
}
public void setDepartureTime(Date departureTime) {
this.departureTime = departureTime;
}
public String getDepartureTimeStr() {
if (departureTime!=null)
{
departureTimeStr = DateUtils.date2String(departureTime,"yyyy-MM-dd HH:mm:ss");
}
return departureTimeStr;
}
public void setDepartureTimeStr(String departureTimeStr) {
this.departureTimeStr = departureTimeStr;
}
public double getProductPrice() {
return productPrice;
}
public void setProductPrice(double productPrice) {
this.productPrice = productPrice;
}
public String getProductDesc() {
return productDesc;
}
public void setProductDesc(String productDesc) {
this.productDesc = productDesc;
}
public Integer getProductStatus() {
return productStatus;
}
public void setProductStatus(Integer productStatus) {
this.productStatus = productStatus;
}
public String getProductStatusStr() {
if(productStatus != null)
{
if(productStatus==0)
{
productStatusStr="关闭";
}
if(productStatus==1)
{
productStatusStr="开启";
}
}
return productStatusStr;
}
public void setProductStatusStr(String productStatusStr) {
this.productStatusStr = productStatusStr;
}
}
6.编写service层
@Service
@Transactional
public class ProductServiceImpl implements IProductService {
@Autowired
IProductDao productDao;
@Override
public List findAll() throws Exception {
return productDao.findAll();
}
}
接口
public interface IProductService {
List findAll() throws Exception;
}
7.编写utils层
public class DateUtils {
//日期转换成字符串
public static String date2String(Date date, String patt)
{
SimpleDateFormat sdf = new SimpleDateFormat(patt);
String format = sdf.format(date);
return format;
}
//字符串转换成日期
public static Date String2Date(String str,String patt) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(patt);
Date date = sdf.parse(str);
return date;
}
}
8.编写web层(我用AdminLTE框架)
1>控制器
@Controller
@RequestMapping("/product")
public class ProductController {
@Autowired
IProductService productService;
@RequestMapping("/findAll.do")
public ModelAndView findAll() throws Exception {
ModelAndView mv = new ModelAndView();
List ps = productService.findAll();
mv.addObject("productList",ps);
mv.setViewName("product-list");
return mv;
}
}
2>前端
3>pom配置服务器插件
org.apache.tomcat.maven
tomcat7-maven-plugin
8888
2.2
效果
9.添加商品
问题一:spring MVC日期类型转换问题
解决:@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
控制层:
@RequestMapping("/save.do")
public String save(Product product)
{
productService.save(product);
return "redirect:findAll.do";
}
业务层:
//接口
void save(Product product);
//实现类
@Override
public void save(Product product) {
productDao.save(product);
}
数据访问层:
@Insert("insert into product(productNum,productName,cityName,departureTime,productPrice,productDesc,productStatus) values(#{productNum},#{productName},#{cityName},#{departureTime},#{productPrice},#{productDesc},#{productStatus})")
void save(Product product);