mybatis学习(3)——mybatis框架下的增、删、改、查功能

这篇博客介绍如何在MyBatis框架下利用SQLite数据库实现增、删、改、查功能。首先修改StudentMapper接口,添加相应方法,接着更新StudentMapper.xml配置文件,然后创建SqlSessionFactoryUtils工具类用于SqlSession管理,最后通过测试类验证CRUD功能的正确性。

基于前一篇博客的实例,我们这次来完成mybatis框架下sqlite数据库增、删、改、查的实现。

1、修改StudentMapper接口

首先修改上一次的StudentMapper接口,新增几个方法。

package com.mapper;
import com.pojo.Student;
import java.util.List;

public interface StudentMapper {
    public Student getStudentById(int id);
    public List<Student> findStudents(String roleName);
    public int insertStudent(Student role);
    public int deleteStudent(int id);
    public int updateStudent(Student role);
}

2、修改StudentMpper.xml文件

<?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="com.mapper.StudentMapper">
    <select id="getStudentById" resultType="student" parameterType="int">
        select ID,Name,Sex,Grade from student where id=#{id}
    </select>
    <insert id="insertStudent" parameterType="student">
        insert into student(ID,NAME,SEX,GRADE) values (#{ID},#{Name},#{Sex},#{Grade})
    </insert>
    <delete id="deleteStudent" parameterType="int">
        delete from student where id=#{id}
    </delete>
    <update id="updateStudent" parameterType="student">
        update student set NAME=#{Name},SEX=#{Sex},GRADE=#{Grade} where id=#{ID}
    </update>
    <select id="findStudents" parameterType="int" resultType="student">
        select ID,Name,Sex,Grade from student where role_name like concat('%',#{roleName}.'%')
    </select>
</mapper>

3、新增一个工具类SqlSessionFactoryUtils

通过这个SqlSessionFactoryUtils工具类来管理SqlSession对象,由于SqlSessionFactory在这里应该是采用单例模式,所以我们在代码中使用单例模式去构建它。

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

//一个工具类,用于创建SqlSwssionFactory和获取SqlSession对象
public class SqlSessionFactoryUtils {
    private final static Class<SqlSessionFactoryUtils> LOCK=SqlSessionFactoryUtils.class;

    private static SqlSessionFactory sqlSessionFactory=null;

    private SqlSessionFactoryUtils(){}

    public static SqlSessionFactory getSqlSessionFactory(){
        synchronized (LOCK){
            if(sqlSessionFactory!=null){
                return sqlSessionFactory;
            }
            String resource="mybatis-config.xml";
            InputStream inputStream;
            try {
                inputStream= Resources.getResourceAsStream(resource);
                sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            }catch (IOException e){
                e.printStackTrace();
                return null;
            }
            return sqlSessionFactory;
        }
    }

    public static SqlSession openSqlSession(){
        if(sqlSessionFactory==null){
            getSqlSessionFactory();
        }
        return sqlSessionFactory.openSession();
    }
}

4、测试

在测试类中测试我们的增、删、改、查功能。

package com.main;


import com.mapper.StudentMapper;
import com.pojo.Student;
import com.utils.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;





public class Test {
    public static void main(String[] args) {
//        Logger log=Logger.getLogger(Test.class);
//
//        SqlSessionFactory sqlSessionFactory=null;
//        String resource="mybatis-config.xml";
//        InputStream inputStream;
//        SqlSession sqlSession=null;
//        try {
//            inputStream = Resources.getResourceAsStream(resource);
//
//            //获取一个sqlSessionFactory
//            sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//            //通过sqlSessionFactory获取一个sqlSession
//            sqlSession=sqlSessionFactory.openSession();
//
//            //根据映射器接口获取一个映射器
//            StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class);
//            //调用映射器中的getStudentById()方法,1为参数,返回类型是一个
//            Student student=studentMapper.getStudentById(1);
//
//            System.out.println("id: "+student.getID()+"  name: "+student.getName()+
//            " sex: "+student.getSex()+" grade: "+student.getGrade());
//
//        }catch (Exception e){
//            e.printStackTrace();
//        }finally {
//            if(sqlSession!=null)
//                sqlSession.close();
//        }
//    }
        //采用工厂模式来创建SqlSession
        //Logger log=Logger.getLogger(Test.class);
        //新建一个student对象
        Student student=new Student();
        student.setID(3);
        student.setName("tony");
        student.setSex("man");
        student.setGrade(93.78f);
        SqlSession sqlSession=null;
        try {
            sqlSession=SqlSessionFactoryUtils.openSqlSession();
            //获取一个studentMapper接口
            StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class);

            System.out.println("插入新的数据");
            //返回结果为一个整数,表示数据表中收到影响的记录数;
            int result=studentMapper.insertStudent(student);
            //提交
            sqlSession.commit();
            System.out.println("插入  "+result+"  条记录");

            System.out.println("查询新的数据");
            Student student1=studentMapper.getStudentById(3);
            System.out.println("id: "+student1.getID()+"  name: "+student1.getName()+
            " sex: "+student1.getSex()+" grade: "+student1.getGrade());

            //修改一条记录
            student.setName("Tom");
            System.out.println("修改新的数据");
            //返回结果为一个整数,表示数据表中收到影响的记录数;
            int result1=studentMapper.updateStudent(student);
            //提交
            sqlSession.commit();
            System.out.println("修改  "+result1+"  条记录");

            System.out.println("查询更新后的数据");
            Student student2=studentMapper.getStudentById(3);
            System.out.println("id: "+student2.getID()+"  name: "+student2.getName()+
                    " sex: "+student2.getSex()+" grade: "+student2.getGrade());

            //删除数据
            int result3=studentMapper.deleteStudent(3);
            //提交
            sqlSession.commit();
            System.out.println("删除  "+result3+"  条记录");

        }finally {
            if(sqlSession!=null){
                sqlSession.close();
            }
        }
    }
}

看一下输出结果

至此,我们已经完成了mybatis框架下对数据库的基本增、删、改、查功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值