MyBatis实例四:student的增删查改(通过接口方式)
1、Student类
package me.xiaoxiao.domain; /** * * @author xiaoxiao * 数据库中Student表所对应的实体类及其属性(id,name,age) */ public class Student { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString(){ return "Student[id="+id+",name="+name+",age="+age+"]"+"\n"; } }
2、定义xml映射文件:studentMapper.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:包路径+sql映射文件名 --> <mapper namespace="me.xiaoxiao.mapping.StudentMapper"> <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser, id属性值必须是唯一的,不能够重复,唯一标识这条记录信息; parameterType属性指明查询时使用的参数类型; resultType属性指明查询返回的结果集类型。 resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回 User类就是users表所对应的实体类 --> <!-- 查询学生信息 --> <select id="getStudent" parameterType="int" resultType="me.xiaoxiao.domain.Student"> select * from student where id = #{id} </select> <!-- 为什么查询学生中parameterType参数值为int,而新增学生确实me.xiaoxiao.domain.Student --> <!-- 新增学生 --> <insert id="addStudent" parameterType="me.xiaoxiao.domain.Student"> <!-- insert into student(id,name,age) value(3,"肖文飞",4) --> insert into student(id,name,age) value(#{id},#{name},#{age}) </insert> <update id="updateStudent" parameterType="me.xiaoxiao.domain.Student"> update student set name=#{name},age=#{age} where id=#{id} </update> <delete id="deleteStudent" parameterType="me.xiaoxiao.domain.Student"> delete from student where id=#{id} </delete> <select id="getAllStudent" resultType="me.xiaoxiao.domain.Student"> select * from student </select> </mapper>
3、定义映射接口:StudentMapper
package me.xiaoxiao.mapping; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import me.xiaoxiao.domain.Student; public interface StudentMapper { //如果仅仅定义接口方法,其名称必须与xml文件中 唯一标识该语句的id名称一致 // @Insert("insert into student(name,age) values(#{name},#{age})") public void addStudent(Student student); // @Delete("delete from student where id=#{id}") public void deleteStudent(Student student); // @Select("select * from student where id=#{id}") public Student getStudent(int id); // @Select("select * from student") public List<Student> getAllStudent(); // @Update("update student set name=#{name},age=#{age} where id=#{id}") public void updateStudent(Student student); }
4、定义MyBatis配置文件
<?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:包路径+sql映射文件名 --> <mapper namespace="me.xiaoxiao.mapping.StudentMapper"> <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser, id属性值必须是唯一的,不能够重复,唯一标识这条记录信息; parameterType属性指明查询时使用的参数类型; resultType属性指明查询返回的结果集类型。 resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回 User类就是users表所对应的实体类 --> <!-- 查询学生信息 --> <select id="getStudent" parameterType="int" resultType="me.xiaoxiao.domain.Student"> select * from student where id = #{id} </select> <!-- 为什么查询学生中parameterType参数值为int,而新增学生确实me.xiaoxiao.domain.Student --> <!-- 新增学生 --> <insert id="addStudent" parameterType="me.xiaoxiao.domain.Student"> <!-- insert into student(id,name,age) value(3,"肖文飞",4) --> insert into student(id,name,age) value(#{id},#{name},#{age}) </insert> <update id="updateStudent" parameterType="me.xiaoxiao.domain.Student"> update student set name=#{name},age=#{age} where id=#{id} </update> <delete id="deleteStudent" parameterType="me.xiaoxiao.domain.Student"> delete from student where id=#{id} </delete> <select id="getAllStudent" resultType="me.xiaoxiao.domain.Student"> select * from student </select> </mapper>
5、util工具类获取SqlSessionFactory
package me.xiaoxiao.util; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import me.xiaoxiao.util.Util; public class Util { public static SqlSessionFactory getSqlSessionFactory(){ /** * 获取SqlSessionFactory * @return SqlSesionFactory */ String resource = "conf.xml"; InputStream is = Util.class.getClassLoader().getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); return factory; } /** * 获取 SqlSession * @return SqlSession */ public static SqlSession getSqlSession(){ return getSqlSessionFactory().openSession(); } /** * 获取SqlSession * @param isAutoCommit * true: 表示创建的SqlSession对象在执行完成SQL之后会自动提交事务 * false: 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务 * @return SqlSession */ public static SqlSession getSqlSession(boolean isAutoCommit){ return getSqlSessionFactory().openSession(isAutoCommit); } }
6、数据库编辑:

7、测试
package me.xiaoxiao.test; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import me.xiaoxiao.domain.Student; import me.xiaoxiao.mapping.StudentMapper; import me.xiaoxiao.util.Util; /** * * @author xiaoxiao * CRUD主要被用于在描述软件系统中数据库 或者持久层的基本的增删查改操作 */ public class StudentTest { /** * 查询学生信息 */ // @Test public void queryStudent(){ String resource = "conf.xml"; InputStream is = StudentTest.class.getClassLoader().getResourceAsStream(resource); SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); SqlSession session = sessionFactory.openSession(); String statement="me.xiaoxiao.mapping.studentMapper.getStudent"; //映射sql语句的标识字符串 Student student=session.selectOne(statement,1); System.out.println(student); Student student2=session.selectOne(statement,2); System.out.println(student2); } /** * 新增学生 */ @Test public void addStudent(){ SqlSession sqlSession = Util.getSqlSession(true); //这里为什么可以使用Util.getSqlSession(可直接引用该类) String statement="me.xiaoxiao.mapping.StudentMapper.addStudent"; Student student=new Student(); student.setId(6); student.setName("亚丽"); student.setAge(20); int result =sqlSession.insert(statement,student); System.out.println(result); sqlSession.close(); } /** * 修改学生信息 */ // @Test public void updateStudent(){ SqlSession sqlSession = Util.getSqlSession(true); String statement = "me.xiaoxiao.mapping.StudentMapper.updateStudent"; Student student = new Student(); student.setId(5); student.setName("姜大小姐是姜兰"); student.setAge(22); int result = sqlSession.update(statement,student); System.out.println(result); sqlSession.close(); } @Test public void testSelecAll(){ SqlSession sqlSession = Util.getSqlSession(); StudentMapper sMapper = sqlSession.getMapper(StudentMapper.class); List<Student> students=new ArrayList<>(); students = sMapper.getAllStudent(); sqlSession.close(); System.out.println(students); } }
控制台输出:

注意:
1、statement=“me.xiaoxiao.mapping.StudentMapper.addStudent”中的名称与接口StudentMapper以及方法一致
2、me.xiaoxiao.mapping.StudentMapper.java中的方法名必须与 studentMapper.xml中的唯一标识该条语句的id名一致

浙公网安备 33010602011771号