MyBatis笔记:分为三篇。
1:前置内容(JDBC的缺点即为什么要使用MyBatis、搭建MyBatis的开发环境)、MyBatis单表操作(针对性讲解MyBatis的用法)、MyBatisUtil的封装
2:MyBatis一些便捷配置、MyBatis多表连接操作、ORM(1-1,1-N,N-N)
3:MyBatis的通用查询、高效修改、批量删除。 缓存机制。
JDBC完成数据持久化操作的缺点?
1. 存在大量的冗余代码。
2. 必须手工处理(ORM),将结果集封装成实体对象。
3. 查询效率低,没有对数据访问进行过优化(cache)。
一:MyBatis
概念:
//MyBatis 本是apache的一个开源项目iBatis, 2010年迁移到了google code,并且改名为MyBatis 。2013年11月托管到Github。
I.MyBatis框架是一个持久层框架,可以完成对数据库的增删改查操作。
II.对原有JDBC的操作进行了封装,解决了JDBC操作数据库时存在的共性问题。
二:搭建开发环境
首先从官方网站下载并解压myBatis
I. 引入Jar包:
1).mybatis-3.2.2.jar核心Jar包。
2).lib目录中的第三方依赖Jar包。
3).ojdbc6.jar驱动Jar包。
4).add build path(Java项目需要此操作、web项目自动完成该操作。)
II. 引入配置文件:
1). mybatis-config.xml 放置在src下,用于配置Mybatis运行的相关参数。
2). SampleMapper.xml 替代原有的实现类,名称、放置位置不限,建议效仿JDBC实现类的命名和位置
3). log4j.properties【可选】日志文件,放置在src下,用于将Mybatis的运行过程记录在日志中或打印在控制台上。
III. 引入DTD文件:
mybatis-3-config.dtd、mybatis-3-mapper.dtd。
(只添加Public ID即可)
①config.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" >
②mapper.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "../mybatis-3-mapper.dtd" >
Window->Preferences
三:
I:初始化设置:mybatis-config.xml设置
II:单表下的MyBatis的增删改查的需要注意点
①:查询单个对象或多个对象(List<User>)
关注点:封装对象(resultType)
②:根据ID删除操作
关注点:单参传值 、注解
③:插入操作
关注点:参数类型为-》对象 先查询数据库中的某值作为ID
④:更新操作
关注点:多参传值、注解
III:注册mybatis-config.xml文件
IV. 使用MyBatis的API:
V. 注意开发顺序:Table、Entity、DAO接口、Mapper.xml、注册、API。
VI. 常见错误:
VII.MyBatisUtil的封装
源代码:
package util; 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 MyBatisUtil { private static SqlSessionFactory factory=null; private static ThreadLocal<SqlSession> tl=new ThreadLocal<SqlSession>(); static{ InputStream is=null; try { is=Resources.getResourceAsStream("mybatis-config.xml"); factory= new SqlSessionFactoryBuilder().build(is); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(is!=null) is.close(); } catch (IOException e) { e.printStackTrace(); } } } public static SqlSession getSqlSession(){ SqlSession session=tl.get(); if(session==null){ session=factory.openSession(); tl.set(session); } return session; } public static void colse(){ SqlSession session=getSqlSession(); session.close();tl.remove(); } public static void commit(){ SqlSession session=getSqlSession(); session.commit(); colse(); } public static void rollback(){ SqlSession session=getSqlSession(); session.rollback(); colse(); } public static <T> T getDao(Class<T> clazz){ SqlSession session=getSqlSession(); T t=session.getMapper(clazz); return t; } }