实验7 Mybatis注解式开发

一:实验目的

1、了解Mybatis基础知识;

2、理解Mybatis工作原理

3、掌握Mybatis的注解式开发。

二:实验内容

1)在mybatis数据库中创建:

车间基本表:dept(dnodnameleader),其属性分别表示车间编号、车间名和车间主任;

CREATE TABLE dept(
    dno CHAR(8) PRIMARY KEY NOT NULL,
    dname VARCHAR(20),
    leader VARCHAR(20)
);

职工基本表:empl(enoenamesexentryDatedno),其属性分别表示职工号、姓名、性别、入职日期和所在车间的编号.

CREATE TABLE empl(
    eno CHAR(8),
    ename VARCHAR(20),
    sex VARCHAR(20),
    entryDate DATE,
    dno CHAR(8),
    FOREIGN KEY(dno) REFERENCES dept(dno)
);

创建Dept类:

package pojo;

import java.util.List;

public class Dept {

    private String dno;     //车间编号
    private String dname;   //车间名
    private String leader;  //车间主任

    private List emplList;//车间所有职工信息

    @Override
    public String toString() {
        return "Dept{" +
                "dno='" + dno + '\'' +
                ", dname='" + dname + '\'' +
                ", leader='" + leader + '\'' +
                ", emplList=" + emplList +
                '}';
    }

    public String getDno() {
        return dno;
    }

    public void setDno(String dno) {
        this.dno = dno;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public String getLeader() {
        return leader;
    }

    public void setLeader(String leader) {
        this.leader = leader;
    }

    public List getEmplList() {
        return emplList;
    }

    public void setEmplList(List emplList) {
        this.emplList = emplList;
    }
}

创建Empl类:

package pojo;

public class Empl {

    private String eno;     //职工号
    private String ename;   //姓名
    private String sex;     //性别
    private String entryDate;//入职日期
    private String dno;     //车间编号

    @Override
    public String toString() {
        return "Empl{" +
                "eno='" + eno + '\'' +
                ", ename='" + ename + '\'' +
                ", sex='" + sex + '\'' +
                ", entryDate='" + entryDate + '\'' +
                ", dno='" + dno + '\'' +
                '}';
    }

    public String getEno() {
        return eno;
    }

    public void setEno(String eno) {
        this.eno = eno;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getEntryDate() {
        return entryDate;
    }

    public void setEntryDate(String entryDate) {
        this.entryDate = entryDate;
    }

    public String getDno() {
        return dno;
    }

    public void setDno(String dno) {
        this.dno = dno;
    }
}

创建DeptMapper接口:

package dao;

import org.apache.ibatis.annotations.*;
import pojo.Dept;

public interface DeptMapper {

    //向车间表添加3条记录;
    @Insert("INSERT INTO  dept VALUE('001', '一号车间', '李富贵'),"+
            "('002', '二号车间', '王有才'),"+
            "('003', '三号车间', '吴签')"
    )
    public int insertDept();

    //根据车间名查询车间信息及该车间的所有职工信息。即一对多关系
    @Select("SELECT * FROM dept WHERE dname=#{dname}")
    @Results({
            @Result(id = true, property = "dno", column = "dno"),
            @Result(property = "dname", column = "dname"),
            @Result(property = "leader", column = "leader"),
            @Result(property = "emplList",
                    column = "dno",
                    many = @Many(select = "dao.EmplMapper.selectEmplByDno"))
    })
    public Dept selectAllByDname(String dno);



}

创建Empl接口;

package dao;

import org.apache.ibatis.annotations.*;
import pojo.Dept;
import pojo.Empl;

import java.util.List;

public interface EmplMapper {

    //向职工表添加3条记录;
    @Insert("INSERT INTO  empl VALUE('1', '张三', '男', '2020-01-01', '001'),"+
            "('2', '周杰伦', '男', '2020-07-01', '002'),"+
            "('3', '王非', '女', '2020-10-01', '003')")
    public int insertEmpl();

    //基于职工号查询职工信息;
    @Select("select * from empl where eno=#{eno}")
    public Empl selectEmplByEno(String eno);

    //基于姓名+性别查询职工信息;
    @Select("SELECT * FROM empl WHERE ename=#{ename} and sex=#{sex}")
    public Empl selectEmplByEnameAndSex(Empl empl);

    //修改指定员工的车间号信息;
    @Update("UPDATE empl SET dno=#{dno} WHERE ename=#{ename}")
    public int updateEmplDnoByEname(Empl empl);

    //删除指定员工信息;
    @Delete("delete from empl where ename=#{ename}")
    public int deleteEmplByEname(String ename);

    //根据车间名查询车间信息及该车间的所有职工信息。即一对多关系
    @Select("select * from empl where dno=#{dno}")
    @Results({
            @Result(id = true, property = "eno", column = "eno"),
            @Result(property = "ename", column = "ename"),
            @Result(property = "sex", column = "sex"),
            @Result(property = "entryDate", column = "entryDate")
    })
    public List selectEmplByDno(String dno);

}

创建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.IOException;
import java.io.Reader;

public class MyBatisUtils {

    private static SqlSessionFactory sqlSessionFactory = null;
    static {
        //创建sqlSessionFactory
        Reader reader = null;
        try {
            reader = Resources.getResourceAsReader("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSession(){
        return sqlSessionFactory.openSession();
    }

}

mabatis-config.xml文件:




    
    
    
    
        
            
            
            
                
                
                
                
            
        
    

    
        
        
    

jdbc.properties文件(用户名和密码需要改为你们自己的):

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&\
     characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=root
mysql.password=123456

2)基于注解式实现以下功能:

1、向车间表、职工表分别添加3条记录;

2、基于职工号查询职工信息;

3、基于姓名+性别查询职工信息;

4、修改指定员工的车间号信息;

5、删除指定员工信息;

6、根据车间名查询车间信息及该车间的所有职工信息。

# 创建DeptMapperTest测试类:

package dao;

import junit.framework.TestCase;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import pojo.Dept;
import utils.MyBatisUtils;

public class DeptMapperTest {

    @Test
    //向车间表添加3条记录;
    public void testInsertDept() {

        SqlSession session = MyBatisUtils.getSession();
        DeptMapper deptMapper = session.getMapper(DeptMapper.class);
        int i = deptMapper.insertDept();

        if(i != 0){
            System.out.println("添加成功!");
        }else{
            System.out.println("添加失败!");
        }

        session.commit();   //记得要写提交事务语句,要不然数据不能插入数据库
        session.close();
    }

    @Test
    //根据车间名查询车间信息及该车间的所有职工信息。
    public void selectAllByDname(){
        SqlSession session = MyBatisUtils.getSession();
        DeptMapper deptMapper = session.getMapper(DeptMapper.class);
        Dept dept = deptMapper.selectAllByDname("一号车间");
        System.out.println(dept);
        session.close();
    }

}

# 创建EmplMapperTest测试类:

package dao;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.Dept;
import pojo.Empl;
import utils.MyBatisUtils;

public class EmplMapperTest {

    @Test
    //向职工表添加3条记录;
    public void insertEmpl(){
        SqlSession session = MyBatisUtils.getSession();
        EmplMapper emplMapper = session.getMapper(EmplMapper.class);
        int i = emplMapper.insertEmpl();
        if(i != 0){
            System.out.println("添加成功!");
        }else {
            System.out.println("添加失败!");
        }
        session.commit();   //记得要写提交事务语句,要不然数据不能插入数据库
        session.close();
    }

    @Test
    //基于职工号查询职工信息;
    public void SelectEmplByEno() {
        SqlSession session = MyBatisUtils.getSession();
        EmplMapper emplMapper = session.getMapper(EmplMapper.class);
        Empl empl =emplMapper.selectEmplByEno("1");
        System.out.println(empl);
        session.close();
    }

    @Test
    //基于姓名+性别查询职工信息;
    public void selectEmplByEnameAndSex(){
        SqlSession session = MyBatisUtils.getSession();
        EmplMapper emplMapper = session.getMapper(EmplMapper.class);
        Empl empl = new Empl(); //两个输入条件的时候需要创建一个模拟对象来保存查询条件,否则会报错
        empl.setEname("周杰伦");
        empl.setSex("男");
        Empl emplRes =emplMapper.selectEmplByEnameAndSex(empl);
        System.out.println(emplRes);
        session.close();
    }

    @Test
    //修改指定员工的车间号信息;
    public void updateEmplDnoByEname(){
        SqlSession session = MyBatisUtils.getSession();
        EmplMapper emplMapper = session.getMapper(EmplMapper.class);
        Empl empl = new Empl(); //两个输入条件的时候需要创建一个模拟对象来保存查询条件,否则会报错
        empl.setDno("001");     //需要修改的车间号
        empl.setEname("张三");   //指定员工
        int i =emplMapper.updateEmplDnoByEname(empl);
        if(i != 0){
            System.out.println("修改成功!");
        }else {
            System.out.println("修改失败!");
        }
        session.commit();   //记得要写提交事务语句,要不然数据不能插入数据库
        session.close();
    }

    @Test
    //删除指定员工信息;
    public void deleteEmplByEname(){
        SqlSession session = MyBatisUtils.getSession();
        EmplMapper emplMapper = session.getMapper(EmplMapper.class);
        int i =emplMapper.deleteEmplByEname("周杰伦");
        if(i != 0){
            System.out.println("删除成功!");
        }else {
            System.out.println("删除失败!");
        }
        session.commit();   //记得要写提交事务语句,要不然删除不了数据
        session.close();
    }


}

你可能感兴趣的:(Javaee课程实验,mybatis,java,mysql,java-ee)