Mybatis介绍
- Mybatis是什么?
Mybatis本是apache上的一个开源框架iBatis,是一个基于java的持久层框架。
- Mybatis有什么特点?
- 最简单安装,只需要两个jar文件+配置几个sql映射文件
- sql写在xml里,便于统一管理和优化
- sql和代码的分离,提高了可维护性
- 提供映射标签,支持对象与数据库的orm字段关系映射
- 提供对象关系映射标签,支持对象关系组建维护
- 提供xml标签,支持编写动态sql
Mybatis环境搭建
- mybatis下载
- 导入jar包
- 导入jar包log4j.properties
Mybatis操作步骤
- mybatis开发流程
- 创建SqlSessionFactoryBuilder对象
- 加载SqlMapConfig.xml配置文件
- 创建SqlSessionFactory对象
- 创建SqlSession对象
- 执行SqlSession对象执行查询,获取User
- 打印结果
- 释放资源
Mybatis操作-使用注意事项
- parameterType和resultType
parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中
resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中
注意:
parameterType一般可以省略不写
resultType不能省略不写!!!
- selectOne和selectList
selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常
selectList可以查询一条或多条记录
动态代理
- 动态代理是什么?
动态,顾名思义就是不固定。动态代理是由SqlSession为我们写实现类,我们只需要创建接口以及编辑接口中的方法,无需自己写实现类实现抽象方法。并且,不同的接口,同一个SqlSession能为我们写不同的实现类。只是SqlSession帮我们写实现类的时候,用的不是实现接口,而是代理。因为一个SqlSession可以根据不同的接口,写不同的代理类,所以叫做动态代理。
- 动态代理的步骤
- 配置mybatis环境(见上方Mybatis环境搭建)
- 创建SqlSessionUtil类,获取SqlSession的类
package util;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class SqlSessionUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
InputStream inputStream = SqlSessionUtil.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
}
public static SqlSession getSession() {
return sqlSessionFactory.openSession();
}
}
package dao;
import bean.User;
import java.util.List;
public interface UserDao {
List<User> selectByName(String s);
void insertUser(User s);
void deleteById(String s);
void updateUser(User user);
}
- 创建测试类,测试开发
- 在resources底下,创建与接口位置一样的包名,建立与接口同名的xml文件(包和名字都必须相同,不让代理类实现方法的时候会找不到)
- 通过SqlSession的getMapper方法将接口的类传入进去,代理出一个实现类
SqlSession sqlSession = SqlSessionUtil.getSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
- 调用在接口中的抽象方法,配置xml实现数据库的增删查改
List<User> list = userDao.selectByName("l%");
for(User user:list){
System.out.println(user);
}
sqlSession.close();