目录
一、概述
二、安装
三、mybatis的使用
1.创建maven工程,pom.xml导入坐标。
2. 创建实体类和Dao的接口。
3.创建Mybatis的配置文件 SqlMapConifg.xml(位置:src ==>main==>resources)
4.创建映射文件 UserDao.xml(包含了 SQL 代码和映射定义信息)
(映射器mapper中resource=映射文件的路径)
四、构建SqlSessionFactory
1.从 Mybatis的配置文件XML 中构建 SqlSessionFactory
2.不使用 XML 构建 SqlSessionFactory
3.从 SqlSessionFactory 中获取 SqlSession
MyBatis 是持久层框架。
MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索,开发者只需关注SQL语句本身。
MyBatis 使用ORM(Object Relational Mapping 对象关系映射,数据库表和实体类对应起来,可以操作实体类就实现操作数据库表)。
https://mybatis.org/mybatis-3/zh/index.html
要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。
如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:
org.mybatis mybatis x.x.x
org.mybatis
mybatis
x.x.x
package com.mybatis.domain;
public class User {
private Integer id;
private String username;
private String password;
private String email;
package com.mybatis.dao;
import com.mybatis.domain.User;
import java.util.List;
/**
* @Description: 用户持久层接口
*/
public interface UserDao {
//查询所有操作
List findAll();
}
==============================================
package com.mybatis.dao;
import com.mybatis.domain.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @Description: 用户持久层接口
*/
public interface UserDao {
//使用注解,不需要映射文件,在主配置文件的中用class属性指定被注解的dao接口的全限定类名
//查询所有操作
@Select("select * from user")
List findAll();
}
configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
(src==>main==>resources==>com==>mybatis==>dao==>UserDao.xml,
mybatis的映射配置文件位置必须和dao接口的包结构相同)
在一个 XML 映射文件中,可以定义无数个映射语句。也可以不用映射文件,使用注解配置。
使用注解:把映射文件移除,在dao接口的方法上使用@Select注解,并指定SQL语句。同时在配置文件中的mapper配置时,使用class属性指定dao接口的全限定类名。
SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出):
- cache – 该命名空间的缓存配置。
- cache-ref – 引用其它命名空间的缓存配置。
- resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。
parameterMap– 老式风格的参数映射。此元素已被废弃,并可能在将来被移除!请使用行内参数映射。文档中不会介绍此元素。- sql – 可被其它语句引用的可重用语句块。
- insert – 映射插入语句。
- update – 映射更新语句。
- delete – 映射删除语句。
- select – 映射查询语句。
注意事项:
1.创建UserDao.xml和UserDao.java时名称是为了和之前学的知识保存一致。在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper。所以UserDao和UserMapper是一样的。
2.目录directory里创建com.mybatis.first是一级目录。
包package里创建com.mybatis.first是三级目录。
3.mybatis的映射配置文件位置必须和dao接口的包结构相同。
4.映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名。
5.映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名。
当遵从了3,4,5点之后,我们在开发中就无须再写dao的实现类
项目的结构:
MybatisTest
package com.mybatis;
import com.mybatis.dao.UserDao;
import com.mybatis.domain.User;
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.apache.log4j.lf5.util.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import static org.apache.ibatis.io.Resources.getResourceAsStream;
/*Mybatis入门案例*/
public class MybatisTest {
public static void main(String[] args) throws IOException {
//1.读取配置文件
InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession session =factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
UserDao userDao=session.getMapper(UserDao.class);
//5.使用代理对象执行Dao的某方法
List users=userDao.findAll();
for (User user:users){
System.out.println(user);
}
//6.释放资源
session.close();
in.close();
}
}
//1.读取配置文件 //2.创建SqlSessionFactory工厂 //3.使用工厂生产SqlSession对象 //4.使用SqlSession创建Dao接口的代理对象 //5.使用代理对象执行Dao的方法 //6.释放资源
使用接口的实现类,mybatis它是支持写dao实现类的
public class UserDaoImpl implements IUserDao {
//首先从外部传入SqlSessionFactory
private SqlSessionFactory factory;
public UserDaoImpl(SqlSessionFactory factory) {
this.factory = factory;
}
public List findAll() {
//1.使用工厂创建SqlSession对象
SqlSession session = factory.openSession();
//2.使用session执行查询所有方法
List users = session.selectList("com.zzq.dao.IUserDao.findAll");
session.close();
return users;
}
}
=========================================================================
public class MyBatisTest {
public static void main(String[] args) throws IOException {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂创建dao对象
IUserDao userDao = new UserDaoImpl(factory);
//4.执行方法
List users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
//5.释放资源
in.close();
}
}
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的,SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。
而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。
从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。 但也可以使用任意的输入流(InputStream)实例,比如用文件路径字符串或 file:// URL 构造的输入流。
MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。
//1.读取配置文件 InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml"); //2.创建SqlSessionFactory工厂 SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); SqlSessionFactory factory=builder.build(in);
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
第一种方法:全限定名调用
SqlSession session = factory.openSession();
UserDao userDao = session.selectOne(“com.mybatis.dao.UserDao.findAll”);
第二种方法:
//3.使用工厂生产SqlSession对象
SqlSession session =factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
UserDao userDao=session.getMapper(UserDao.class);
//5.使用代理对象执行方法
Listusers=userDao.findAll();
for (User user:users){
System.out.println(user);
}