基于前一篇博客的实例,我们这次来完成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框架下对数据库的基本增、删、改、查功能。