Mybatis框架
什么是框架
- 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。
- 简而言之,框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统,或者说是使用别人搭好的舞台,你来做表演。框架一般是成熟的,不断升级的软件。
框架解决的问题
- 把技术封装起来
- 在开发阶段不应该考虑技术,更专注入逻辑开发
- 框架是位于底层技术,和应用程序之间的代码
三层架构中常用框架
-
WEB:表现层:处理用户请求和响应
servlet – struts(放弃) – struts2(放弃) --springMVC(流行) -
service:业务层
自己写业务 – ejb – spring(整合框架,业务)不可取代 -
dao:持久层
jdbc – dbutils – BeanUtils – jdbcTemplate – hibernate(放弃) – mybatis(主流) – spring data jpa(趋势)
主流:整合: springmvc + spring + mybatis = ssm
趋势:整合:springmvc + spring +spring data = spring全家桶
原生JDBC概述
- JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API。
- JDBC是Java访问数据 库的标准规范,可以为不同的关系型数据库提供统一访问,它由一组用Java语言编写的接口和类组成。
- JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提 供商为设备提供驱动软件,通过软件可以与该设备进行通信。
核心规范
- DriverManager:用于注册驱动
- Connection:表示与数据库创建的连接
- Statement:表示数据库sql语句的对象
- ResultSet:结果集或一张虚拟表
JDBC原理
- Java提供访问数据库规范称为JDBC,而生产厂商提供规范的实现类称为驱动.
- JDBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库!每个数据库厂商都需 要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。
原生JDBC:使用java程序执行sql语句,对数据库表进行增删改查(CRUD)
使用步骤固定
- 注册驱动,告之JVM我们使用的是哪种数据库驱动程序(mysql,oracle)
- 获取数据库连接对象Connection
java程序:TCP客户端 数据库:TCP服务器
使用客户端访问服务器,和服务器经过3次握手连接一个连接通路
这个连接通路中有一个IO流对象,用于客户端和服务器交互数据 - 获取执行者对象Statement,用于执行sql语句:把sql语句发送到数据库执行
- 执行sql语句,获取结果集
增删改: int affected(受影响的) 影响数据库的有效行数
查询: ResultSet结果集 把查询的多行结果存储到一个结果集中 - 处理结果集
增删改:不用处理,打印
查询:遍历结果集 - 释放资源
public class DemoJDBC {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
/
1.注册驱动
使用java.sql.DriverManager类中的方法实现
管理一组 JDBC 驱动程序的基本服务。
static void registerDriver(Driver driver) 向 DriverManager 注册给定驱动程序。
参数:
java.sql.Driver driver:是一个接口,每个驱动程序类必须实现的接口。
传递Driver接口的实现类对象,由mysql驱动提供
com.mysql.jdbc.Driver
*/
//DriverManager.registerDriver(new Driver());
/*
查询com.mysql.jdbc.Driver类的源码发现,有一个静态代码块,已经注册了驱动
static {
DriverManager.registerDriver(new Driver());
}
我们在注册一次驱动,就注册了两次,浪费
解决方案:使用反射技术,获取class文件对象,会执行类中的静态代码块
Class.forName("foo.bah.Driver")
*/
Class.forName("com.mysql.jdbc.Driver");
/*
2.获取数据库连接对象Connection
使用java.sql.DriverManager类中的方法实现
static Connection getConnection(String url, String user, String password) 试图建立到给定数据库 URL 的连接。
参数:
String url:数据库服务器的地址,固定格式
jdbc:mysql://ip:端口号/数据库名称
jdbc:mysql://localhost:3306/ayyy:mysql://127.0.0.1:3306
String user:数据库的用户名 root
String password:数据库的密码 root
返回值:
java.sql.Connection是一个接口
返回的是Connection接口的实现类对象,由mysql驱动提供
我们可以使用Connection接口来接收这个实现类对象(多态)
*/
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ayyy", "root", "root");
//System.out.println(conn);//com.mysql.jdbc.JDBC4Connection@3891771e
/*
3.获取执行者对象Statement
使用Connection接口中提供的方法实现
Statement createStatement() 创建一个 Statement 对象来将 SQL 语句发送到数据库。
返回值:
java.sql.Statement是一个接口
返回的是Statement接口的实现类对象,由mysql驱动提供
我们可以使用Statement接口来接收这个实现类对象(多态)
*/
Statement stat = conn.createStatement();
//System.out.println(stat);//com.mysql.jdbc.StatementImpl@78ac1102
/*
4.执行sql语句,获取结果集
使用Statement接口中的方法实现
int executeUpdate(String sql) 执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句
ResultSet executeQuery(String sql) 执行给定的 SQL 语句,该语句可能为SELECT
*/
int row = stat.executeUpdate("INSERT INTO products (pid, pname,price,flag,category_cid) " +
"VALUES('p011','鼠标',80,'1','c001');");
//5.处理结果集
System.out.println(row);
//6.释放资源
stat.close();
conn.close();
}
}
Mybatis框架介绍
- Mybatis是一个优秀的基于Java的持久层框架,内部封装了Jdbc,使开发者只需要关注sql语句本身,而不需要花费经历去处理加载驱动,创建连接,创建statement等繁琐的过程;
- Mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过Java对象和statement中sql动态参数进行映射生成最终执行的sql语句,最后由Mybatis框架执行sql并将结果映射为Java对象并返回;
- 采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbcAPI底层访问细节,使我们不用和jdbc API打交道,就可以完成对数据库的持久化操作;
- ORM:操作对象即是操作数据库
Mybatis框架配置
POM文件
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
</dependency>
<dependency>
<groupId>com.github.miemiedev</groupId>
<artifactId>mybatis-paginator</artifactId>
<version>${mybatis.paginator.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>org.csource.fastdfs</groupId>
<artifactId>fastdfs</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
配置数据库属性文件,*.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ayyy?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
配置数据库类型,引入插件,SqlMapConfig.xml
<?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>
<plugins>
<!-- com.github.pagehelper 为 PageHelper 类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL 六种数据库-->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
</configuration>
配置数据源,包扫描,applicationContext-dao.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<context:property-placeholder location="classpath*:properties/*.properties" />
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="driverClassName" value="${jdbc.driver}" />
<property name="maxActive" value="10" />
<property name="minIdle" value="5" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ayy.core.dao" />
</bean>
</beans>
实体类和映射文件使用Mybatis逆向生成