MyBatis基础
时间:2024-05-24 星期五
学习内容
MyBatis入门使用
-
MyBatis框架介绍,介绍框架与MyBatis的概念
-
MyBatis开发流程,详细讲解MyBatis六步开发流程
-
MyBatis使用细则,讲解MyBatis开发中的各种细节
-
MyBatis工作流程,讲解MyBatis的内容执行过程
MyBatis高级特性
-
MyBatis日志管理,MyBatis日志管理配置
-
动态SQL处理,多条件下SQL的动态执行过程
-
MyBatis缓存机制,介绍MyBatis一二级缓存作用与配置
-
多表级联查询,配置MyBatis多表级联查询
-
PageHelper插件,MyBatis分页插件的使用办法
MyBatis入门
软件开发中框架
-
框架是可被应用开发者定制的应用骨架
-
框架是一种规则,保证开发者遵循相同的方式开发程序
-
框架提倡“不要重复造轮子”,对基础功能进行封装
框架的优点:
-
极大提高了开发效率
-
统一的编码规则,利于团队管理
-
灵活配置的应用,拥有更好的维护性
MyBatis框架
MyBatis是优秀的持久层框架;MyBatis使用XML将SQL与程序解耦,便于维护;MyBatis学习简单,执行高效,是JDBC的延伸
开发流程
-
引入MyBatis依赖
-
创建核心配置文件
-
创建实体(Entity)类
-
创建Mapper映射文件
-
初始化SessionFactory
-
利用SqlSession对象操作数据
MyBatis环境配置
配置文件
mybatis-config.xml文件:
-
MyBatis采用XML格式配置数据库环境信息
-
MyBatis环境配置标签<environment>
-
environment包含数据库驱动、URL、用户名与密码
-
<?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="dev">
<!-- 配置环境,不同的环境不同的id名字-->
<environment id="dev">
<!-- 采用JDBC方式对数据库事务进行commit/rollback/-->
<transactionManager type="JDBC"></transactionManager>
<!-- 采用连接池方式管理数据库连接-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/babytun?useUnicode=true&characterCoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
<environment id="prd">
<!-- 采用JDBC方式对数据库事务进行commit/rollback/-->
<transactionManager type="JDBC"></transactionManager>
<!-- 采用连接池方式管理数据库连接-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.2:3306/babytun?useUnicode=true&characterCoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
</configuration>
SessionFactory和SqlSession
-
SqlSessionFactory
-
SqlSessionFactory是MyBatis的核心对象;用于初始化MyBatis,创建SqlSession对象;保证SqlSessionFactory在应用中全局唯一
-
-
SqlSession
-
SqlSession是MyBatis操作数据库的核心对象;使用JDBC方式与数据库交互;该对象提供了数据表CRUD对应方法
-
-
封装Mybatis工具类
package com.imooc.mybatis.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.runners.model.InitializationError;
import java.io.IOException;
import java.io.Reader;
/**
* MyBatisUtils工具类,创建全局唯一的SqlSessionFactory对象
*/
public class MybatisUtils {
//利用static(静态)属于类不属于对象,且全局唯一
private static SqlSessionFactory sqlSessionFactory = null;//类属性
//利用静态块在初始化类时实例化SqlSessionFactory
static {
Reader reader = null;
try {
reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
//初始化错误是,抛出初始异常通知调用者
throw new ExceptionInInitializerError(e);
}
}
//开启会话,连接数据库
public static SqlSession openSession(){
return sqlSessionFactory.openSession();
}
//关闭会话,断开数据库
public static void closeSession(SqlSession session){
if (session != null){
session.close();
}
}
}
MyBatis数据查询
实现步骤
-
创建实体类(Entity),该类属性对应数据库表中的字段名
-
package com.imooc.mybatis.entity;
//商品实体类
public class Goods {
private Integer goodsId;//商品编号
private String title;//标题
private String subTitle;//子标题
private Float originalCost;//原价
private Float currentPrice;//当前价格
private Float discount;//折扣率
private Integer isFreeDelivery;//是否包邮,1-包邮 0-不包邮
private Integer categoryId;//分类编号
public Integer getGoodsId() {
return goodsId;
}
public void setGoodsId(Integer goodsId) {
this.goodsId = goodsId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSubTitle() {
return subTitle;
}
public void setSubTitle(String subTitle) {
this.subTitle = subTitle;
}
public Float getOriginalCost() {
return originalCost;
}
public void setOriginalCost(Float originalCost) {
this.originalCost = originalCost;
}
public Float getCurrentPrice() {
return currentPrice;
}
public void setCurrentPrice(Float currentPrice) {
this.currentPrice = currentPrice;
}
public Float getDiscount() {
return discount;
}
public void setDiscount(Float discount) {
this.discount = discount;
}
public Integer getIsFreeDelivery() {
return isFreeDelivery;
}
public void setIsFreeDelivery(Integer isFreeDelivery) {
this.isFreeDelivery = isFreeDelivery;
}
public Integer getCategoryId() {
return categoryId;
}
public void setCategoryId(Integer categoryId) {
-
