第二章 快速入门
2.2.2创建库表
(1)启动mysql数据库mysql -u root -p~~~
(2)创建实例对应的数据库sampledb
mysql> drop database if exists sampledb
-> ;
Query OK, 0 rows affected, 1 warning (0.06 sec)
mysql> create database sampledb default character set utf8;
Query OK, 1 row affected, 1 warning (0.14 sec)
mysql> use sampledb;
Database changed
(3)创建实例所用两张表
用户表
mysql> create table t_user(
-> user_id int auto_increment primary key,
-> user_name varchar(50),
-> credits int,
-> password varchar(32),
-> last_visit datetime,
-> last_ip varchar(23)
-> )engine=innodb;
Query OK, 0 rows affected (0.57 sec)
用户登陆日志表
mysql> create table t_login_log(
-> login_log_id int auto_increment primary key,
-> user_id int,
-> ip varchar(23),
-> login_datetime datetime
-> )engine=innodb;
Query OK, 0 rows affected (0.41 sec)
其中mysql默认的引擎是myisam,不支持事务,只能存储数据,优点是读写速度快,但是innodb引擎则支持事务。
(4)初始化一条数据
mysql> insert into t_user(user_name,password) values('admin','123456')
-> ;
Query OK, 1 row affected (0.17 sec)
mysql> commit;(这是关于事务的提交,但是输入上条就已经完成了,应该是要配合事务开始使用吧)
可以通过运行脚本完成上述工作,具体就是
-----a将上述命令写成sampledb.sql文件,然后cmd窗口输入mysql -u root -p ~~~ --port3306
d:\``````\sampled.sql
-----b这是第二种运行脚本的方法,直接用source命令运行
source d:\`````````\sampled.sql
2.2.3建立工程
用idea专业版直接创建了maven工程,然后开始配置Spring模块类库,依赖的数据库驱动类库,依赖的连接池类库,依赖的web类库(servlet-api,要装common-dbcp)
查看servlet版本号,直接打开了tomcat下lib里面的servlet-api.jar包,解压缩找WEB-INF下面的配置。晕,配置直接复制粘贴了,自己写太多。
出了个Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project chapter2: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]
原来是maven自动寻找项目文件名webapps,但是idea生成的是web,所以找不到了。
在pom.xml里面添加
${basedir}/web
可以参考http://www.importnew.com/17936.html还有jetty的文档
还在code下面创建了一个文件夹web,好吧。。然后clean和install好了。
创建持久层
(1)创建User和LoginLog的domain对象
alter + insert来生成set和get方法,然后alt + enter导入包
(2)UserDao包括三个方法
getMatchCount()根据用户名和密码获取匹配的用户数
findUserByUserName()根据用户名获取User对象
updateLoginInfo()更新用户积分,最后登录IP和最后登陆时间
Spring2.5之后可以用注解的方式来定义Bean
(3)LoginLog包括一个方法
insertLoginLog()
2.3.4在Spring中装配DAO
jdbcTemplate本身封装了Connection等的操作,需要一个DataSource,这样就可以根据需要从DataSource获取或返回连接。UserDao和LoginLog都提供了一个带@Autowired注解的jdbcTemplate变量,所以必须声明一个数据源,然后定义一个JdbcTemplate Bean,通过Spring容器的上下文自动绑定机制,进行Bean的注入。
@Repository通过Spring注解定义一个DAO
@Autowired注入JdbcTemplate的Bean
总之,bean就是DAO为了和数据库连接的模块化类,更好通过反射实现操作,而domain则是用户定义的在各个业务层转发的。
2.4.3单元测试
直接照抄的,并没太理解,@ContextConfiguration,@Test,@Autowired以后分析吧
2.5展现层
找了半天才在project structure里面找到创建WEB-INF的,然后才有web.xml文件。如此,开始配置
(1)通过web容器上下文参数指定Spring配置文件的地址,从类路径下加载Spring配置文件
contextConfigLocation
classpath:smart-context.xml
(2)指定Spring所提供的ContextLoaderListener的web容器监听器,web容器启动时自动运行,会根据contextConfigLocation的web容器参数获取Spring配置文件,并启动Spring容器。要将log4j.properties日志配置文件放在该路径下,以便日志引擎自动生效。
SpringMVC也是和Struts一样,通过一个Servlet来拦截url请求
2.5.2处理登陆的请求
跑起来的时候我在pom.xml里面加了jdk选项
发现错误,用jetty:run运行没有错误,但是访问jsp页面立即报错。
Problem accessing /bbs/index.html. Reason:
PWC6033: Unable to compile class for JSP
PWC6199: Generated servlet error:
The type java.lang.Class cannot be resolved. It is indirectly referenced from required .class files
PWC6199: Generated servlet error:
java.util.Vector cannot be resolved to a type
PWC6199: Generated servlet error:
_jspx_dependants cannot be resolved
org.apache.jasper.JasperException: PWC6033: Unable to compile class for JSP
PWC6199: Generated servlet error:
The type java.lang.Class cannot be resolved. It is indirectly referenced from required .class files
PWC6199: Generated servlet error:
java.util.Vector cannot be resolved to a type
PWC6199: Generated servlet error:
_jspx_dependants cannot be resolved
https://blog.csdn.net/qq_36850813/article/details/79949925参考这个,把jstl的包给导入了,但是仍然报错。
在网站https://stackoverflow.com/questions/32803427/pwc6033-unable-to-compile-class-for-jsp找到
I had the same problem using Java 8 but using Java 7 works fine.
java -jar jackrabbit-standalone-2.11.3.jar
the jackrabbit-standalone-2.14.3.jar didn't work on jdk 8 , but it works file on jdk 7
直接找到网站上https://issues.apache.org/jira/browse/JCR-4183
我直接把java10卸载,改成了java8。卧槽,又出现版本问题
https://blog.csdn.net/codejas/article/details/79645663这个用Springboot后,加了parent可以不加其他依赖的版本号