Mybatis实现增删改查(二)

时间:2021-09-18 05:13:50

1. 准备

        请先完成Mybatis基本配置(一)的基本内容

2. 查询多条商品信息

        1)在com.mybatis.dao.PartDao中增加接口函数

public List<PartInfo> getAllPartInfo();

        2)在com.mybatis.dao.mapper.PartMapper中增加其实现方法。尽管我需要返回的数据类型为List<PartInfo>,但是在Mapper文件中配置resultType属性的时候依然为com.mybatis.entity.PartInfo即可。mybatis会自动将所有的查询结果逐条创建实例并填充到list中去。

<!-- dao接口函数中的返回结果类型是List<PartInfo> -->
<!-- 但是在这里的resultType属性值依然是com.mybatis.entity.PartInfo -->
<!-- mybatis会自动将所有的查询结果填充到list中去 -->
<select id="getAllPartInfo" resultType="com.mybatis.entity.PartInfo">
    SELECT * FROM tbInfoPart
</select>

        3)测试下效果

public static List<PartInfo> selectAllPart(){
    InputStream iStream = TestMain.class.getClassLoader().getResourceAsStream("mybatis.xml");
    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(iStream);
    SqlSession session = sessionFactory.openSession();
    String statement = "com.mybatis.dao.PartDao.getAllPartInfo";
    List<PartInfo> partInfos = session.selectList(statement);
    session.close();
    return partInfos;
}
public static void main(String[] args) {
    List<PartInfo> partInfos = selectAllPart();
    for (PartInfo partInfo : partInfos) {
        System.out.println("ID:"+partInfo.getId()+" 商品:["+
                            partInfo.getPartCode()+"] "+
                            partInfo.getPartName()+" ,售价:"+
                            partInfo.getSalePrice()+"元/"+
                            partInfo.getUnit()); 
}

可看到打印结果为

ID:1 商品:[001-0001] TCL D32E161 32英寸 内置wifi 在线影视 窄边LED网络液晶电视 ,售价:1099.9元/台
ID:2 商品:[001-0002] TCL D50A710 50英寸 40万小时视频 全高清 内置WiFi 八核安卓智能LED液晶电视 ,售价:2799.0元/台

说明我们已经将所有的商品都查询出来了

3. 新增一条商品

        1)在com.mybatis.dao.PartDao中增加接口函数

public void insertPartInfo(PartInfo partInfo);

        2)在com.mybatis.dao.mapper.PartMapper中增加其实现方法。

<!-- #{} 大括号里面的参数名是和com.mybatis.entity.PartInfo中的属性名对应的 -->
<!-- mybatis会自动将其属性值按照数据类型填充到被预编译的SQL脚本中 -->
<insert id="insertPartInfo" parameterType="com.mybatis.entity.PartInfo">
    INSERT INTO tbInfoPart (PartCode, PartName, Unit, SalePrice) 
    VALUES (#{partCode},#{partName},#{unit},#{salePrice})
</insert>

        3)测试下效果,注意session.commit()不要遗漏,否则数据无法提交到数据库

public static void insertPart(PartInfo partInfo){
    InputStream iStream = TestMain.class.getClassLoader().getResourceAsStream("mybatis.xml");
    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(iStream);
    SqlSession session = sessionFactory.openSession();
    String statement = "com.mybatis.dao.PartDao.insertPartInfo";
    session.insert(statement, partInfo);
    session.commit();
    session.close();
}
public static void main(String[] args) {
    //先查询下数据库有哪些商品了
    List<PartInfo> partInfos;             
    partInfos = selectAllPart();        
    for (PartInfo partInfo1 : partInfos) {
    System.out.println("ID:"+partInfo1.getId()+" 商品:["+
                       partInfo1.getPartCode()+"] "+
                       partInfo1.getPartName()+" ,售价:"+
                       partInfo1.getSalePrice()+"元/"+
                       partInfo1.getUnit());     
    }
    //添加商品     
    PartInfo partInfo = new PartInfo();
    partInfo.setPartCode("001-0003");
    partInfo.setPartName("康佳(KONKA) LED42E330CE 42英寸 全高清液晶电视");
    partInfo.setUnit("");
    partInfo.setSalePrice(1699.00f);
    insertPart(partInfo);
    System.out.println("新增商品完成!");
    //再重新查询下数据库的商品看看我们新添加的商品是否成功保存到数据库   
    partInfos = selectAllPart();        
    for (PartInfo partInfo2 : partInfos) {
        System.out.println("ID:"+partInfo2.getId()+" 商品:["+
                           partInfo2.getPartCode()+"] "+
                           partInfo2.getPartName()+" ,售价:"+
                           partInfo2.getSalePrice()+"元/"+
                           partInfo2.getUnit()); 
    }        
}

         可看到打印结果为

ID:1 商品:[001-0001] TCL D32E161 32英寸 内置wifi 在线影视 窄边LED网络液晶电视 ,售价:1099.9元/台
ID:2 商品:[001-0002] TCL D50A710 50英寸 40万小时视频 全高清 内置WiFi 八核安卓智能LED液晶电视 ,售价:2799.0元/台
新增商品完成!
ID:1 商品:[001-0001] TCL D32E161 32英寸 内置wifi 在线影视 窄边LED网络液晶电视 ,售价:1099.9元/台
ID:2 商品:[001-0002] TCL D50A710 50英寸 40万小时视频 全高清 内置WiFi 八核安卓智能LED液晶电视 ,售价:2799.0元/台
ID:3 商品:[001-0003] 康佳(KONKA) LED42E330CE 42英寸 全高清液晶电视 ,售价:1699.0元/台

        说明我们新增的商品已经成功保存到数据库里面了

4.编辑商品信息

        1)在com.mybatis.dao.PartDao中增加接口函数

public void updatePartInfo(PartInfo partInfo);

        2)在com.mybatis.dao.mapper.PartMapper中增加其实现方法。

<!-- #{} 大括号里面的参数名是和com.mybatis.entity.PartInfo中的属性名对应的 -->
<!-- mybatis会自动将其属性值按照数据类型填充到被预编译的SQL脚本中 -->
<update id="updatePartInfo" parameterType="com.mybatis.entity.PartInfo">
    UPDATE tbInfoPart SET 
        PartCode=#{partCode},
        PartName=#{partName},
        Unit=#{unit},
        SalePrice=#{salePrice}
    WHERE ID=#{id}
</update>

        3)测试下效果,注意session.commit()不要遗漏,否则数据无法提交到数据库

public static void updatePart(PartInfo partInfo){
    InputStream iStream = TestMain.class.getClassLoader().getResourceAsStream("mybatis.xml");
    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(iStream);
    SqlSession session = sessionFactory.openSession();
    String statement = "com.mybatis.dao.PartDao.updatePartInfo";
    session.update(statement, partInfo);
    session.commit();
    session.close();
}
public static void main(String[] args) {
    PartInfo partInfo; 
        
    partInfo = selectPart(1);
    System.out.println("原商品信息:["+partInfo.getPartCode()+"] "+
                        partInfo.getPartName()+" ,售价:"+
                        partInfo.getSalePrice()+"元/"+
                        partInfo.getUnit());
        
        
    partInfo.setPartCode("001-0003");
    partInfo.setPartName("康佳(KONKA) LED55U60 55英寸 优酷电视梦想版8核优酷视频海量应用");
    partInfo.setUnit("台");
    partInfo.setSalePrice(2999.00f);
        
    updatePart(partInfo);
    System.out.println("修改商品完成!");
        
    partInfo = selectPart(1);
    System.out.println("新商品信息:["+partInfo.getPartCode()+"] "+
                        partInfo.getPartName()+" ,售价:"+
                        partInfo.getSalePrice()+"元/"+
                        partInfo.getUnit());       
}

        可看到打印结果为

原商品信息:[001-0001] TCL D32E161 32英寸 内置wifi 在线影视 窄边LED网络液晶电视 ,售价:1099.9元/台
修改商品完成!
新商品信息:[001-0003] 康佳(KONKA) LED55U60 55英寸 优酷电视梦想版8核优酷视频海量应用 ,售价:2999.0元/台

        说明我们编辑的商品已经成功保存到数据库里面了

5.删除商品信息

        1)在com.mybatis.dao.PartDao中增加接口函数

public void deletePartInfo(int id);

        2)在com.mybatis.dao.mapper.PartMapper中增加其实现方法。

<delete id="deletePartInfo" parameterType="int">
    DELETE FROM tbInfoPart WHERE ID=#{id}
</delete>

        3)测试下效果,注意session.commit()不要遗漏,否则数据无法提交到数据库

public static void deletePart(int id) {
    InputStream iStream = TestMain.class.getClassLoader().getResourceAsStream("mybatis.xml");
    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(iStream);
    SqlSession session = sessionFactory.openSession();
    String statement = "com.mybatis.dao.PartDao.deletePartInfo";
    session.update(statement, id);
    session.commit();
    session.close();
}
public static void main(String[] args) {
    // 先查询下数据库有哪些商品了
    List<PartInfo> partInfos;
    partInfos = selectAllPart();
    for (PartInfo partInfo1 : partInfos) {
    System.out.println("ID:" + partInfo1.getId() + " 商品:[" + 
                               partInfo1.getPartCode() + "] " + 
                               partInfo1.getPartName() + " ,售价:" + 
                               partInfo1.getSalePrice() + "元/" + 
                               partInfo1.getUnit());
    }
    // 删除商品
    deletePart(1);
    System.out.println("删除商品完成!");
    // 再重新查询下数据库的商品看看我们删除的商品是否成功删除    
    partInfos = selectAllPart();
    for (PartInfo partInfo1 : partInfos) {
    System.out.println("ID:" + partInfo1.getId() + " 商品:[" + 
                               partInfo1.getPartCode() + "] " + 
                               partInfo1.getPartName() + " ,售价:" + 
                               partInfo1.getSalePrice() + "元/" + 
                               partInfo1.getUnit());
    }
}

可看到打印结果为

ID:1 商品:[001-0003] 康佳(KONKA) LED55U60 55英寸 优酷电视梦想版8核优酷视频海量应用 ,售价:2999.0元/台
ID:2 商品:[001-0002] TCL D50A710 50英寸 40万小时视频 全高清 内置WiFi 八核安卓智能LED液晶电视 ,售价:2799.0元/台
ID:3 商品:[001-0003] 康佳(KONKA) LED42E330CE 42英寸 全高清液晶电视 ,售价:1699.0元/台
新增商品完成!
ID:2 商品:[001-0002] TCL D50A710 50英寸 40万小时视频 全高清 内置WiFi 八核安卓智能LED液晶电视 ,售价:2799.0元/台
ID:3 商品:[001-0003] 康佳(KONKA) LED42E330CE 42英寸 全高清液晶电视 ,售价:1699.0元/台

可以看到ID=1的商品已经被删除掉了

6. 目录结构及源码

Mybatis实现增删改查(二)

源码下载:点此下载源码