类似于Hibernate的配置,它也是有一个基础的XML文件,但是这个XML文件的名字可以给任意的名字,它里面的配置也是通过的映射找到model中的XML文件,然后再根据这个XML文件中配置的成员与字段的映射关系再去处理相关问题,代码如下:
首先是基础XML的配置: basexml.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="mysql"> <!--因为不同的数据库配置不同,所以这个是配置默认采用的数据库配置--> <environment id="mysql"> <!--id属性就是让父标签中的default找到对应的数据库配置--> <transactionManager type="jdbc"></transactionManager> <dataSource type="pooled"> <!--这个属性是池化的意思,意思是采用数据库连接池--> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mec_mysql ? characterEncoding=utf8 & useSSL=false & serverTimezone=Asia/Shanghai & rewriteBatchedStatements=true"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/mec/mybatis/model/Student.mbm.xml"/> </mappers> </configuration>这个接口是定义要使用的方法 IStudent.java:
package com.mec.mybatis.model; import java.util.List; public interface IStudent { int save(StudentModel sm); StudentModel getById(String id); List<StudentModel> getAll(); }这个model类: StudentModel.java
package com.mec.mybatis.model; public class StudentModel { private String number; private String name; private String sex; private String brithday; private String ID; private String Status; public StudentModel() { } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getBrithday() { return brithday; } public void setBrithday(String brithday) { this.brithday = brithday; } public String getId() { return ID; } public void setId(String ID) { this.ID = ID; } public String getStatus() { return Status; } public void setStatus(String Status) { this.Status = Status; } @Override public String toString() { return "StudentModel [number=" + number + ", name=" + name + ", sex=" + sex + ", brithday=" + brithday + ", ID=" + ID + ", Status=" + Status + "]"; } }这个XML就是基础XML配置的mapping对应的,它中间配置了类表对应以及成员字段对应,但是与Hibernate的配置有些不同,因为它不能像Hibernnate一样自动生成SQL语句,需要自己定义SQL语句,所以需要在其中写出接口中方法所使用的SQL语句
Student.mbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.mec.mybatis.model.IStudent"> <resultMap type="com.mec.mybatis.model.StudentModel" id="student"> <id property="number" column="stNumber" javaType="java.lang.String"/> <result property="name" column="name" javaType="java.lang.String"/> <result property="sex" column="sex" javaType="java.lang.String"/> <result property="ID" column="ID" javaType="java.lang.String"/> <result property="Status" column="Status" javaType="java.lang.String"/> <result property="brithday" column="brithday" javaType="java.lang.String"/> </resultMap> <!--写方法的SQL语句,这里的id与接口中定义的方法名必须一样--> <insert id="save" keyProperty="number"> INSERT INTO student_info (stNumber, name, sex, brithday, ID, Status) VALUES (#{number}, #{name}, #{sex}, #{brithday},#{ID},#{Status}) </insert> <select id="getById" parameterType="java.lang.String" resultMap="student"> SELECT * FROM student_info WHERE stNumber=#{number} </select> <select id="getAll" resultMap="student"> SELECT * FROM student_info </select> </mapper>Test类:
package com.mec.mybatis.test; import java.io.IOException; import java.util.List; 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 com.mec.mybatis.model.IStudent; import com.mec.mybatis.model.StudentModel; public class Test { public static void main(String[] args) { try { SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("baseconfig.xml")); SqlSession ss = sf.openSession(); IStudent is = ss.getMapper(IStudent.class); List<StudentModel> ls = is.getAll(); for(StudentModel sm : ls) { System.out.println(sm); } StudentModel st = new StudentModel(); st.setNumber("06173011"); st.setName("张hh"); st.setSex("男"); st.setBrithday("1952/02/03"); st.setStatus("0"); st.setId("610321199811050808"); is.save(st); System.out.println("end"); ss.commit(); //这个事务提交很重要不然对数据库的修改操作将无法保存 } catch (IOException e) { e.printStackTrace(); } } }经过Hibernate的配置和Mybatis的配置就可以看出来,相对于Hibernate,Mybatis的SQL语句,以及方法都需要自己写,灵活但是繁琐;但是Hibernate的配置,如果要使用的非常灵活,则HQL是一个必须掌握的,如果运用不好就会让数据库的读写很缓慢,综上所述,相对于公司的快节奏开发,由于Hibernate能熟练引用的人才的稀缺,所以大量公司选择了Mybatis,可以说有弊有利,具体差别的话,等博主进入公司使用它开发一些东西之后再来写其中的感受!