本篇文章只是用来记录本人做毕设项目的过程,如能帮助到他人,荣幸之至。一开始打开eclipse不知从何入手,在csdn上看到一篇文章,收获很大,文章链接:https://blog.csdn.net/bieleyang/article/details/77862042
要完成一个功能:
先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。
写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进行的那些操作,比如 insert、selectAll、selectByKey、delete、update等。
写Mapper.java,将Mapper.xml中的操作按照id映射成Java函数。
写Service.java,为控制层提供服务,接受控制层的参数,完成相应的功能,并返回给控制层。
写Controller.java,连接页面请求和服务层,获取页面请求的参数,通过自动装配,映射不同的URL到相应的处理函数,并获取参数,对参数进行处理,之后传给服务层。
写JSP页面调用,请求哪些参数,需要获取什么数据。
DataBase ===> Entity ===> Mapper.xml ===> Mapper.Java ===> Service.java ===> Controller.java ===> Jsp.
一共有view层(表现层),controller层(控制层),service层(业务层),DAO层(持久层)四层。
DataBase已经根据数据库设计在mysql中创建好了,Entity ===> Mapper.xml ===> Mapper.Java,这三部分我是用的mybatis generator插件自动生成的,如果以后有时间我会考虑写一篇关于此部分的教程。
接下来会记录一些项目连接数据库时遇到的问题。
1.MYSQL 提示:Could not create connection to database server - java mysql connector
解决办法:是数据库版本的问题,当前版本为8.0。修改MYSQL 驱动名称(注意:MYSQL8的驱动名称是:com.mysql.cj.jdbc.Driver, MYSQL8以下的驱动名称是:com.mysql.jdbc.Driver) 。
2.连接mysql时报错
异常:org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
解决方法:
在配置文件的url后面加上
?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
3.log4j:ERROR setFile(null,true) call failed.
解决方法:
是log4j.properties与tomcat的log4j重名的原因
将配置文件重命名即可(如:log.properties)
因为在tomcat启动是默认去找log4j.properties,但此时Listener还没有起来,tomcat就要往/WEB-INF/logs/log4j.log 写日志就找不到了
参考链接:https://blog.csdn.net/majin_com/article/details/4073105
4.run项目时tomcat报错404,且Tomcat Server 管理界面不可修改
解决方法:
关闭服务器
remove掉里面的工程
右击tomcat服务器,点击clean
现在页面为可编辑的状态,修改内容参考红框。
5.xml文件第一行小红叉错误,xsd 文件的版本号问题,这里的问题是没有版本号,加上版本号即可
修改后的代码段如下:
<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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
6.### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Unknown system variable 'tx_isolation'] with root cause
java.sql.SQLException: Unknown system variable 'tx_isolation'
解决方法:
1)升级数据库驱动版本,没用
2)SELECT @@transaction_isolation;没用
3)修改MYSQL 驱动名称(注意:MYSQL8的驱动名称是:com.mysql.cj.jdbc.Driver, MYSQL8以下的驱动名称是:com.mysql.jdbc.Driver) 。没用但是确实是应待修改
4)换成和server version一样版本的数据驱动,我之前是用了比数据库版本还高的驱动(8.0.13甚至是8.0.18)。在mysql中查看数据库版本信息
下载对应版本的数据库驱动
下载链接:http://central.maven.org/maven2/mysql/mysql-connector-java/
下载成功后复制到libs目录下,然后右键该jar包。bulid path
修改generatorConfig.xml文件中的配置信息
。不知道是不是成功了,但是报错信息变了。。。。
这个错我猜是xml的转义出了问题。
它又突然好了,每次连接数据库都有它的脾气,恩,要稳住
目前的情况是:
修改前源码下载地址:
地址一:复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1BWkhp4Bsp1JqK_PTUmHu_g 提取码:3z1t
地址二:
jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/xxx?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=UTC
jdbc.username=xxx
jdbc.password=xxx
generatorConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration >
<classPathEntry location="D:\mysql-connector-java-8.0.12.jar" />
<context id="context1" targetRuntime="MyBatis3">
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/xxx?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=UTC"
userId="xxx" password="xxx" />
<javaModelGenerator targetPackage="com.song.work.model" targetProject="Work" >
<property name="constructorBased" value="false"/>
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
<property name="pojo" value="true"/>
<!-- for MyBatis3 / MyBatis3Simple
是否创建一个不可变的类,如果为true,
那么MBG会创建一个没有setter方法的类,取而代之的是类似constructorBased的类
-->
<property name="immutable" value="false"/>
<!-- 设置一个根对象,
如果设置了这个根对象,那么生成的keyClass或者recordClass会继承这个类;在Table的rootClass属性中可以覆盖该选项
注意:如果在key class或者record class中有root class相同的属性,MBG就不会重新生成这些属性了,包括:
1,属性名相同,类型相同,有相同的getter/setter方法;
-->
<!-- <property name="rootClass" value="com._520it.mybatis.domain.BaseDomain"/> -->
<!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
<property name="trimStrings" value="false"/>
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.song.work.dao.mapper" targetProject="Work" />
<javaClientGenerator targetPackage="com.song.work.dao.mapper" targetProject="Work" type="XMLMAPPER" />
<table tableName="admin" />
</context>
</generatorConfiguration>
日志文件已重命名
mybatis.xml(这个文件好像是空的??)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.2//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
spring-mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- -dao.xml文件中主要负责配置:加载jdbc.properties、配置数据源、配置SqlSessionFactoryBean、Mapper扫描器 -->
<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:context="http://www.springframework.org/schema/context"
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">
<!--读取数据库配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置文件上传 -->
<!-- c3p0连接池配置 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<!-- 用户名 -->
<property name="user" value="${jdbc.username}"/>
<!-- 用户密码 -->
<property name="password" value="${jdbc.password}"/>
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<!-- 连接池中保留的最大连接数。默认值: 15 -->
<property name="maxPoolSize" value="20"/>
<!-- 连接池中保留的最小连接数,默认为:3 -->
<property name="minPoolSize" value="2"/>
<!-- 初始化连接池中的连接数,取值应在minPoolSize与maxPoolSize之间,默认为3 -->
<property name="initialPoolSize" value="2"/>
<!-- 最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。默认值: 0 -->
<property name="maxIdleTime" value="60"/>
<!-- 当连接池连接耗尽时,客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。默认: 0 -->
<property name="checkoutTimeout" value="3000"/>
<!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。默认值: 3 -->
<property name="acquireIncrement" value="2"/>
<!-- 定义在从数据库获取新连接失败后重复尝试的次数。默认值: 30 ;小于等于0表示无限次 -->
<property name="acquireRetryAttempts" value="0"/>
<!-- 重新尝试的时间间隔,默认为:1000毫秒 -->
<property name="acquireRetryDelay" value="1000" />
<!-- 关闭连接时,是否提交未提交的事务,默认为false,即关闭连接,回滚未提交的事务 -->
<property name="autoCommitOnClose" value="false"/>
<!-- c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试使用。默认值: null -->
<property name="automaticTestTable" value="Test"/>
<!-- 如果为false,则获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常,但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。默认: false -->
<property name="breakAfterAcquireFailure" value="false"/>
<!-- 每60秒检查所有连接池中的空闲连接。默认值: 0,不检查 -->
<property name="idleConnectionTestPeriod" value="60"/>
<!-- c3p0全局的PreparedStatements缓存的大小。如果maxStatements与maxStatementsPerConnection均为0,则缓存不生效,只要有一个不为0,则语句的缓存就能生效。如果默认值: 0
--> <property name="maxStatements" value="100"/>
<!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。默认值: 0 -->
<property name="maxStatementsPerConnection" value="100"></property>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 自动扫描mapper.xml目录, 省掉Configuration.xml里的手工配置 -->
<property name="mapperLocations" value="classpath:com/song/work/dao/mapper/*.xml" />
<!-- 加载mybatis的全局配置文件 -->
<property name="configLocation" value="classpath:mybatis.xml" />
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.song.work.dao*" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
</beans>
springmvc.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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
<context:component-scan base-package="com.song.work.controller" />
<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
<context:component-scan base-package="com.song.work.service" />
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 完成请求和注解POJO的映射 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
</bean>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 允许上传的最大文件大小,默认-1表示无限制 -->
<property name="maxUploadSize" value="104857600" />
<!-- 文件上传时允许写到内存中的最大值 -->
<property name="maxInMemorySize" value="4096" />
</bean>
<mvc:default-servlet-handler/>
<!-- 配置可以访问静态资源 -->
<mvc:resources location="/WEB-INF/resources/css/" mapping="/css/**"/>
<mvc:resources location="/WEB-INF/resources/js/" mapping="/js/**"/>
<mvc:resources location="/WEB-INF/resources/images/" mapping="/images/**"/>
<!-- 定义跳转的文件的前后缀 ,视图模式配置-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
现在是2020/01/10/17:57
我终于连通了数据库,接下来的目标是 Service.java ===> Controller.java ===> Jsp,还是要加油啊,赢的不是生活就是你我。