Mybatis与Hibernate的比较html
1.Mybatis是半自动化,SQL须要开发人员编写,能够定制编写复杂的SQLjava
2.Mybatis能够针对数据或者特殊的场景作优化,提升应用的响应速度mysql
3.Mybatis更轻量,更容易学习,Hibernate要支持定制化的SQL还须要HQL,更难掌握sql
4.Mybatis不须要bean对全部表的字段作映射,特别在开发电信系统时,一个表可能有30到40个字段,若是用Hibernate会比较麻烦数据库
更详细的对比能够参考:【持久化框架】Mybatis与Hibernate的详细对比apache
编写一个Mybatis步骤:session
英文比较好的能够参考:Getting startedmybatis
具体步骤以下:app
* 1.下载mybatis包
* 2.在类路径下配置全局配置文件
* 3.得到SqlSeessionFactory
* 4.得到SqlSeesion
* 5.配置SQL文件
* 6.编写DAO接口框架
package com.jv.test; import java.io.IOException; import java.io.InputStream; 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 org.junit.Test; import com.jv.bean.Employee; import com.jv.dao.EmployeeMapper; /* * 1.下载mybatis包 * 2.在类路径下配置全局配置文件 * 3.得到SqlSeessionFactory * 4.得到SqlSeesion * 5.配置SQL文件 * 6.编写DAO接口 */ public class TestMybatis { @Test public void test2() throws IOException { // 1.得到SqlSessionFactory String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 2.得到SqlSeession SqlSession session = sqlSessionFactory.openSession(); // 3.使用SqlSession获取数据库记录 try { Employee employee = session.selectOne("com.jv.dao.EmployeeMapper.getEmployeeById", 1); System.out.println(employee); } finally { session.close(); } } @Test public void test1() throws IOException { //1.得到SqlSessionFactory String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //2.得到SqlSeession SqlSession session = sqlSessionFactory.openSession(); // 3.使用SqlSession获取数据库记录 try { /*这种方式相比老的有以下优势: * 1.代码更简洁 * 2.能够校验参数,由于方法对参数有严格限制 * 3.更易阅读 * 4.配置文件更独立 */ EmployeeMapper mapper = session.getMapper(EmployeeMapper.class); Employee employee = mapper.getEmployeeById(1); System.out.println(employee); } finally { session.close(); } } }
<?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="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/study?serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="12340101"/> </dataSource> </environment> </environments> <mappers> <mapper resource="EmployeeMapper.xml"/> </mappers> </configuration>
jdbc:mysql://localhost:3306/study?serverTimezone=UTC
MySQL新驱动程序要求时区匹配,因此在上面的URL中添加serverTimezone=UTC
<?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.jv.dao.EmployeeMapper"> <select id="getEmployeeById" resultType="com.jv.bean.Employee"> select employee_id,first_name,last_name,gendor,birthday from employee where employee_id=#{id} </select> </mapper>
package com.jv.bean; import java.sql.Date; public class Employee { private Integer employee_id; private String first_name; private String last_name; private Integer gendor; private Date birthday; public Integer getEmployee_id() { return employee_id; } public void setEmployee_id(Integer employee_id) { this.employee_id = employee_id; } public String getFirst_name() { return first_name; } public void setFirst_name(String first_name) { this.first_name = first_name; } public String getLast_name() { return last_name; } public void setLast_name(String last_name) { this.last_name = last_name; } public Integer getGendor() { return gendor; } public void setGendor(Integer gendor) { this.gendor = gendor; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override public String toString() { return "Employee [employee_id=" + employee_id + ", first_name=" + first_name + ", last_name=" + last_name + ", gendor=" + gendor + ", birthday=" + birthday + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((birthday == null) ? 0 : birthday.hashCode()); result = prime * result + ((employee_id == null) ? 0 : employee_id.hashCode()); result = prime * result + ((first_name == null) ? 0 : first_name.hashCode()); result = prime * result + ((gendor == null) ? 0 : gendor.hashCode()); result = prime * result + ((last_name == null) ? 0 : last_name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Employee other = (Employee) obj; if (birthday == null) { if (other.birthday != null) return false; } else if (!birthday.equals(other.birthday)) return false; if (employee_id == null) { if (other.employee_id != null) return false; } else if (!employee_id.equals(other.employee_id)) return false; if (first_name == null) { if (other.first_name != null) return false; } else if (!first_name.equals(other.first_name)) return false; if (gendor == null) { if (other.gendor != null) return false; } else if (!gendor.equals(other.gendor)) return false; if (last_name == null) { if (other.last_name != null) return false; } else if (!last_name.equals(other.last_name)) return false; return true; } }
package com.jv.dao; import com.jv.bean.Employee; public interface EmployeeMapper { public Employee getEmployeeById(Integer id); }