系列文章目录:
目录
前言:
上一期内容我们完成了学生管理系统的无JDBC版本,但是在企业级开发中,有大量的数据要进行存储,并且是长期存储,比如用户的信息等,我们这个时候不能再使用计算机内存存储了,只能借助于第三方介质存储数据,一种是我们所谓的文件存储,但是这种存储方式并不安全,这种涉及到用户信息的存储方式一般不会使用文件存储的方式,文件存储只会使用在用户产生的数据之上,显而易见的例子就是我们日常使用的QQ,在我们的QQ账号登录电脑QQ时QQ会在本地文件夹内新建一个文件夹,该文件夹就会以用户QQ账号的名称出现,该文件下存储的就是该QQ账号在本地产生的数据,例如聊天记录、图片表情等。而像我们的QQ账号和密码则以数据库的形式存储在官方服务器上。
而本期内容就是将无JDBC的学生管理系统升级为Mybatis版本。使用数据库来存储学生信息数据。不使用JDBC的方式是因为JDBC需要编写大量的SQL语言,这使得程序臃肿且复杂。而官方为解决这一问题早就推出了Mybatis,它是将JDBC进一步封装简化得到的插件包,在使用上更加简便,且依赖更加丰富。
一、添加mybatis的jar包
两个包的文件放在这里:
链接:https://pan.baidu.com/s/1z9LeeuyAmE2QNr5JhijLzA
提取码:ah23
二、课程管理模块的升级
1.新建csdn.ah.mapper包
(1)在csdn.ah.mapper包下新建xml文件,命名为subjectMapper.xml
(2)编写代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="csdn.ah.dao.SubjectDao">
<select id="subjectList" resultType="csdn.ah.pojo.Subject">
select * from subject
</select>
<select id="getById" parameterType="java.lang.Integer" resultType="csdn.ah.pojo.Subject">
select * from subject where id=#{id}
</select>
<insert id="addSubject" parameterType="csdn.ah.pojo.Subject">
insert into subject (name,credit) values (#{name},#{credit})
</insert>
<update id="updateSubject" parameterType="csdn.ah.pojo.Subject">
update subject set name=#{name},credit=#{credit} where id=#{id}
</update>
<delete id="deleteSubject" parameterType="java.lang.Integer">
delete from subject where id=#{id}
</delete>
</mapper>
2.新建mybatis-config.xml文件
(1)在src根目录下新建mybatis-config.xml文件
(2)编写代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<!-- 获取驱动 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<!-- 设置数据库地址 -->
<property name="url" value="jdbc:mysql://localhost:3306/studb?serverTimezone=CST"/>
<!-- 设置数据库账号 -->
<property name="username" value="root" />
<!-- 设置数据库密码 -->
<property name="password" value="qwer" />
</dataSource>
</environment>
</environments>
<!-- 将mapper文件加入到配置文件中 -->
<mappers>
<mapper resource="csdn/ah/mapper/subjectMapper.xml"/>
</mappers>
</configuration>
3.新建csdn.ah.helper包
(1)在csdn.ah.helper包下新建MybatisHelper.java类
(2)编写代码
package csdn.ah.helper;
import org.apache.ibatis.session.SqlSession;
public class MybatisHelper {
public static SqlSession getSqlSession() {
SqlSession session = null;
String resource = "mybatis-config.xml";
try {
SqlSessionFactoryBuilder sqlSessionFactoryBuilder =new SqlSessionFactoryBuilder();
//通过上面的配置文件创建SqlSessionFactory
SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream(resource));
//通过SqlSessionFactory创建sqlSession
session = sessionFactory.openSession();
}catch(Exception e) {
e.printStackTrace();
}
return session;
}
public static int insert(String statement,Object param) {
int result = 0;
try {
SqlSession session = getSqlSession();
result = session.insert(statement, param);
session.commit();
session.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static int update(String statement,Object param) {
int result = 0;
try {
SqlSession session = getSqlSession();
result = session.update(statement, param);
session.commit();
session.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static int delete(String statement,Object param) {
int result = 0;
try {
SqlSession session = getSqlSession();
result = session.delete(statement, param);
session.commit();
session.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
代码可能会报错,有下划线是因为,需要导入mybatis的包,我们可以点击有下划线的地方,然后按下ALT+?就可以看见有哪些包可以导入,或者有哪些建议。或者你也可以将鼠标悬停在有下划线的地方,3秒之后编译器会提示可用的包文件,或者建议。
4.修改SubjectDao.java代码
package csdn.ah.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import csdn.ah.helper.MybatisHelper;
import csdn.ah.pojo.Subject;
public class SubjectDao {
public static int addSubject(String name,int credit) {
Subject param = new Subject();
param.setName(name);
param.setCredit(credit);
String statement = "csdn.ah.dao.SubjectDao.addSubject";
return MybatisHelper.insert(statement,param);
}
public static int updateSubject(int id,String name,int credit) {
Subject param = new Subject(id, name, credit);
String statement = "csdn.ah.dao.SubjectDao.updateSubject";
return MybatisHelper.update(statement,param);
}
public static int deleteSubject(int id) {
String statement = "csdn.ah.dao.SubjectDao.deleteSubject";
return MybatisHelper.delete(statement,id);
}
public static List<Subject> subjectList() {
List<Subject> list = null;
String statement = "csdn.ah.dao.SubjectDao.subjectList";
try {
SqlSession session = MybatisHelper.getSqlSession();
list = session.selectList(statement);
session.close();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
public static Subject getById(int id) {
Subject subject = null;
String statement = "csdn.ah.dao.SubjectDao.getById";
try {
SqlSession session = MybatisHelper.getSqlSession();
subject = session.selectOne(statement,id);
session.close();
} catch (Exception e) {
e.printStackTrace();
}
return subject;
}
}
和上面一样,有很多地方需要导包
此时我们发现,csdn.ah.servlet包下文件显示报错:
因为我们在上面将SubjectDao.java文件中原本的ArratList类型改成了List对象类型,所以在这些servlet中也要做出相应的修改,现在我们来对这些servlet文件做相应的修改:
上述只是一个例子,还有许多servlet文件也需要修改,大家可以根据我刚刚提供的方法进行修改,直到csdn.ah.servlet包下没有报错文件即可。除此之外,要注意的是,我们需要在Student里面添加一个字段:private int subjectId,并重新生成setter和getter方法以及有参构造方法。
接下来是getter和setter方法:
至此我们,课程管理部分已经全部升级完成。只是我们暂时没有编写数据库,现在我们先来编写数据库,然后测试一下,课程管理是否还存在问题。
二、数据库编写
1.创建数据库studb
创建数据库的前提是你的电脑上要有SQL,我们最常用的是SQL是MySQL,在本项目中我采用的也是MySQL,如果你的电脑上没有,那么可以先安装一个MySQL,MySQL下载可以去官网下载,也可以选用我在上面连接中提供的安装包,MySQL的安装可以查看我本人写的笔记:MySQL安装教程 (wolai.com),该链接中也提供了他人的安装教程,或者你可以自行百度安装教程。
打开Navicat,没有小伙伴可以先安装一个。我已经将安装包和解密插件放到上面的连接里面了。安装过程很简单,可以自行百度,也可以查看该大佬提供的安装教程:Navicat Premium 16 下载与安装破解教程(详细教程) - 小林野夫 - 博客园 (cnblogs.com)
我们开始创建,studb数据库。 首先没有创建本地连接的,可以先创建一个本地连接。
现在,我们的数据studb已经创建好了。接下来创建两个表。
2.创建表,student
现在我们运行,程序查看代码是否有问题。
此时已经证明,我们的课程管理部分没有问题了。
3.创建表,subject
在studb库下新建表student
目前我们的student表做好了,但是我们还无法验证,需要我们将学生管理系统的学生管理部分也完成升级以后才能进行测试。
三、学生管理模块的升级
1.创建studentMapper.xml文件
(1)在csdn.ah.mapper包下新建studentMapper.xml文件
(2)编写代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="csdn.ah.dao.StudentDao">
<insert id="addStudent" parameterType="csdn.ah.pojo.Student">
insert into student (name,gender,subject_id) values (#{name},#{gender},#{subjectId})
</insert>
<update id="updateStudent" parameterType="csdn.ah.pojo.Student">
update student set name=#{name},gender=#{gender},subject_id=#{subjectId} where id=#{id}
</update>
<delete id="deleteStudent" parameterType="java.lang.Integer">
delete from student where id=#{id}
</delete>
<resultMap type="csdn.ah.pojo.Student" id="student">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="gender" column="gender"/>
<result property="subjectId" column="subject_id"/>
</resultMap>
<select id="studentList" resultMap="student">
select * from student
</select>
<select id="getById" parameterType="java.lang.Integer" resultMap="student">
select * from student where student.id=#{id}
</select>
</mapper>
2.添加student表的mapper文件
(1)在mybatis-config.xml文件中添加有关student表的mapper文件代码
<mapper resource="csdn/ah/mapper/studentMapper.xml"/>
3.修改StudentDao中的代码
package csdn.ah.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import csdn.ah.helper.MybatisHelper;
import csdn.ah.pojo.Student;
import csdn.ah.pojo.Subject;
public class StudentDao {
public static int addStudent(String name,String gender,int subjectId) {
Student param = new Student();
param.setName(name);
param.setGender(gender);
param.setSubjectId(subjectId);
String statement = "csdn.ah.dao.StudentDao.addStudent";
return MybatisHelper.insert(statement,param);
}
public static int updateStudent(int id,String name,String gender,int subjectId) {
Student param = new Student(id, name, gender, subjectId,null);
String statement = "csdn.ah.dao.StudentDao.updateStudent";
return MybatisHelper.insert(statement,param);
}
public static int deleteStudent(int id) {
String statement = "csdn.ah.dao.StudentDao.deleteStudent";
return MybatisHelper.insert(statement,id);
}
public static List<Student> studentList(){
List<Student> list = null;
String studentStmt = "csdn.ah.dao.StudentDao.studentList";
String subjecttStmt = "csdn.ah.dao.SubjectDao.getById";
try {
SqlSession session = MybatisHelper.getSqlSession();
list = session.selectList(studentStmt,null);
if(list != null) {
Student student = null;
Subject subject = null;
for(int i=0;i<list.size();i++) {
student = list.get(i);
subject = session.selectOne(subjecttStmt, student.getSubjectId());
student.setSubject(subject);
}
}
session.close();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
public static Student getById(int id) {
Student student = null;
String studentStmt = "csdn.ah.dao.StudentDao.getById";
String subjecttStmt = "csdn.ah.dao.SubjectDao.getById";
try {
SqlSession session = MybatisHelper.getSqlSession();
student = session.selectOne(studentStmt,id);
Subject subject = session.selectOne(subjecttStmt, student.getSubjectId());
student.setSubject(subject);
session.close();
} catch (Exception e) {
e.printStackTrace();
}
return student;
}
}
同样的,上述代码可能会报错,这是因为没有导入mybatis的包,需要我们手动将这些包导入,方法和之前在SubjectDao.java中一样。
这时我们看到,csdn.ah.servlet包下的有关student部分的文件开始报错,其实和subject升级时一样,我们将ArrayList类型更改为List对象类型就可以了。
至此,我们的学生管理模块升级完成,我们可以测试一下:
查看数据库中的数据,我们可以在navicat查看数据库信息是否被更改,也可以在命令行揭秘那查看,一般navicat刷新数据比较缓慢,貌似是bug,所以我们现在使用命令行界面查看。
按住win+R键在弹出的窗口输入,cmd命令
好了,这项验证也表明了我们的学生管理系统已经正式的升级成了Mybatis版本了,该系统已经达到了一个最低的企业级开发的标准了,当然企业级的标准可能要求更高,因此我们也需要不断努力呀。
总结:
本期内容已经是我们,基于SSM框架搭建学生管理系统的最后一期内容了,回顾这九期内容,我们从环境的搭建开始到项目的升级完毕结束,我们无疑是取得了长足的进步的。但也不能完全满足于此,我们基于SSM框架的JavaWeb程序设计的学习仍在继续,后面我会不定期的,推送一些在学习中遇到的问题以及解决的办法,希望可以帮到你。有缘的话,我还会在和大家分享一个系统的搭建。我们下期再见!