Java+MySQL+Mybatis+Junit4实现学生信息管理系统

数据库表创建+数据添加

sql 复制代码
-- 创建学生信息表
CREATE TABLE `student` (
  `id` BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '自增主键ID',
  `studNo` VARCHAR(20) NOT NULL COMMENT '学号',
  `name` VARCHAR(50) NOT NULL COMMENT '姓名',
  `gender` INT  DEFAULT 0 COMMENT '性别:0-未知 1-男 2-女',
  `phone` VARCHAR(20) COMMENT '联系电话',
  `home_address` VARCHAR(255) COMMENT '家庭住址',
  `class_name` VARCHAR(50) COMMENT '班级名称',
  `status` INT UNSIGNED DEFAULT 1 COMMENT '学籍状态:1-在读 2-休学 3-毕业 4-退学 5-开除'
) COMMENT='学生基本信息表';


INSERT INTO `student_info` 
(`studNo`, `name`, `gender`, `phone`, `home_address`, `class_name`, `status`)
VALUES
('202301001', '张明', 1, '13800138001', '浙江省杭州市', '计算机科学与技术2023级1班', 1),
('202301002', '李婷', 2, '13800138002', '辽宁省大连市', '计算机科学与技术2023级1班', 1),
('202302015', '王浩', 1, '13800138003', '北京市', '软件工程2023级2班', 1),
('202201023', '赵晓雨', 2, '13800138004', '上海市', '计算机科学与技术2022级1班', 2),
('202103008', '刘阳', 1, '13800138005', '山东省青岛市', '软件工程2021级3班', 3);

Java代码实现

项目结构

mybatis配置文件

java 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="db.properties"/>
    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="cn/stud/mapper/StudentMapper.xml"/>
    </mappers>
</configuration>
复制代码
<mapper>中需要写入创建的mapper实现xml路径名,才可以访问到
使用${} 将数据库连接内容(db.properties)编译进去

db.properties

这个文件中需要配置自己的数据库信息,数据库名,用户名,密码,我这边用的是MySQL5.1版本,将useSSL=false进行拼接,表示禁用 SSL 加密,低版本一般这样设置

xml 复制代码
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///local_data?useSSL=false
username=root
password=123456

SqlSession工具类

java 复制代码
package cn.stud.util;

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.InputStream;

public class MybatisConnUtils {
    private static SqlSessionFactory ssf;

    static {
    	//获取连接对象
        try (InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml")) {
            //获取sqlSession会话工厂
            ssf = new SqlSessionFactoryBuilder().build(inputStream);
        }catch (Exception e){
            throw new RuntimeException(e);
        }
    }

	//获取连接
    public static SqlSession getConn(){
        return ssf.openSession();
    }
}

Student实体类

java 复制代码
package cn.stud.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Student {
    //自增主键ID
    private long id;
    //学号
    private String studNo;
    //姓名
    private String name;
    //性别:0-未知 1-男 2-女
    private int gender;
    //联系电话
    private String phone;
    //家庭住址
    private String home_address;
    //班级名称
    private String class_name;
    //学籍状态:1-在读 2-休学 3-毕业 4-退学 5-开除
    private int status;
}

DAO接口

java 复制代码
package cn.stud.dao;

import cn.stud.domain.Student;

import java.util.List;

public interface StudentDAO {

    void insert(Student s);
    void update(Student s);
    void del(long id);
    Student getById(long id);
    List<Student> getAll();
}

DAO实现类

java 复制代码
package cn.stud.dao.impl;

import cn.stud.dao.StudentDAO;
import cn.stud.domain.Student;
import cn.stud.util.MybatisConnUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class StudentDAOImpl implements StudentDAO {

    private static SqlSession ss = MybatisConnUtils.getConn();

    @Override
    public void insert(Student s) {
        ss.insert("cn.stud.mapper.StudentMapper.insert",s);
        ss.commit();
    }

    @Override
    public void update(Student s) {
        ss.update("cn.stud.mapper.StudentMapper.update",s);
        ss.commit();
    }

    @Override
    public void del(long id) {
        ss.delete("cn.stud.mapper.StudentMapper.del",id);
        ss.commit();
    }

    @Override
    public Student getById(long id) {
        return ss.selectOne("cn.stud.mapper.StudentMapper.getById",id);
    }

    @Override
    public List<Student> getAll() {
        return ss.selectList("cn.stud.mapper.StudentMapper.getAll");
    }
}

mapper

xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.stud.mapper.StudentMapper">
    <insert id="insert" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        insert into student(studNo,name,gender,phone,home_address,class_name,status)
        values(
            #{studNo},
            #{name},
            #{gender},
            #{phone},
            #{home_address},
            #{class_name},
            #{status}
        )
    </insert>
    <update id="update">
        update student set
            studNo = #{studNo},
            name = #{name},
            gender = #{gender},
            phone = #{phone},
            home_address = #{home_address},
            class_name = #{class_name},
            status = #{status}
        where id = #{id}
    </update>
    <delete id="del">
        delete from student where id = #{id}
    </delete>
    <select id="getById" resultType="cn.stud.domain.Student">
        select id,studNo,name,gender,phone,home_address,class_name,status
         from student where  id = #{id}
    </select>
    <select id="getAll" resultType="cn.stud.domain.Student">
        select id,studNo,name,gender,phone,home_address,class_name,status
        from student
    </select>
</mapper>

测试类

java 复制代码
package cn.stud.dao.impl;

import cn.stud.dao.StudentDAO;
import cn.stud.domain.Student;
import org.junit.Test;

import static org.junit.Assert.*;

public class StudentDAOImplTest {

    private StudentDAO sd = new StudentDAOImpl();

    @Test
    public void insert() {
        Student student = new Student();
        student.setStudNo("a1234");
        student.setName("张张");
        student.setGender(1);
        student.setPhone("13321211111");
        student.setHome_address("住址");
        student.setClass_name("计算机");
        student.setStatus(1);
        sd.insert(student);
    }

    @Test
    public void update() {
        Student student = new Student();
        student.setStudNo("a12345");
        student.setName("张张1");
        student.setGender(0);
        student.setPhone("13321211100");
        student.setHome_address("住址0");
        student.setClass_name("计算机8");
        student.setStatus(2);
        sd.update(student);
    }

    @Test
    public void del() {
        sd.del(6L);
    }

    @Test
    public void getById() {
        System.out.println(sd.getById(2L));
    }

    @Test
    public void getAll() {
        sd.getAll().forEach(System.out::println);
    }
}
相关推荐
鲨鱼辣钊2 小时前
【FastAPI筑基-Day19】APScheduler定时任务全实战|自动执行、动态启停、后台常驻
java·spring·fastapi
学长毕业设计6 小时前
基于SpringBoot的公益基金管理系统(源码+文档+讲解视频)
java·spring boot·后端
东小西6 小时前
【SAA实战】第 3 篇 · 工具调用全攻略:把业务能力交给 Agent 自己调度
java·后端·spring
东小西6 小时前
【SAA实战】第 4 篇 · Agent 短期记忆:saver 让 Agent 跨轮记得住(threadId 隔离)
java·后端·spring
许彰午6 小时前
22-DataCenter报文序列化
java·低代码·架构·状态模式
2601_962065257 小时前
[MySQL] SQL优化之性能分析
java·sql·mysql
yi.Ist7 小时前
数据定义语言-DDL操作
数据库·学习·mysql·oracle·大海豚
阿kun要赚马内7 小时前
MySQL 索引基础
后端·mysql
小范同学_7 小时前
JDK1.7 与 JDK1.8 HashMap 底层原理对比 + 数组并发扩容死循环详解
java·开发语言
予昊8 小时前
从零实现“在线五子棋对战“:WebSocket 实时通信 + 段位匹配
java·开发语言·网络·websocket