图书管理系统功能:登陆、查询、借书、还书(示例只实现了登陆功能)
数据库软件:SQL Server 2005
IDE:Eclipse
JDK:jdk1.8.0_144
Tomcat:apache-tomcat-8.5.29
在Eclipse中部署Tomcat:Window-->preferences-->server-->Runtime Environments-->Add-->选择你的Tomcat所在目录
1)书籍信息表Book
BookID BookName Stock(书籍库存)
2)学生信息表 Student
StudentID StudentName Password
3)借阅记录表 BorrowingRecord
RecordID BookID StudentID
除Stock是int类型外,其他都是nchar(10)类型
在SQL Server 2005中建立外键约束:
一个表中的主键可以作为另一个表的外键。右键外键表-->关系-->添加-->点击表和列规范后的“...”图标。
1、什么是Maven
Apache Maven是一个项目管理和整合工具。基于工程对象模型的概念(POM),通过一个中央信息管理模块,Maven能够管理项目的构建、报告和文档。
Maven工程结构和内容被定义在一个xml文件中——pom.xml,是Project Object Model的简称,此文件是Maven系统的基础组件。
2、为什么要用Maven
当我们创建一个Maven项目后,就不需要自己去导入各种jar包了,将要导入的jar包依赖信息配置在pom.xml中,Maven项目会根据具体的配置自动在编译、测试和运行的时候从本地仓库中导入相应的各种依赖。
这样做有两个最大的好处:一是项目的依赖被统一管理,不容易出现依赖冲突(比如说jar包引入的版本冲突);另一个就是项目的体积变小了,毕竟一个稍微大些的项目光是引入的jar包就占了相当多的体积,而Maven项目只需要一个pom.xml文件就搞定了。
这里有两个问题:
1)pom.xml文件的
2)之前说过使用Maven管理项目不需要自行导入jar包,只需添加依赖,项目会到本地的maven仓库中找相应的jar包,若本地仓库中没有,maven会自动下载至仓库中。仓库中的jar包可供所有项目使用。此处有两个问题:①maven下载大量的jar包,导致某盘不够用,需要更换更大的分区。Eclipse自带的Maven插件,其仓库默认是在C盘的,这就更不好了。可以通过Window-->Preferences-->Maven-->User Settings来查看和更改仓库的默认路径。②并不是所有的jar包Maven都能自行下载成功的,比如我用的连接SQL Server数据库的sqljdbc4.jar Maven就不能下载成功(具体原因我也不知道...),这时就需要我们自行下载,然后放到maven的仓库中去。(注意,maven的jar包管理是分类的,不能直接将下载好的jar包丢在根目录下,应该寻找它应处的正确位置。比如sqljdbc4.jar存在com-->microsoft-->sqlserver-->sqljdbc4-->4.0目录下,虽然maven没有下载成功,但是在该目录下已经有两个.lastUpdated文件)
约定优于配置
Maven使用约定而不是配置,开发者不需要再关心每一个配置细节。当创建Maven工程时,Maven会创建默认的工程结构,开发者只需要合理的放置文件,并在pom.xml中添加项目相关的依赖。
使用Maven创建项目,默认分为以下几个文件夹:
src/main/java 用来存放项目源码
src/main/resources 存放资源文件,比如.properties文件
src/test/java 存放测试用的代码
src/test/resources 存放测试用的资源文件
target/classes 编译后的文件
target/test-classes 编译后用于测试的文件
使用Eclipse的Maven插件创建并管理项目。File-->New-->Maven Project
在网上看的都说要自行下载并配置Maven,但是我看Eclipse上有,就没有下载,不知道两者有什么差别。
在Eclipse上用Maven创建一个Web项目教程:http://www.cnblogs.com/leiOOlei/p/3361633.html
1、基本概念
SSM框架是Spring、SpringMVC、MyBatis框架的整合,是标准的MVC模式,将整个系统划分为表现层、controller层、service层和DAO层。使用SpringMVC负责请求的转发和视图管理,Spring实现业务对象管理,MyBatis作为数据对象的持久化引擎。
1)Spring 是一个于2003年兴起的轻量级Java开发框架,是为了解决企业应用开发的复杂性创建的。Spring能使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发,从简单性、可测试性、松耦合的角度而言,任何Java应用都能从Spring中受益。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。我们平时开发接触最多的估计就是IoC容器,它可以装载Bean(也就是Java中的类),有了这个机制,我们就不用在每次使用这个类的时候为它初始化,很少看见关键字new。另外,Spring的AOP,事务管理等等都是我们经常用到的(这两个方面我还不是很懂)。
AOP:面向切面编程,是面向对象开发的一种补充,它允许开发人员在不改变原来模型的基础上动态的修改模型以满足新的需求,如动态的增加日志、安全或异常处理等。AOP使业务逻辑各部分间的耦合度降低,提高程序的可重用性,提高开发效率。
2)SpringMVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
3)MyBatis 是一个基于Java的持久层框架,消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置或原始映射,将接口和Java的POJOs(普通的Java对象)映射成数据库中的记录。MyBatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,其中配置了每个类对数据库所需进行的sql语句映射,在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
2、SSM整合
这次整合分了两个配置文件:spring-mybatis.xml和spring-mvc.xml文件
一个资源文件:jdbc.properties文件
都放在src/main/resources文件夹下。
1)引入jar包(在我的pom.xml文件中都有,就不一一列举了)
4.0.0
org.LibraryManage
LibraryManage
war
0.0.1-SNAPSHOT
LibraryManage Maven Webapp
http://maven.apache.org
4.3.5.RELEASE
junit
junit
3.8.1
test
javax
javaee-api
7.0
org.springframework
spring-core
${haha.version}
org.springframework
spring-web
4.3.5.RELEASE
org.springframework
spring-oxm
4.3.5.RELEASE
org.springframework
spring-tx
4.3.5.RELEASE
org.springframework
spring-jdbc
4.3.5.RELEASE
org.springframework
spring-webmvc
4.3.5.RELEASE
org.springframework
spring-aop
4.3.5.RELEASE
org.springframework
spring-context
4.3.5.RELEASE
org.springframework
spring-context-support
4.3.5.RELEASE
org.springframework
spring-test
4.3.5.RELEASE
test
org.springframework
spring-beans
4.3.5.RELEASE
org.mybatis
mybatis
3.4.1
org.mybatis
mybatis-spring
1.3.0
com.microsoft.sqlserver
sqljdbc4
4.0
mysql
mysql-connector-java
6.0.6
commons-dbcp
commons-dbcp
1.4
jstl
jstl
1.2
log4j
log4j
1.2.17
com.alibaba
fastjson
1.2.46
org.slf4j
slf4j-api
1.7.25
org.slf4j
slf4j-log4j12
1.7.25
test
org.codehaus.jackson
jackson-mapper-asl
1.9.13
commons-fileupload
commons-fileupload
1.3.1
commons-io
commons-io
2.4
commons-codec
commons-codec
1.10
LibraryManage
org.apache.maven.plugins
maven-compiler-plugin
2.3.2
1.8
2)Spring与MyBatis的整合
①建立jdbc.properties属性文件(修改文件编码为utf-8)
jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://localhost:1433;DatabaseName=LibraryManage
jdbc.username=zxx
jdbc.password=120963
#定义初始连接数
initialSize = 0
#定义最大连接数
maxActive = 20
#定义最大空闲
maxIdle = 20
#定义最小空闲
minIdle = 1
#定义最长等待时间
maxWait = 60000
########连接mysql数据库语句########
#driver=com.mysql.jdbc.Driver
#url=jdbc:mysql://localhost:3306/LibraryManage
#username=zxx
#password=120963
###############################
②建立spring-mybatis.xml配置文件,主要是用来完成Spring和Mybatis的整合的,主要就是自动扫描、自动注入、配置数据库。
3)整合SpringMVC
上面已经完成了两大框架的整合,SpringMVC的配置文件单独放,然后在web.xml中配置整合。
①配置spring-mvc.xml 主要是自动扫描控制器、视图模式、注解的启动这三个。
②配置web.xml文件
Archetype Created Web Application
contextConfigLocation
classpath:spring-mybatis.xml
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
encodingFilter
/*
org.springframework.web.context.ContextLoaderListener
org.springframework.web.util.IntrospectorCleanupListener
SpringMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
1
SpringMVC
/
index.jsp
至此,我认为最难的部分已经做完了(配置文件真的是我认为最难的,这个项目只是根据网上的示例做的,配置文件基本都是copy copy copy,还不算真正理解吧,之后还要好好研究研究)
搭建好之后,项目的目录结构大概是:
3、系统实现
框架搭好了,可以开始写具体的功能了~
要完成一个具体的功能:
1)先写实体类entity,定义对象的属性(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码之前)
2)写Mapper.xml(mybatis),其中定义你的功能,对应要对数据库进行的哪些操作,比如select、insert、update、delete等
3)写Dao.java,一般是接口类型的,将Mapper中的操作按照id映射成Java方法。
4)写Service.java,为控制层提供服务,接受控制层的参数,完成相应的功能,并返回给控制层。
5)写Controller.java连接页面请求和服务层,获取页面请求的参数,通过自动装配,映射不同的URL到相应的处理函数,并获取参数,对参数进行处理,之后传给服务层。
6)写JSP页面调用,请求哪些参数,需要获取哪些数据。
六、过程中遇到的问题
1、NoSuchBeanDefinitionException: No qualifying bean of type xxx found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency.这个错是指Spring的依赖注入出了问题,没有找到符合的bean,好好检查spring-mybatis.xml配置文件,一般是这里面出了问题。
2、数据库相关问题
之前一直用的mysql数据库,这次换成SQL Server真的有挺多地方不一样,需要注意。
首先是连接数据库的jar包,这个在之前已经说过了。
然后是数据库配置文件有一点点不一样,不过基本套路还是一样的(driver、url、username、password)。这里有两点需要注意:一是数据库的端口号,mysql默认是3306,而SQL Server则不一样,需要自己去看本机的数据库端口号,我的是1433,具体方法百度一下就有。二是以上说的四个参数(driver、url、username、password),如果数据表中有相同名字的字段(比如学生表中也有Password字段),最好改一下参数的名字,比如说加上一个“jdbc.”前缀,不然也会报错,就是这么任性。这两个问题报的错都是“用户xxx无法连接到数据库”这种类似的。
然后是权限问题,我是在数据库中新建了一个用户“zxx”,该用户只有连接的权限,没有增删改查数据的权限,这个时候就需要对该用户进行授权,具体方法也百度一下。当然,如果用的mysql就没有这些乱七八糟的问题。
3、还有其它问题皆百度之
天下文章一大抄,天下代码也是一大抄。不过希望我抄了之后能真的弄懂吧。
花了一个多星期才写完一个简单的登陆,也是没谁了...