myBatis
ORM:Object(javaBean) Relation(和数据库记录的关系) Mapping(javaBean和数据库记录的映射)
对象关系映射,Hibernate把ORM用的淋漓尽致。
Hibernate:
@Table("person")
Person{
String lastName;
int age;
}
save(new Person());
get(1);
update();
缺点:ORM(反模式);
1、sql框架自动生成的;无法优化;
2、全映射框架; select lastName from person where id=1;
select * from person where id=1 ;
3、HQL:
能写原生sql;
获取连接---->创建PreparedStatement---->预编译sql---->执行sql--->封装结果4
Hibernate;
JavaBean---------------------------------------------------------------->数据表
MyBatis;
只需要编写sql;queryRunner queryForObject( new BeanPropertyMapper<>())
获取连接---->创建PreparedStatement---->预编译sql---->执行sql--->封装结果;
给配置文件里面写好sql即可;
MyBatis:
轻量级;导包少;MyBatis.jar;
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
安装
要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。
如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version> </dependency>
从 XML 中构建 SqlSessionFactory
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
0、搭建数据库的基础环境;创建一些表;
建表;HelloWorld使用tbl_student表测试;
1、导包
MyBatis框架在关键位置特别是发sql语句的时候都有日志记录;导入日志包才能看;
Log4j:能用依赖自己的一个配置文件。文件名就叫log4j.xml;必须放在类路径下;
2、写配置
1)、mybatis的全局配置文件;指导mybatis框架正确运行的文件;比如数据库连接池(mybatis内置连接池)配置
2)、StudentDao接口的实现描述文件(sql映射文件)(StudentDao.xml);配置这dao的哪个方法执行哪个sql语句;相当于是dao的实现
3)、一定要在全局配置文件中注册接口的实现文件(eg:StudentDao.xml)
3、测试
@Test public void test() throws IOException { //1、根据全局配置文件获取一个SqlSessionFactory对象; String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //2、SqlSessionFactory;用它来创建sqlSession; //开启一次和数据库的会话;默认这个会话是非自动提交的; SqlSession openSession = sqlSessionFactory.openSession(true); //3、SqlSession;sql会话;相当于是connection;和数据库建立一次会话(连接) StudentDao studentDao = openSession.getMapper(StudentDao.class); Student student = new Student(null, "张三admin", 19, 98.98, new Date()); studentDao.saveStudent(student); //4、保存成功! // openSession.commit(); }
总结实现过程:
0、创建库创建表;运行mybatis_test.sql文件
把javaBean和操作数据的Dao接口创建出来;
1、导包;导入mybatis.jar,数据库驱动,日志包(log4j);
2、写配置:
1)、复制粘贴log4j.xml到类路径下即可;
2)、MyBatis的全局配置文件;(注意配置数据源信息)
3)、Dao接口的实现文件(sql映射文件);复制粘贴官方文档;
4)、一定要把dao接口的实现文件注册到全局配置文件中;
3、测试:
复制粘贴:
1)、根据全局配置文件创建一个SqlSessionFactory
2)、调用SqlSessionFactory.openSession()创建一个sqlSession对象。开启和数据库的一次会话
3)、通过sqlSession.getMapper(接口类)获取这个接口的映射器;
4)、调用接口的方法测试;
5)、注意:默认sqlSession是不自动提交,测试增删改需要注意;
6)、一定关闭SqlSession
dtd是约束xml文档中都能写什么标签;
如果这个文件能找到写xml就有提示;
eclipse写mybatis配置文件有提示;
引入mybatis的dtd约束;
1、复制dtd约束的url地址
2、按照以下步骤
注意:
1)、配置文件的作用;
全局配置文件:mybatis-config.xml;作用:指导mybatis如何正确运行;
SQL映射文件:将接口的方法和文件里面sql进行绑定;对接口的实现;
2)、两个类;
SqlSessionFactory:SqlSession工厂;需要根据全局配置文件得到工厂;
SqlSession:从SqlSession工厂中获取SqlSession对象;
一个SqlSession代表和数据库的一次会话;线程不安全,我们需要及时释放资源;
3)、一个原理;
我们通过SqlSession对象获取到Dao接口的实现类对象;
对象是org.apache.ibatis.binding.MapperProxy@1794d431===》
class com.sun.proxy.$Proxy2
MyBatis会为每个绑定了配置文件的接口,创建一个代理对象;接口执行方法执行的是代理对象的方法;
4)、一个不常用的场景;
我们可以没有dao接口,直接调用sqlSession的原生API;
最低配置;
原生mybatis模式;不推荐;
//使用sql语句的唯一标示调用
openSession.insert("com.atguigu.dao.StudentDao.saveStudent", student);
接口式编程(推荐);接口->解耦;BookDao bookDao;
BookService{
@Autowired
BookDao bookDao;
}
因为追求卓越,成功在不经意间追上了你