目录
1、Mybatis简介
2、Maven依赖
3、MyBatis配置文件详解
3.1、Mybatis配置文件骨架
3.2、properties标签
3.3、事务的管理和连接池的配置
3.3.1、environments标签
3.3.2、environment标签
3.3.3、transactionManager标签
3.3.4、dataSource标签
3.3.5、property标签
3.4、mappers映射器
3.4.1、映射方式一(需修改)
3.4.2、映射方式二
3.4.3、映射方式三(需修改)
4、Mapper文件
4.1、mapper文件骨架
4.2、增删改查配置
5、实战
5.1、Mybatis文件配置(核心)
5.2、goods表结构
5.3、mapper配置(Dao层实现)
5.4、SqlSession工具类
5.5、业务层实现
5.6、测试
5.6.1、测试类
5.6.2、初始表
5.6.3、输出结果
1、Mybatis简介
- MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
- MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
- MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
- 通过MyBatis框架来实现Dao层接口
2、Maven依赖
- 整个Demo使用Maven搭建。
- MyBatis的Maven依赖:
org.mybatis
mybatis
3.5.7
3、MyBatis配置文件详解
3.1、Mybatis配置文件骨架
- 所有配置信息都放置在configuration标签内
3.2、properties标签
- properties 标签中的配置可以提供整个配置文件使用,在任何位置都可以引入其中配置的值
- properties 标签可以通过子标签 property 标签来配置一些子元素信息,也可以配置外部的动态文件
导入配置文件
3.3、事务的管理和连接池的配置
3.3.1、environments标签
- environment的复数,中文意思:环境。
- MyBatis可以配置多种环境 ,default指定默认使用某种环境,可以达到快速切换环境。
- environment的复数,中文意思:环境。
- MyBatis可以配置多种环境 ,default指定默认使用某种环境,可以达到快速切换环境。
3.3.2、environment标签
- environments的子标签
- 配置一个具体的环境信息
- id代表当前环境的唯一标识
3.3.3、transactionManager标签
- environment子标签
- 中文意思:事务管理器
- type属性:事务管理器的类型,可选两者其一:JDBC(JdbcTransactionFactory:Jdbc事务工厂 ) | MANAGED(ManagedTransactionFactory)
- 使用JDBC事务管理机制,就是利用java.sql.Connection对象完成对事务的提交。
- 使用MANAGED事务管理机制,这种机制Mybatis自身不会去实现事务管理,而是让程序的WEB容器(JBOSS,WebLogic,Tomcat)来实现对事务的管理
- 自定以事务管理器:实现TransactionFactory接口。(那么type属性就是全类名)
3.3.4、dataSource标签
- type:数据源类型有UNPOOLED(UnpooledDataSourceFactory)、POOLED(PooledDataSourceFactory)、JNDI(JndiDataSourceFactory)。
- 自定义数据源:实现DataSourceFactory接口,type是全类名。
3.3.5、property标签
- name和value就是键值对,在properties配置文件中取得
3.4、mappers映射器
- 只有配置了 mappers 信息后,MyBatis 才知道去哪里加载 Mapper 映射文件。
- 在日常开发中,可以根据项目中 Mapper 的配置偏好,选择整合配置文件的配置方式。
3.4.1、映射方式一
mapper标签,通过resource属性引入classpath路径的相对资源
3.4.2、映射方式二
package标签,通过name属性指定mapper接口所在的包名 ,此时对应的映射文件必须与接口位于同一路径下,并且名称相同
- 如mapper接口采用注解的方式,则无需映射文件
- windows系统下,映射文件不区分大小写,linux系统没有验证
3.4.3、映射方式三
mapper标签,通过class属性指定mapper接口名称,此时对应的映射文件必须与接口位于同一路径下,并且名称相同
- 如mapper接口采用注解的方式,则无需映射文件
- windows系统下,映射文件不区分大小写,linux系统没有验证
4、Mapper文件
4.1、mapper文件骨架
- 所有增删改查都写在mapper标签内
4.2、增删改查配置
select * from goods
delete from goods where id = #{id}
insert into goods (goods_name,goods_type,goods_price,goods_num)
values (#{goods.goodsName},#{goods.goodsType},#{goods.goodsPrice},#{goods.goodsNum})
update goods
set goods_price = #{value}
where id = #{id}
5、实战
select * from goods delete from goods where id = #{id} insert into goods (goods_name,goods_type,goods_price,goods_num) values (#{goods.goodsName},#{goods.goodsType},#{goods.goodsPrice},#{goods.goodsNum}) update goods set goods_price = #{value} where id = #{id}
5、实战
实战过程中遇到的一些问题
项目结构
maven的pom.xml配置
4.0.0 org.example MybatisDemo1.0-SNAPSHOT junit junit4.13 mysql mysql-connector-java8.0.22 org.mybatis mybatis3.5.7 src/main/java **/*.xml true
5.1、Mybatis文件配置(核心)
mybatisConfig.xml
db.properties配置文件
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/goods_manage?useSSL=false&&serverTimezone=UTC&&allowPublicKeyRetrieval=true&&characterEncoding=utf8 username=root password=1234
5.2、goods表结构
5.3、mapper配置(Dao层实现)
定义GoodsMapper接口
package com.han.Dao;
import com.han.pojo.Goods;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface GoodsMapper {
void insertGoods(@Param("goods")Goods goods);
void deleteGoods(@Param("id") Integer id);
void updateGoods(@Param("id") Integer id, @Param("value")T value);
List selectGoods();
}
配置GoodsMapper.xml文件
5.4、SqlSession工具类
package com.han.Utils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.InputStream;
public class SqlSessionUtil {
private static SqlSessionFactory sqlSessionFactory = null;
private static final InputStream in;
static{//工厂初始化
in = SqlSessionUtil.class.getResourceAsStream("../../../mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
}
public static SqlSession createSqlSession(){
SqlSession session = null;
//通过工厂得到SQLSession
session = sqlSessionFactory.openSession();
return session;
}
public static void release(SqlSession session){
if(session!=null) session.close();
}
@Test//测试是否能拿到session
public void test1(){
System.out.println(SqlSessionUtil.createSqlSession());
}
}
5.5、业务层实现
定义GoodsService类
package com.han.service;
import com.han.Dao.GoodsMapper;
import com.han.Utils.SqlSessionUtil;
import com.han.pojo.Goods;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class GoodsService {
public void insert(Goods goods){
System.out.println("【log】使用了insert方法");
SqlSession session = SqlSessionUtil.createSqlSession();
GoodsMapper goodsMapper = session.getMapper(GoodsMapper.class);
goodsMapper.insertGoods(goods);
session.commit();
SqlSessionUtil.release(session);
}
public void delete(Integer id){
System.out.println("【log】使用了delete方法");
SqlSession session = SqlSessionUtil.createSqlSession();
GoodsMapper mapper = session.getMapper(GoodsMapper.class);
mapper.deleteGoods(id);
session.commit();
SqlSessionUtil.release(session);
}
public List select(){
SqlSession session = SqlSessionUtil.createSqlSession();
GoodsMapper goodsMapper = session.getMapper(GoodsMapper.class);
List list = goodsMapper.selectGoods();
SqlSessionUtil.release(session);
return list;
}
public void update(Integer id, T value){
System.out.println("【log】使用了update方法");
SqlSession session = SqlSessionUtil.createSqlSession();
GoodsMapper mapper = session.getMapper(GoodsMapper.class);
mapper.updateGoods(id,value);
session.commit();
SqlSessionUtil.release(session);
}
}
5.6、测试
5.6.1、测试类
import com.han.pojo.Goods;
import com.han.service.GoodsService;
import org.junit.Test;
import java.util.List;
public class MyTest {
@Test//需要junit依赖
public void test1(){
GoodsService goodsService = new GoodsService();
List list = goodsService.select();
printList(list);
goodsService.insert(new Goods("榴莲","水果",80,100));
printList(goodsService.select());
goodsService.update(5,999);
printList(goodsService.select());
goodsService.delete(1);
printList(goodsService.select());
}
public void printList(List list){
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("**************************************************************************");
list.clear();
}
}
5.6.2、初始表
import com.han.pojo.Goods;
import com.han.service.GoodsService;
import org.junit.Test;
import java.util.List;
public class MyTest {
@Test//需要junit依赖
public void test1(){
GoodsService goodsService = new GoodsService();
List list = goodsService.select();
printList(list);
goodsService.insert(new Goods("榴莲","水果",80,100));
printList(goodsService.select());
goodsService.update(5,999);
printList(goodsService.select());
goodsService.delete(1);
printList(goodsService.select());
}
public void printList(List list){
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("**************************************************************************");
list.clear();
}
}



