- MyBatis是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation 迁移到了Google Code,随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis ,代码于2013年11月迁移到Github。
- iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。 iBatis 提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
- MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
- MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
- MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Ordinary Java Object,普通的Java对象)映射成数据库中的记录
- Mybatis 是一个 半自动的ORM(Object Relation Mapping)框架
下载地址
- JDBC
- ① SQL夹在Java代码块里,耦合度高导致硬编码内伤
- ② 维护不易且实际开发需求中sql有变化,频繁修改的情况多见
- Hibernate和JPA
- ① 长难复杂SQL,对于Hibernate而言处理也不容易
- ② 内部自动生产的SQL,不容易做特殊优化
- ③ 基于全映射的全自动框架,大量字段的POJO进行部分映射时比较困难。导致数据库性能下降
- MyBatis
- ① 对开发人员而言,核心sql还是需要自己优化
- ② sql和java编码分开,功能边界清晰,一个专注业务、一个专注数据
第一步导入jar包
第二步配置log4j配置文件,方便查看日志
DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
layout>
appender>
<logger name="java.sql">
<level value="debug" />
logger>
<logger name="org.apache.ibatis">
<level value="info" />
logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
root>
log4j:configuration>
第三步创建Employee类
package com.atguigu.mybatis.entities;
/**
* @author shkstart
* @create 2022-04-21 10:00
*/
public class Employee {
private Integer id;
private String lastName;
private String email;
private Double salary;
private Integer deptId;
public Employee() {
}
public Employee(Integer id, String lastName, String email, Double salary, Integer deptId) {
this.id = id;
this.lastName = lastName;
this.email = email;
this.salary = salary;
this.deptId = deptId;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
public Integer getDeptId() {
return deptId;
}
public void setDeptId(Integer deptId) {
this.deptId = deptId;
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", lastName='" + lastName + '\'' +
", email='" + email + '\'' +
", salary=" + salary +
", deptId=" + deptId +
'}';
}
}
第四步创建EmployeeMapper(Dao)接口
public interface EmployeeMapper {
// @Select(" select id,last_name lastName,email,salary," +
// "dept_id deptId from employees " +
// "where id=#{id}\n")
Employee getEmployeeById(Integer id);
}
第五步创建Mybatis的sql映射文件
- 参考MyBatis的官方文档创建EmployeeMapper.xml映射文件
- 完成两个绑定
a) 标签中的namespace属性必须指定成Mapper接口的全类名
b) Mapper映射文件中的增删改查标签的id必须指定成Mapper接口中的方法名
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mybatis.mapper.EmployeeMapper">
<select id="getEmployeeById" resultType="employee" databaseId="mysql">
select id,last_name lastName,email,salary,dept_id deptId from employees where id=#{id}
select>
第六步创建MyBatis的全局配置文件
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/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="com/atguigu/mybatis/dao/EmployeeMapper.xml"/>
mappers>
configuration>
第七步测试
public class testHelloWorld {
public SqlSessionFactory getSqlSessionFactory() throws IOException {
//设置MyBatis全局配置文件的路径
String resource = "mybatis-config.xml";
//读取MyBatis的全局配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
return sqlSessionFactory;
}
@Test
public void testHelloWorld() throws IOException {
//获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//获取SqlSession对象,就相当于Connection对象
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
//获取EmployeeMapper代理对象
EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
//调用EmployeeMapper中获取员工的方法
Employee employeeById = mapper.getEmployeeById(2);
System.out.println("employeeById = " + employeeById);
}finally {
//关闭SqlSession
sqlSession.close();
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)