案例步骤:
项目目录结构:
数据表:
JavaBean:
package com.csu.marden;
public class Employee {
private int id;
private String lastName;
private String email;
private String gender;
public int getId() {
return id;
}
public void setId(int 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 String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + "]";
}
}
步骤1:创建全局配置文件(mybatis-config.xml)
步骤2:创建sql映射文件(EmployeeMapper.xml)
步骤3:将sql映射文件注册到全局配置文件中,详见步骤1
步骤4-6:
package com.csu.marden;
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;
public class Test {
public static void main(String[] args) throws IOException {
//1.根据xml配置文件(全局配置文件,即mybatis-config.xml)创建一个SqlSessionFactory对象
String resources="mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resources);
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//2.根据SqlSessionFactory创建SqlSession,每个SqlSession代表和数据库的一次会话
SqlSession openSession=sqlSessionFactory.openSession();
try{
//第一个参数:SQL的唯一标志(namespace+id)
//第二个参数:执行SQL要用的参数
Employee emp=openSession.selectOne("com.csu.marden.EmployeeMapper.selectEmp", 1);
System.out.println(emp);
}finally{
openSession.close();
}
}
}
解决方案:
默认情况下,只有src是build path的source folder目录。此处自定义的conf文件夹只是一个普通的文件夹,需要将该文件夹Use as Source Folder
右键点击conf文件夹--->选择build path--->选择Use as Source Folder
本质:将接口与sql映射文件进行动态绑定,通过在接口中定义的方法规范业务(规范sql语句的参数和返回值)
(1)通过xml配置文件实现mybatis:通过全局配置文件和sql映射文件,创建SqlSession对象,并执行增删改查业务。
(2)通过接口式编程实现mybatis:mybatis为sql映射文件找了一个接口作为自己的代理,并告诉其他Java对象,以后访问数据库的增删改查业务不要找sql映射文件,而去找对应的代理即可。接口中通过定义的方法描述了sql语句的参数和返回值。
(1)定义接口,并在接口中定义方法(规范sql语句的参数和返回值),对应sql映射文件中的增删改查语句
(2)sql映射文件中,namespace属性指定为接口的全类名,id属性指定为接口中定义的方法名
- 通过xml配置文件实现mybatis,直接调用sql映射文件。每次使用sql映射文件时,都需要写sql映射文件的namespace,id,参数,返回值,容易出错,而且书写麻烦。
- 使用接口式编程实现mybatis,将接口与sql映射文件动态绑定,通过接口代理sql映射文件,不管是谁使用sql映射文件,都可以调用接口的实现类完成(mybatis为接口自动创建一个实现的代理对象)
- 使用接口式编程调用接口时,使用sqlSession.getMapper()获取接口的实现类,即代理对象。其本质是通过通过Proxy.NewProxyInstance()加载代理实例,即mybatis通过反射机制自动创建接口的实现类对象
案例步骤:
步骤1:创建全局配置文件(mybatis-config.xml)
步骤2:创建sql映射文件(EmployeeMapper.xml)
步骤3:将sql映射文件注册到全局配置文件中,详见步骤1
步骤4:编写sql映射文件对应的接口
package com.csu.marden;
public interface EmployeeMapper {
//根据id查询数据,并封装成Employee对象----对应sql映射文件中的查询操作
public Employee getEmpById(Integer id);
}
步骤5-8:
package com.csu.marden;
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;
public class Test {
public static void main(String[] args) throws IOException {
//1.根据xml配置文件(全局配置文件,即mybatis-config.xml)创建一个SqlSessionFactory对象
String resources="mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resources);
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//2.根据SqlSessionFactory创建SqlSession,每个SqlSession代表和数据库的一次会话
SqlSession openSession=sqlSessionFactory.openSession();
try{
//3.获取接口的实现类对象(mybatis会为接口自动创建一个代理对象,代理对象会执行增删改查)
EmployeeMapper mapper=openSession.getMapper(EmployeeMapper.class);
//4.通过接口的实现类对象调用接口的查询方法
Employee employee=mapper.getEmpById(1);
System.out.println(employee);
}finally{
openSession.close();
}
}
}
原生数据库操作:创建Dao接口,编写DaoImpl实现类完成业务逻辑
mybatis:创建***Mapper接口,编写***Mapper.xml映射文件(该映射文件相当于接口的实现类,mybatis根据映射文件自动生成实现类)
每次执行增删改查业务,不管调用SqlSession的原生API,还是通过获取接口的实现类完成增删改查,都是通过SqlSession操作数据库。
每次使用都应该去获取新的对象,不应该放在共享的成员变量中。
EmployeeMapper empMapper = sqlSession.getMapper(EmployeeMapper.class);
mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等系统运行环境信息
sql映射文件:相当于原生数据库操作中,定义Dao接口的实现类如何工作。保存了每一条sql语句的映射信息,mybatis正是通过该映射文件将sql抽取出来。