目录
1:MyBatis;和数据库进行交互;持久化层框架(SQL映射框架);
一:MyBatis介绍
1:MyBatis;和数据库进行交互;持久化层框架(SQL映射框架);
从原始的JDBC----dbutils(QueryRunner)-------JdbcTemplate----xxx;不用的
称为工具;
工具:一些功能的简单封装
框架:某个领域的整体解决方案;缓存,考虑异常处理问题,考虑部分字段映射问题。。。
不用原生JDBC:
1)、麻烦;
2)、sql语句是硬编码在程序中的;耦合(数据库层的和java编码耦合);
2:Mybatis和Hiberbate的比较
Hibernate-数据库交互的框架(ORM框架) (使用各种框架,全自动的框架)
ORM(Object Relation Mapping)对象关系映射;
创建好javaBean;
@Table("t_employee")
class Employee{
private Integer empId;
private String empName;
}
缺点:
1)、定制sql;
2)、HQL;SQL;
3)、全映射框架; 部分字段映射很难;能做;
3:Mybatis优点
1)、MyBatis将重要的步骤抽取出来可以人工定制,其他步骤自动化;
2)、重要步骤都是写在配置文件中(好维护);
3)、完全解决数据库的优化问题;
4)、MyBatis底层就是对原生JDBC的一个简单封装;
5)、既将java编码与sql抽取了出来,还不会失去自动化功能;半自动的持久化层框架;
6)、mybatis是一个轻量级的框架;
二:Mybatis的HelloWorld
1:项目准备
- 创建一个javamaven工程;
- 创建测试库,测试表,以及封装数据的javaBean,和操作数据库的dao接口
- 创建表:自己用工具创建
- 创建javaBean:Employee(封装表的数据)
- 创建一个Dao接口,用来操作数据库;
2:使用mybatis
2.1:导包
<dependencies> <!--mybatis的包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> <!--数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.20</version> </dependency> <!--日志类--> <!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies>
2.2:配置
1:mybatis的全局配置文件,指导mybatis如何正确运行,比如连接向哪个数据库
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!--配置连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=false&serverTimezone=Hongkong&characterEncoding=utf-8&autoReconnect=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--引入我们自己编写的每一个接口的实现文件-->
<mappers>
<mapper resource="mapper/EmployeeDao.xml"/>
</mappers>
</configuration>
2: 编写每一个方法都如何向数据库发送sql语句,如何执行。。。。相当于接口的实现类
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace:名称空间;写接口的全类名,相当于告诉MyBatis这个配置文件是实现哪个接口的-->
<mapper namespace="com.wkl.dao.EmployeeDao">
<!--
select:用来定义一个查询操作
id:方法名,相当于这个配置是对于某个方法的实现
resultType:指定方法运行后的返回值类型;(查询操作必须指定的)
#{属性名}:代表取出传递过来的某个参数的值
-->
<select id="getEmployee" resultType="com.wkl.bean.Employee">
select * from t_employee where id =#{id}
</select>
</mapper>
2.3:测试
1:根据mybatis配置文件创建一个SqlSessionFactory 工厂
//全局的mybatis配置文件的位置
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
2:sqlSessionFactory中获取sqlSession对象操作数据库即可
//获取和数据库的一次会话;相当于getConnection();
SqlSession session = sqlSessionFactory.openSession();
try {
//使用SqlSession操作数据库,获取到dao接口的实现
EmployeeDao mapper = session.getMapper(EmployeeDao.class);
//调用方法得出结果
Employee employee = mapper.getEmployee(1);
System.out.println(""+employee);
} finally {
//关闭连接
session.close();
}
3:结果:
三:mybatis的两个文件:
1)、全局配置文件:mybatis-config.xml;指导mybatis正确运行的一些全局设置;
2)、SQL映射文件:EmployeeDao.xml;相当于是对Dao接口的一个实现描述
3:细节:
1)、获取到的是接口的代理对象;mybatis自动创建的;
2)、SqlSessionFactory和SqlSession;
SqlSessionFactory创建SqlSession对象,Factory只new一次就行
SqlSession:相当于connection和数据库进行交互的,和数据库的一次会话,就应该创建一个新的sqlSession;