源码地址: https://github.com/zhangxycg/ssm_crud
视频地址: https://www.bilibili.com/video/av21045215
尚硅谷Java视频教程
一、使用的技术
基础框架: ssm(SpringMVC + Spring + MyBatis)
前端框架: Bootstrap
数据库: MySQL
项目的依赖管理: Maven
分页: pagehelper
逆向工程: MyBatis Generator
二、环境的搭建
-
创建一个maven工程
-
在pom文件中引入项目依赖的jar包
• spring
• springmvc
• mybatis
• 数据库连接池(c3p0)
• mysql驱动包
• 其他(jstl,servlet-api,junit) -
引入bootstrap前端框架
-
编写ssm整合的关键配置文件
web.xml,spring,springmvc,mybatis,使用mybatis的逆向工程生成对应的 pojo 以及 mapper -
测试mapper
项目使用的表结构
部门表
CREATE TABLE `tbl_dept` (
`dept_id` int(11) NOT NULL AUTO_INCREMENT,
`dept_name` varchar(255) NOT NULL,
PRIMARY KEY (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
员工表
CREATE TABLE `tbl_emp` (
`emp_id` int(11) NOT NULL AUTO_INCREMENT,
`emp_name` varchar(255) NOT NULL,
`gender` char(1) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`d_id` int(11) DEFAULT NULL,
PRIMARY KEY (`emp_id`),
KEY `fk_emp_dept` (`d_id`),
CONSTRAINT `fk_emp_dept` FOREIGN KEY (`d_id`) REFERENCES `tbl_dept` (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2020 DEFAULT CHARSET=utf8;
三、页面效果图
四、项目结构图
五、功能及其实现逻辑
1. 查询功能
- 在浏览器访问 index.jsp 页面
- index.jsp 页面发出查询员工列表的请求
- 后台 EmployeeController 接收前台发过来的请求,查出员工数据
- 来到 list.jsp 页面进行展示查询出的数据
- pageHelper 分页插件完成分页查询功能
2. 新增功能
- 在 index.jsp 页面点击 “ 新增 ” 按钮
- 弹出员工新增的对话框
- 然后去数据库查询部门列表,显示在对话框中
- 用户输入数据,并进行校验
- jquery前端校验,ajax用户名重复校验,重要数据(后端校验使用了JSR303);
- 数据填写正确,点击保存按钮
3. 修改功能
- 在页面点击 “编辑” 按钮
- 弹出用户修改的模态框
- 修改数据(用户名无法修改)
- 修改完成,点击 “更新 ” 按钮,完成用户修改
4. 删除功能
- 单个删除
点击删除按钮,弹出提示信息,点击确定。将会删除数据 - 批量删除
勾选员工姓名前的选择框,可以实现批量删除
六、 踩坑
第一次踩坑: 连接不上数据库 ,报错信息如下
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.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:76)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:835)
at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)
at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125)
at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: 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.
at sun.reflect.GeneratedConstructorAccessor45.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)
at com.mysql.cj.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:132)
at com.mysql.cj.protocol.a.NativeProtocol.configureTimezone(NativeProtocol.java:2243)
at com.mysql.cj.protocol.a.NativeProtocol.initServerSession(NativeProtocol.java:2267)
at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:1319)
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:966)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
... 12 more
报错原因是:
在使用mysql的jdbc驱动最新版(6.0+)版本时,数据库和系统时区差异引起的问题。
解决办法:
第一种是 降低驱动的版本
第二种是:在jdbc连接的url后面加上 ?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&characterEncoding=UTF8
第二次踩坑: 字新增与修改完成以后,员工数据不按 id 进行升序排列
解决办法:
修改 EmployeeMapper.xml 中的查询语句,使员工数据按 员工 id 进行升序排列
<select id="selectByExampleWithDept" resultMap="WithDeptResultMap">
select
<if test="distinct">
distinct
</if>
<include refid="WithDept_Column_List" />
FROM tbl_emp e
left join tbl_dept d on e.`d_id`=d.`dept_id`
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
<!-- 员工数据根据id进行升序排列 -->
order by e.`emp_id` asc
</select>
转载:https://blog.csdn.net/weixin_43570367/article/details/103568570
查看评论