MyBatis案例一:员工管理系统
在数据库中创建一个employee表,实现以下几个功能:
(1) 根据id查询员工信息;
(2) 新增员工信息;
(3) 根据id修改员工信息;
(4) 根据id删除员工信息;
(5) 查询所有员工信息;
步骤:
- 在数据库中创建employee表,插入几条数据;
- 打开idea创建项目;
- 配置pom.xml文件,引入三个依赖以及自动编译信息;
<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>
在src/main/resources目录下创建db.properties和mybatis-config.xml文件;
在src/main/java目录下创建org.example.pojo包,在包里创建Employee实体类;
在src/main/resources目录下创建mapper文件夹,在文件夹下创建映射文件EmployeeMapper.xml,配置好Sql语句;
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.example.pojo.Employee"><resultMap id="EmployeeMap" type="org.example.pojo.Employee"><id property="id" column="id"/><result property="name" column="name"/><result property="age" column="age"/><result property="position" column="position"/></resultMap><select id="findAll" resultMap="EmployeeMap">select * from employee</select><select id="findById" parameterType="int" resultType="org.example.pojo.Employee">select * from employee where id = #{id}</select><insert id="addEmployee" parameterType="org.example.pojo.Employee">insert into employee (id,name,age,position) values (#{id},#{name},#{age},#{position})</insert><update id="updateEmployee" parameterType="org.example.pojo.Employee">update employee set name = #{name} ,age = #{age},position = #{position} where id = #{id}</update><delete id="deleteEmployee" parameterType="int">delete from employee where id = #{id}</delete> </mapper>
回到mybatis-config.xml文件配置mapper文件路径,即添加EmployeeMapper.xml文件的路径;
在src/main/java目录下创建utils包,在包里创建MyBatisUtils类;
package utils;import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.Reader;/*** @ClassName utils.MyBatisUtils* @Author 86155* @Description TODO* @createTime 2022年02月23日 16:40:00*/ public class MyBatisUtils {private static SqlSessionFactory sqlSessionFactory= null;static {try {Reader reader = Resources.getResourceAsReader("mybatis-config.xml");sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);} catch (Exception e) {e.printStackTrace();}}public static SqlSession getSession(){return sqlSessionFactory.openSession();} }
在src/test/java目录下创建Test包,在包里创建EmployeeTest测试类,测试增删改查四个功能;
package Test;import org.apache.ibatis.session.SqlSession; import org.example.pojo.Employee; import org.junit.Test; import utils.MyBatisUtils;import java.util.List;/*** @ClassName EmployeeTest* @Author 86155* @Description TODO* @createTime 2022年02月23日 16:39:00*/ public class EmployeeTest {@Test//根据id查询员工信息public void findByIdTest(){SqlSession sqlSession = MyBatisUtils.getSession();Employee employee = sqlSession.selectOne("findById",1);System.out.println(employee.toString());sqlSession.commit();sqlSession.close();}@Test//新增员工信息public void addEmployeeTest(){SqlSession sqlSession = MyBatisUtils.getSession();Employee employee = new Employee();//employee.setId(4);//不用设置id也行,自增employee.setName("中国");employee.setAge(26);employee.setPosition("员工");int add = sqlSession.insert("addEmployee",employee);if (add > 0){System.out.println("成功添加" + add + "条数据!");}else {System.out.println("添加失败");}sqlSession.commit();sqlSession.close();}@Test//根据id修改员工信息,四个字段必须设置值,不然会报错,修改单个信息还在思考中!public void updateEmployee(){SqlSession sqlSession = MyBatisUtils.getSession();Employee employee = new Employee();employee.setId(3);employee.setName("小强");employee.setAge(36);employee.setPosition("技术总监");int update = sqlSession.update("updateEmployee",employee);if (update > 0){System.out.println("成功修改" + update + "条数据!");}else {System.out.println("修改失败");}sqlSession.commit();sqlSession.close();}@Test//根据id删除员工信息public void deleteEmployee(){SqlSession sqlSession = MyBatisUtils.getSession();int delete = sqlSession.delete("deleteEmployee",4);if (delete > 0){System.out.println("成功删除" + delete + "条数据!");}else {System.out.println("删除失败");}sqlSession.commit();sqlSession.close();}@Test//查询所有public void FindAll(){SqlSession sqlSession = MyBatisUtils.getSession();List<Employee> list = sqlSession.selectList("findAll");for (Employee employee:list){System.out.println(employee.toString());}sqlSession.commit();sqlSession.close();} }
修改功能:先查询再修改。
@Test//根据id修改员工信息public void updateEmployee(){SqlSession sqlSession = MyBatisUtils.getSession();//先查询再修改Employee employee = sqlSession.selectOne("findById",3);employee.setName("小强");employee.setAge(22);employee.setPosition("技术总监");int update = sqlSession.update("updateEmployee",employee);if (update > 0){System.out.println("成功修改" + update + "条数据!");}else {System.out.println("修改失败");}sqlSession.commit();sqlSession.close();}
问题:
1.org.apache.ibatis.reflection.ReflectionException异常:xml文件的一个字段写错了,和数据库里的字段不一致。
2.sql语句“delete * from employee where id = #{id}”多了一个*号。
3.程序运行正常,没有报错,但是信息也没有保存到数据库中,我做了一下修改操作:以新增员工信息为例:
在第一行创建会话对象:SqlSession sqlSession = MyBatisUtils.getSession()将红线MyBatisUtils.getSession都修改为sqlSession。其他操作也是,最后数据库成功保存信息。涉及到MyBatis的工作原理MyBatis的工作原理以及核心流程介绍 - MyBatis中文官网,创建了会话对象才能操作数据库。
4.解决异常【MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction】
错误产生的原因就是:涉及到事务锁的问题,接口响应时间超长,耗时几十秒才返回错误提示,后台日志中出现Lock wait timeout exceeded; try restarting transaction的错误,出现了高并发现象。因为我的修改和删除操作都是同一条数据库信息,发生了冲突。
5.Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'position' cannot be null。
修改操作时,字段position的值没有设置值。
6.Could not find resource——mybatis 找不到映射器xml文件,右击resources->Mark directory as ->Resources Root(在比较下面),修改之后resources文件夹出现四天横线的黄色部分。
MyBatis案例一:员工管理系统相关推荐
- Mybatis案例:员工管理系统
Mybatis案例:员工管理系统 一.项目要求 二.项目准备 IDEA中创建项目及模块 三.Mybaits项目实战 第一步,按图手动导入相关JAR 第二步,准备数据库及数据表 第三步.启动IDEA,按 ...
- 【自我介绍】------Mr.张小白(案例:员工管理系统的MyBatis的实现)
@自我介绍 欢迎各位来看我的这篇文章 你好! 这是我第一次使用发表文章.操作的还不太熟练,在接下来的日子里,希望我能够和CSDN这个大家庭一起成长,一起进步. 新的改变(IDEA使用) 我现在是一名在 ...
- JAVA EE——案例:员工管理系统
目录 1.题目 2.文件目录 3. 引入依赖--pom.xml 4.配置文件--myBatis-config.xml 5.映射文件--EmployeeMapper.xml 6.java类--Emplo ...
- javaweb项目案例:员工管理系统
1.项目需求 使用Javaweb+MySQL实现一个员工管理系统,能对员工进行增删改查,使用SSH框架开发. 2.数据表设计 manager(管理员表) CREATE TABLE `manager` ...
- Mybatis学习-(案例)员工管理系统(二)——Maven仓库
❤ (ɔˆз(ˆ⌣ˆc)"玥"--乃古上神珠也.见者好运连连,点个关注,咱们来玥方长! (ง •̀_•́)ง加油
- 手把手教你基于【SpringBoot+MyBatis】实现员工管理系统【附完整源码】
一.写在前面 Hello,你好呀,我是灰小猿,一个超会写BUG的程序猿
- c语言系统分工 ppt,C语言案例员工管理系统.ppt
<C语言案例员工管理系统.ppt>由会员分享,可在线阅读,更多相关<C语言案例员工管理系统.ppt(11页珍藏版)>请在人人文库网上搜索. 1.案例:员工管理系统,武汉纺织大学 ...
- 基于springboot+thymeleaf+mybatis的员工管理系统 —— 增删改查
员工管理系统 - 增删改查 entity 查询所有功能 查询所有的页面 emplist.html 保存员工 保存员工的页面 addEmp.html 删除员工 修改员工 根据id查询员工 修改员工信息 ...
- 基于springboot+thymeleaf+mybatis的员工管理系统 —— 登录与注册
员工管理系统 - 登录与注册功能 创建项目 pom.xml 数据库表设计和环境准备 建表SQL application.properties 用户注册与登录功能 entity dao service ...
- SpringBoot员工管理系统(整合Mybatis+mysql)
SpringBoot员工管理系统(整合Mybatis+mysql) 前部分:https://blog.csdn.net/weixin_43501359/article/details/11271466 ...
最新文章
- 东京奥运会将利用 AI 识别可疑人员
- 参观云栖小镇体会_我院留学生赴云栖小镇参观学习
- 基于MATLAB的IIR滤波器设计与实现
- shields 徽标_徽标不够用时如何设计应用程序图标
- 一篇博客读懂设计模式之---动态代理与反射
- Spring基于Annotation装配Bean
- 神经网络为什么需要激活函数
- Variant 数组
- 使用maven根据JSON文件自动生成Java POJO类(Java Bean)源文件
- CentOS设置静态IP
- 敏捷思维-架构设计中的方法学(12)Refactoring
- 如何用python处理pdf_如何使用Python玩转PDF各种骚操作?
- 油猴脚本插件 千图网无水印原图素材
- 基2时域采样快速傅里叶变换、反变换算法在python上的实现(自制轮子)
- 自定义view————涂鸦画板
- 5款App帮你轻松搞定自定义锁屏
- Linux Gnome 桌面美化
- JavaScript 移动端点击事件延迟问题
- Mysql error 1045的解决
- 田径运动会成绩管理系统
热门文章
- Power Pivot入门(Excel2021专业加强版)
- CorelDRAWX4的VBA插件开发(二十七)使用C++制作动态连接库DLL辅助VBA构键强大功能-(1)前言和准备工作
- html5制作端午节游戏,零代码怎么制作一个端午节H5小游戏页面?
- 使用jquery如何判断checkbox是否被选中
- c语言考研题库谭浩强,C程序设计谭浩强第4版考研教材下载及真题视频讲解
- 免费AI标注工具-医疗影像标注工具
- 面试,如何使用数据仓库?
- 计算机与网络连接需要什么设置,如何设置宽带连接,详细教您如何设置宽带连接...
- 异或 ^ 的几个作用
- 英语中有些单词缩写后面为什么要加个点