MyBatis 注解
-
注解
在前面的章节中,我们已经了解了如何使用MyBatis执行CURD操作。在那里,我们使用了一个Mapper XML文件来存储映射的SQL语句,并使用一个配置XML文件来配置MyBatis。为了映射SQL语句,MyBatis还提供了注解。因此,本章讨论如何使用MyBatis注解。在处理注解时,我们可以使用Java mapper接口来映射和执行SQL查询,而不是配置XML文件。假设,我们在MySQL中具有以下employee表:CREATE TABLE details.student( ID int(10) NOT NULL AUTO_INCREMENT, NAME varchar(100) NOT NULL, BRANCH varchar(255) NOT NULL, PERCENTAGE int(3) NOT NULL, PHONE int(11) NOT NULL, EMAIL varchar(255) NOT NULL, PRIMARY KEY (`ID`) ); Query OK, 0 rows affected (0.37 sec)
假设此表具有两个记录,如下所示-mysql> select * from STUDENT; +----+----------+--------+------------+-----------+--------------------+ | ID | NAME | BRANCH | PERCENTAGE | PHONE | EMAIL | +----+----------+--------+------------+-----------+--------------------+ | 1 | Mohammad | It | 80 | 984803322 | Mohammad@gmail.com | | 2 | Shyam | It | 75 | 984800000 | shyam@gmail.com | +----+----------+--------+------------+-----------+--------------------+
-
Student POJO类
POJO类将具有执行所需操作所需的所有方法的实现。 在Student.java文件中将Student类创建为-public class Student { private int id; private String name; private String branch; private int percentage; private int phone; private String email; public Student(int id, String name, String branch, int percentage, int phone, String email) { super(); this.id = id; this.name = name; this.branch = branch; this.percentage = percentage; this.phone = phone; this.email = email; } public Student() {} 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 getPhone() { return phone; } public void setPhone(int phone) { this.phone = phone; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getBranch() { return branch; } public void setBranch(String branch) { this.branch = branch; } public int getPercentage() { return percentage; } public void setPercentage(int percentage) { this.percentage = percentage; } }
-
Student_mapper.java
这是文件,其中包含映射器接口,我们在其中使用批注而不是XML标签声明映射的语句。对于几乎所有基于XML的映射器元素,MyBatis都提供了注释。以下名为Student_mapper.java的文件包含一个映射器接口。在此文件中,您可以看到对STUDENT表执行CURD操作的注释。import java.util.List; import org.apache.ibatis.annotations.*; public interface Student_mapper { final String getAll = "SELECT * FROM STUDENT"; final String getById = "SELECT * FROM STUDENT WHERE ID = #{id}"; final String deleteById = "DELETE from STUDENT WHERE ID = #{id}"; final String insert = "INSERT INTO STUDENT (NAME, BRANCH, PERCENTAGE, PHONE, EMAIL ) VALUES (#{name}, #{branch}, #{percentage}, #{phone}, #{email})"; final String update = "UPDATE STUDENT SET EMAIL = #{email}, NAME = #{name}, BRANCH = #{branch}, PERCENTAGE = #{percentage}, PHONE = #{phone} WHERE ID = #{id}"; @Select(getAll) @Results(value = { @Result(property = "id", column = "ID"), @Result(property = "name", column = "NAME"), @Result(property = "branch", column = "BRANCH"), @Result(property = "percentage", column = "PERCENTAGE"), @Result(property = "phone", column = "PHONE"), @Result(property = "email", column = "EMAIL") }) List getAll(); @Select(getById) @Results(value = { @Result(property = "id", column = "ID"), @Result(property = "name", column = "NAME"), @Result(property = "branch", column = "BRANCH"), @Result(property = "percentage", column = "PERCENTAGE"), @Result(property = "phone", column = "PHONE"), @Result(property = "email", column = "EMAIL") }) Student getById(int id); @Update(update) void update(Student student); @Delete(deleteById) void delete(int id); @Insert(insert) @Options(useGeneratedKeys = true, keyProperty = "id") void insert(Student student); }
-
Annotations_Example.java文件
该文件将具有应用程序级逻辑,以将记录插入到Student表中。创建并保存mybatisInsert.java文件,如下所示-import java.io.IOException; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class Annotations_Example { public static void main(String args[]) throws IOException{ Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); SqlSession session = sqlSessionFactory.openSession(); session.getConfiguration().addMapper(Student_mapper.class); Student_mapper mapper = session.getMapper(Student_mapper.class); //Create a new student object Student student = new Student(); //Set the values student.setName("zara"); student.setBranch("EEE"); student.setEmail("zara@gmail.com"); student.setPercentage(90)); student.setPhone(123412341); //Insert student data mapper.insert(student); System.out.println("record inserted successfully"); session.commit(); session.close(); } }
-
编译并运行
这是编译和运行Annotations_Example.java文件的步骤。在继续进行编译和执行之前,请确保已正确设置了PATH和CLASSPATH。- 如上所示创建Student.xml。
- 如本教程的MYBATIS-配置XML章节中所示,创建SqlMapConfig.xml 。
- 如上所示创建Student.java并进行编译。
- 如上所示创建Annotations_Example.java并进行编译。
- 执行Annotations_Example二进制文件以运行程序。
您将得到以下结果,并且将在STUDENT表中创建一条记录。$java Annotations_Example Record Inserted Successfully
如果检查student表,它将显示以下结果-mysql> select * from student; +----+----------+--------+------------+-----------+----------------------+ | ID | NAME | BRANCH | PERCENTAGE | PHONE | EMAIL | +----+----------+--------+------------+-----------+----------------------+ | 1 | Mohammad | It | 80 | 900000000 | mohamad123@yahoo.com | | 2 | Shyam | It | 75 | 984800000 | shyam@gmail.com | | 3 | Zara | EEE | 90 | 123412341 | zara@gmail.com | +----+----------+--------+------------+-----------+----------------------+ 3 rows in set (0.08 sec)
以相同的方式,我们可以使用注释执行更新,删除和读取操作,方法是将Annotations_Example.java的内容替换为下面提到的各个代码片段-UPDATEpublic static void main(String args[]) throws IOException{ Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); SqlSession session = sqlSessionFactory.openSession(); session.getConfiguration().addMapper(Student_mapper.class); Student_mapper mapper = session.getMapper(Student_mapper.class); //select a particular student using id Student student = mapper.getById(2); System.out.println("Current details of the student are "+student.toString()); //Set new values to the mail and phone number of the student student.setEmail("Shyam123@yahoo.com"); student.setPhone(984802233); //Update the student record mapper.update(student); System.out.println("Record updated successfully"); session.commit(); session.close(); }
SELECTpublic static void main(String args[]) throws IOException{ Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); SqlSession session = sqlSessionFactory.openSession(); session.getConfiguration().addMapper(Student_mapper.class); Student_mapper mapper = session.getMapper(Student_mapper.class); //Get the student details Student student = mapper.getById(2); System.out.println(student.getBranch()); System.out.println(student.getEmail()); System.out.println(student.getId()); System.out.println(student.getName()); System.out.println(student.getPercentage()); System.out.println(student.getPhone()); session.commit(); session.close(); }
DELETEpublic static void main(String args[]) throws IOException{ Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); SqlSession session = sqlSessionFactory.openSession(); session.getConfiguration().addMapper(Student_mapper.class); Student_mapper mapper = session.getMapper(Student_mapper.class); mapper.delete(2); System.out.println("record deleted successfully"); session.commit(); session.close(); }