- My Batis简介
1.1 M yBatis的特点
1 .2 MyBatis简介
MyB atis 是一个半自动化的持久化层的ORM 框架。
所谓的持久化层就是dao 。
ORM:(Object Relation Mapping) 对象关系映射
将Java 中的对象Bean 与数据库中的表建立映射关系。表中建立关系是通过外键->主键
优势:只需要配置好配置文件,那么久可以通过操作Java 中的对象就能影响数据库表中的数据。
半自动化:
全自动化Hibernate :无需手写SQL ,自动生成sql 语句,自动生成的SQL ,性能太低。无法优化SQL 语句。当然Hibernate 也支持原生手写SQL,但是还是写的太麻烦了。
而MyB atis 是半自动化,需要手写SQL,但是SQL可以做自动的拼接。
ibatis
什么是 MyBatis ?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO (Plain Old Java Objects ,普通老式Java 对象)为数据库中的记录。
- 搭建Mybaits 框架
导入jar 包
编写配置文件
使用核心类库
2.1 通过maven 下载mybaits
2.2 建立maven 工程&编写pom 文件
2 .2.1 新建maven 的web 项目
2 .2.2 mybaits 需要的 pom文件内容
xmlns:xsi= “http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation= “http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
mybaits 的核心jar 包–>
mybaits 的核心jar 包–>
1.8
mybaits 的核心就这一个jar 包,所以是轻量级的。
2.3 准备工作
2 .3.1 建立数据库m ybaitsdb01,建表,插入数据
create table sys _emp(
emp_id bigint auto_increment,
emp_name varchar(20),
emp_pwd varchar(20),
emp_gender enum(‘m’,’f’),
emp _salary double(10,5),
primary key(emp_id)
);
INSERT INTO sys_emp
VALUES (null, ‘范冰冰’, ‘fbb’, ‘f’, 100.5);
INSERT INTO sys_emp
VALUES (null, ‘李冰冰’, ‘lbb’, ‘f’, 300);
INSERT INTO sys_emp
VALUES (null, ‘张彬彬’, ‘zbb’, ‘m’, 599);
INSERT INTO sys_emp
VALUES (null, ‘万茜’, ‘wq’, ‘m’, 4000);
INSERT INTO sys_emp
VALUES (null, ‘李若彤’, ‘lrt’, ‘m’, 5000.8);
select * from sys_emp
;
2. 3.2 编写实体bean
package com.hy.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {
private Long empId;
private String empName;
private String empPwd;
private String empGender;
private Double empSalary;
//构造方法(去ID 的)
public Emp(String empName, String empPwd, String empGender, Double empSalary) {
super();
this.empName = empName;
this.empPwd = empPwd;
this.empGender = empGender;
this.empSalary = empSalary;
}
}
2. 3.2 编写mapper 接口( dao接口)
EmpMapper
package com.hy.mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import com.hy.bean.Emp;
/**
-
声明这个接口是为了方便上层代码调用Mybatis 的具体功能
-
Mapper 配置文件的namespace 属性要和接口的全类名一致,这样才能通过接口找到Mapper 配置
-
接口中的方法名要和Mapper 配置文件中SQL 语句标签的id 属性一致,这样才能通过方法名找到具体SQL 语句
-
又因为在Mapper 配置文件中id 属性的值是不能重复的,所以当前接口中方名也不能重复——当前接口中的方法不能重载
*/
public interface EmpMapper {
/**
-
通过这个方法对应Mapper 配置文件中的SQL 语句
-
@param empId 当前方法的参数对应SQL 语句中#{empId}声明的参数
-
@return 当前方法的返回值类型和resultType 属性指定的类型一致
*/
abstract public Emp selectEmpById(Long empId);
/**
-
执行插入操作
-
@param emp
-
@return 受影响的行数
*/
abstract public int insertEmp(Emp emp);
/**
-
执行删除操作
-
@param empId
-
@return 受影响的行数
*/
abstract public int deleteById(long empId);
/**
-
执行更新操作
-
@param harry
-
Mybatis 返回的受影响行数也可以不使用
*/
abstract public void updateEmp(Emp harry);
/**
-
模糊查询,根据员工姓名片段查询对应数据
-
@param 查询条件
-
@return 查询结果
*/
abstract public Emp selectEmpByName(String empName);
// 使用@Param 注解给方法形参命名,具体用法参照Mapper 配置文件
abstract public void updateSalaryById(@Param(“empId”) Long empId, @Param(“empSalary”) Double salary);
abstract public void updateByMap(Map
abstract public Integer selectCount();
abstract public Map
abstract public List
// 执行插入数据操作,自增主键会放入实体类对象的id 属性
// 方法返回值还是受影响行数
abstract public int insertWithKey(Emp emp);
abstract public List
}
这里我们换成了EmpM apper ,新名字我们就适应新的写法,去掉前面的I ,当然也可以不去掉叫IE mpM apper 。
2.4 编写配置文件
Mybaits 比较特殊有两个配置文件,一是,核心(全局)配置文件,二是,映射文件(编写sql 语句的映射文件)
2.4.1 如何编写核心(全局)配置文件[mybatis-config.xml]
位置:resources 目录下,只有一个
名称:核心配置名字推荐使用:mybaits-config.xml。
这里,我们习惯上命名为mybaits-config.xml ,这个文件名只是建议,并非强制要求的。将来和Spring 整合之后,这个配置文件可以省略。目前大家操作时,可以直接复制,粘贴。
将来mybaits 和Spring 整合了之后,mybatis-config 这个全局配置文件 ,可以保留,也可以省略,省略之后,可以放在spring 中配置文件中进行mybatis 相关文件的配置。
2 .4.2 编写核心配置文件
核心配置模板,直接从官网拷贝。
“1.0” encoding= “UTF-8” ?>
PUBLIC “-//mybatis.org//DTD Config 3.0//EN”
“http://mybatis.org/dtd/mybatis-3-config.dtd”>
将黄色的地方改写
“1.0” encoding= “UTF-8” ?>
PUBLIC “-//mybatis.org//DTD Config 3.0//EN”
“http://mybatis.org/dtd/mybatis-3-config.dtd”>
在实际的工作中,一般都有是哪个环境,开发,测试,部署,设置连接的数据库都可以不一样,简单的说就是,可以连接不同的数据库,比如:连接Oracle 的环境。
2 .4.2.1 重点总结:
事务管理器和数据源以后都是在spring 中进行配置的,spring 在它的声明式事务里面,S pring 给我们提供了事务管理器,Spring 帮我们做事务的管理,包括开启事务,提交事务或是回滚事务,包括释放数据库的连接,管理数据源,这些都是Spring 帮我们去管理。所以这一部分配置以后都要移植到Spring 的配置文件中的。
现在暂时在这里面配置好,帮助我们去学习,操作就行了。
2 .4.3 如何编写S QL语句的映射文件
映射文件位置:resources/mapper => 相当于dao
映射文件名称:XxxM apper
将来mybaits 和Spring 整合了之后,mybatis-config 这个全局配置文件 ,可以保留,也可以省略,省略之后,可以放在spring 中配置文件中进行mybatis 相关文件的配置。
但是XxxMapper 映射文件必须保留。
2.4.3.1 ORM相关概念
2 .4.4 设置相关映射文件
2 .4.4.1 在resources 目录下设置mappers 目录
2 .4.4.2 拷贝x ml文件里的内容
从官网拷贝:https://mybatis.net.cn/getting-started.html ;
PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”
“http://mybatis.org/dtd/mybatis-3-mapper.dtd”>
select * from Blog where id = #{id}
注意:以前我们叫dao ,现在叫mapper ,本质上都是持久化层的类,只是命名习惯的区别而已。
注意:EmpM apper.xml 所在的目录要和mybatis-config.xml 中使用的mapper 标签配置的一致。
2 .4.4.3 编写S QL语句
“1.0” encoding= “UTF-8” ?>
PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”
“http://mybatis.org/dtd/mybatis-3-mapper.dtd”>
“selectEmpById” resultType= “com.hy.bean.Emp”>
select emp_id empId,emp_name empName,emp_pwd empPwd,emp_gender empGender , emp_salary empSalary
from sys_emp where emp_id = #{empId}
这里是符合SQL 语句的命名标准,但是不符合JavaB ean 的命名习惯,所以要加别名。
2.4.4.4 注册Xxx M apper. xml映射文件
所谓的注册M apper :就是指定Mybaits 映射文件的具体位置。
在mybatis-config.xml 全局配置文件中,通过mapper 标签,配置一个具体的XxxM apper.xml映射文件。
resource 属性:指定Mapper 映射文件的实际存储位置,对于maven 工程的目录结构来说,对Maven 工程的目录结构来说,resources 目录下的内容会直接放入类路径。
所以,这里我们以resources 目录为基准 ,不加/的相对路径,就是相对resources 目录 。
2.5 在Junit 中编写测试类
2 .5.1 从 XML 中构建SqlSessionFactory
每个基于 MyBatis 的应用都是以一个SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过SqlSessionFactoryBuilder 获得。而SqlSessionFactoryBuilder 则可以从XML 配置文件或一个预先配置的Configuration 实例来构建出SqlSessionFactory 实例。
XML 配置文件中包含了对MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource )以及决定事务作用域和控制方式的事务管理器(TransactionManager )。
2 .5.2 具体操作
package com.hy.mybatis.test;
import java.io.IOException;
import java.io.InputStream;
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.Test;
import com.hy.bean.Emp;
import com.hy.mapper.EmpMapper;
public class TestEmpMapper {
@Test
public void testSelectEmpById() throws IOException {
//1. 使用Mybaits 的Resources 类来读取Mybatis 全局配置文件
InputStream inputStream = Resources. getResourceAsStream(“mybatis-config.xml”);
//2. 创建SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3. 调用builder 对象的build 方法创建SqlSessionFactory 类的对象(工厂设计模式)
SqlSessionFactory sessionFactory = builder.build(inputStream);
//4. 通过SqlSessionFactory 对象开启一个从Java 程序到数据库的会话
SqlSession sqlSession = sessionFactory.openSession();
//5. 通过sqlSession 对象找到Mapper 映射文件中可以执行的SQL 语句,并执行。 namespace
Object obj = sqlSession.selectOne(“com.hy.mapper.EmpMapper.selectEmpById”,1);
//6. 打印结果
System. out.println(obj);
//7. 提交事务
sqlSession.commit();
//8. 关闭sqlSession
sqlSession.close();
}
@Test
public void testSelectEmpById2() throws IOException {
//1. 使用Mybaits 的Resources 类来读取Mybatis 全局配置文件
InputStream inputStream = Resources. getResourceAsStream(“mybatis-config.xml”);
//2. 创建SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3. 调用builder 对象的build 方法创建SqlSessionFactory 类的对象(工厂设计模式)
SqlSessionFactory sessionFactory = builder.build(inputStream);
//4. 通过SqlSessionFactory 对象开启一个从Java 程序到数据库的会话
SqlSession sqlSession = sessionFactory.openSession();
//5. 通过sqlSession 对象通过反射机制,直接生成一个EmpMapper 接口的匿名类的对象
EmpMapper empMapper = sqlSession.getMapper(EmpMapper. class);
//6. 执行语句,打印结果
Emp emp = empMapper.selectEmpById(2L);
System. out.println(emp);
//7. 提交事务
sqlSession.commit();
//8. 关闭sqlSession
sqlSession.close();
}
}
1,2 ,3,4,7,8 都是暂时写的,等和Spring 整合后,代码就非常简单了。我们这里已经可以看出,不用写E mpM apper 的实现类了。只写接口即可。
Original: https://www.cnblogs.com/lijili/p/16596706.html
Author: 雾里看瓜
Title: MyBatis保姆级理解与使用专业学习eclipse版
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/620912/
转载文章受原作者版权保护。转载请注明原作者出处!