MyBatis基础
MyBatis快速入门
MyBatis相关API
MyBatis映射配置文件
MyBatis核心配置文件
MyBatis传统方式实现Dao层
框架介绍:
框架是一款半成品软件,我们可以基于这个半成品软件继续开发。来完成我们个性化的需求!
ORM 介绍
ORM(Object relational Mapping):兑对象关系映射
指的是持久化数据和实体对象的映射模式,为了解决面向对象与关系型数据库存在的互不匹配的现象的技术
映射规则:
数据表---》类
表字段---》类属性
表数据---》对象
MyBatis介绍
原始JDBC的操作-查询
原始JDBC的操作-新增
原始JDBC的操作问题分析
1,频繁创建和销毁数据库的连接会造成系统资源浪费从而影响系统性能
2,sql语句在代码中硬编码,如果要修改sql语句,就需要修改java代码,造成代码不易维护
3,查询操作时,需要手动将结果集中的数据封装到实体对象中
4,增删改查操作需要参数时,需要手动将实体对象的数据设置到sql语句的占位符
原始JDBC的操作问题解决方案
1.使用数据库连接池初始化连接资源。
2.将sql语句抽取到配置文件中。
3.使用反射,内省等底层技术,将实体与表进行属性与字段的自动映射
MyBatis是一个优秀的基于Java的持久层框架,它内部封装了JDBC,使开发者只需要关注SQL语句本身,
而不需要花费精力去处理加载驱动,创建连接,创建执行者等复杂的操作。
MyBatis通过xml或注解的方式将要执行的各种Statement配置起来,并通过Java对象和Statement中SQL的动态参数进行映射生成最终要执行的SQL语句。
最后MyBatis框架执行完SQL并将结果返回映射为Java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对JDBC进行了封装,屏蔽了JDBC API底层访问细节,是我们不用与JDBC API打交道,就可以完成对数据库的持久化操作。
MyBatis入门程序
1.数据准备
2.导入jar包
3.在src下创建映射配置文件
4.在src下创建核心配置文件
5.编写测试类完成相关API的使用
6.运行测试查看结果
目录结构
导入三个包
src代码如下
bean中Student代码
package com.itheima.bean;
public class Student {
private Integer id;
private String name;
private Integer age;
public Student() {
}
public Student(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
dao中StudentTest01代码
package com.itheima.dao;
import com.itheima.bean.Student;
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 java.io.InputStream;
import java.util.List;
public class StudentTest01 {
/*
查询全部
*/
@Test
public void selectAll() throws Exception{
//1.加载核心配置文件
//InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
InputStream is = StudentTest01.class.getClassLoader().getResourceAsStream("MyBatisConfig.xml");
//2.获取SqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.通过SqlSession工厂对象获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.执行映射配置文件中的sql语句,并接收结果
List list = sqlSession.selectList("StudentMapper.selectAll");
//5.处理结果
for (Student stu : list) {
System.out.println(stu);
}
//6.释放资源
sqlSession.close();
is.close();
}
}
MyBatisConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
StudentMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
快速入门小结
1.框架
框架是一款半成品软件,我们可以基于框架继续开发,从而完成一些个性化的需求。
2.ORM
对象关系映射,数据和实体对象的映射
3.MyBatis
是一个优秀的基于Java的持久层框架,它内部封装了JDBC。
4.入门步骤
导jar包
编写映射配置文件。
编写核心配置文件。
使用想相应的API来完成编码。
MyBatis相关API
Resources
org.apache.ibatis.io.Resources:加载资源的工具类。
核心方法
返回值 方法名 说明
InputStream getResourceAsStream(String fileName) 通过类加载器返回指定资源的字节输入流
SqlSessionFactoryBuilder
org.apache.ibatis.session.SqlSessionFactoryBuilder:获取SqlSessionFactory工厂对象的功能类
返回值 方法名 说明
SqlSessionFactory build(InputStream is) 通过指定资源字节输入流获取SqlSession工厂对象
SqlSessionFactory
org.apache.ibatis.session.SqlSessionFactory:获取SqlSession构建者对象的工厂接口。
核心方法
返回值 方法名 说明
SqlSession openSession() 获取SqlSession构建者对象,并开启手动提交事务
SqlSession openSession(boolean autoCommit) 获取SqlSession构建者对象,如果参数为true,则开启自动提交事务
SqlSession
org.apache.ibatis.session.SqlSessio:构建者对象接口。用于执行SQL,管理事务,接口代理。
核心api
相关API小结
Resources
加载资源的工具类。
SqlSessionFactoryBuilder
获取SqlSessionFactory工厂对象的功能类。
SqlSessionFactory
获取SqlSession构建者对象的工厂接口
指定事务的提交方式
SqlSession
构建者对象接口
执行SQL
管理事务
接口代理
MyBatis映射配置文件
映射配置文件介绍
映射配置文件包含了数据和对象之间的映射关系以及要执行的SQL语句。
查询功能
属性
id: 唯一标识,配合名称空间使用
parameterType:指定参数映射的对象类型
resultType:指定结果映射的对象类型。
SQL获取参数
#{属性名}
StudentMapper中添加
StudentTest测试类中
/*
* 根据id查询
* */
@Test
public void selectById() throws Exception{
//1.记载核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//2.获取SqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.通过工厂对象获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.执行映射配置文件中的sql语句,并接受结果
Student stu = sqlSession.selectOne("StudentMapper.selectById",3);
//5.处理结果
System.out.println(stu);
//6.释放资源
sqlSession.close();
is.close();
}
新增功能
属性
id:唯一标识,配合名称空间使用。
parameterType:指定参数映射的对象类型
resultType:指定结果映射的对象类型
SQL获取参数
#{属性名}
StudentMapper中添加
Insert into Student values(#{id},#{name},#{age})
StudentTest测试类中
/*
* 新增功能
*
* */
@Test
public void insert() throws Exception{
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//2.获取SqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.通过工厂对象获取sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//4.执行映射文件中的sql语句
Student stu=new Student(5,"周气",27);
int insert = sqlSession.insert("StudentMapper.insert", stu);
//5.提交事务
//sqlSession.commit();
//6.处理结果
System.out.println(insert);
//7.关闭资源
sqlSession.close();
is.close();
}
修改功能
属性
id:唯一标识,配合名称空间使用。
parameterType:指定参数映射的对象类型
resultType:指定结果映射的对象类型
SQL获取参数
#{属性名}
StudentMapper中添加
update Student set name =#{name},age=#{age} where id=#{id}
StudentTest测试类中
/*
* 修改功能
* */
@Test
public void update() throws Exception{
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//2.获取SqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.通过工厂对象获取sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//4.执行映射文件中的sql语句
Student stu=new Student(5,"李气",30);
int insert = sqlSession.update("StudentMapper.update", stu);
//5.提交事务
//sqlSession.commit();
//6.处理结果
System.out.println(insert);
//7.关闭资源
sqlSession.close();
is.close();
}
删除功能
属性
id:唯一标识,配合名称空间使用。
parameterType:指定参数映射的对象类型
resultType:指定结果映射的对象类型
SQL获取参数
#{属性名}
StudentMapper中添加
delete from Student where id=#{id}
StudentTest测试类中
/*
* 删除功能
* */
@Test
public void delete() throws Exception{
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//2.获取SqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.通过工厂对象获取sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//4.执行映射文件中的sql语句
int result = sqlSession.delete("StudentMapper.delete", 5);
//5.提交事务
//sqlSession.commit();
//6.处理结果
System.out.println(result);
//7.关闭资源
sqlSession.close();
is.close();
}
映射配置文件小结
映射配置文件包含了数据和对象之间的映射关系以及要执行的SQL语句。
namespace属性:名称空间
id属性:唯一标识,配合名称空间使用
parameterType:指定参数映射的对象类型
resultType:指定结果映射的对象类型
SQL获取参数
#{属性名}
核心配置文件的介绍
核心配置文件包含了MyBatis最核心的设置和属性信息。如数据库的连接,事务,连接池等。
<?xml version="1.0" encoding="UTF-8" ?>
数据库连接配置文件的引入
属性
resource:数据库连接配置文件路径
获取数据库连接参数
${键名}
------------恢复内容结束------------
------------恢复内容开始------------
MyBatis快速入门
MyBatis相关API
MyBatis映射配置文件
MyBatis核心配置文件
MyBatis传统方式实现Dao层
框架介绍:
框架是一款半成品软件,我们可以基于这个半成品软件继续开发。来完成我们个性化的需求!
ORM 介绍
ORM(Object relational Mapping):兑对象关系映射
指的是持久化数据和实体对象的映射模式,为了解决面向对象与关系型数据库存在的互不匹配的现象的技术
映射规则:
数据表---》类
表字段---》类属性
表数据---》对象
MyBatis介绍
原始JDBC的操作-查询
原始JDBC的操作-新增
原始JDBC的操作问题分析
1,频繁创建和销毁数据库的连接会造成系统资源浪费从而影响系统性能
2,sql语句在代码中硬编码,如果要修改sql语句,就需要修改java代码,造成代码不易维护
3,查询操作时,需要手动将结果集中的数据封装到实体对象中
4,增删改查操作需要参数时,需要手动将实体对象的数据设置到sql语句的占位符
原始JDBC的操作问题解决方案
1.使用数据库连接池初始化连接资源。
2.将sql语句抽取到配置文件中。
3.使用反射,内省等底层技术,将实体与表进行属性与字段的自动映射
MyBatis是一个优秀的基于Java的持久层框架,它内部封装了JDBC,使开发者只需要关注SQL语句本身,
而不需要花费精力去处理加载驱动,创建连接,创建执行者等复杂的操作。
MyBatis通过xml或注解的方式将要执行的各种Statement配置起来,并通过Java对象和Statement中SQL的动态参数进行映射生成最终要执行的SQL语句。
最后MyBatis框架执行完SQL并将结果返回映射为Java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对JDBC进行了封装,屏蔽了JDBC API底层访问细节,是我们不用与JDBC API打交道,就可以完成对数据库的持久化操作。
MyBatis入门程序
1.数据准备
2.导入jar包
3.在src下创建映射配置文件
4.在src下创建核心配置文件
5.编写测试类完成相关API的使用
6.运行测试查看结果
目录结构
导入三个包
src代码如下
bean中Student代码
package com.itheima.bean;
public class Student {
private Integer id;
private String name;
private Integer age;
public Student() {
}
public Student(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
dao中StudentTest01代码
package com.itheima.dao;
import com.itheima.bean.Student;
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 java.io.InputStream;
import java.util.List;
public class StudentTest01 {
/*
查询全部
*/
@Test
public void selectAll() throws Exception{
//1.加载核心配置文件
//InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
InputStream is = StudentTest01.class.getClassLoader().getResourceAsStream("MyBatisConfig.xml");
//2.获取SqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.通过SqlSession工厂对象获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.执行映射配置文件中的sql语句,并接收结果
List list = sqlSession.selectList("StudentMapper.selectAll");
//5.处理结果
for (Student stu : list) {
System.out.println(stu);
}
//6.释放资源
sqlSession.close();
is.close();
}
}
MyBatisConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
StudentMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
快速入门小结
1.框架
框架是一款半成品软件,我们可以基于框架继续开发,从而完成一些个性化的需求。
2.ORM
对象关系映射,数据和实体对象的映射
3.MyBatis
是一个优秀的基于Java的持久层框架,它内部封装了JDBC。
4.入门步骤
导jar包
编写映射配置文件。
编写核心配置文件。
使用想相应的API来完成编码。
MyBatis相关API
Resources
org.apache.ibatis.io.Resources:加载资源的工具类。
核心方法
返回值 方法名 说明
InputStream getResourceAsStream(String fileName) 通过类加载器返回指定资源的字节输入流
SqlSessionFactoryBuilder
org.apache.ibatis.session.SqlSessionFactoryBuilder:获取SqlSessionFactory工厂对象的功能类
返回值 方法名 说明
SqlSessionFactory build(InputStream is) 通过指定资源字节输入流获取SqlSession工厂对象
SqlSessionFactory
org.apache.ibatis.session.SqlSessionFactory:获取SqlSession构建者对象的工厂接口。
核心方法
返回值 方法名 说明
SqlSession openSession() 获取SqlSession构建者对象,并开启手动提交事务
SqlSession openSession(boolean autoCommit) 获取SqlSession构建者对象,如果参数为true,则开启自动提交事务
SqlSession
org.apache.ibatis.session.SqlSessio:构建者对象接口。用于执行SQL,管理事务,接口代理。
核心api
相关API小结
Resources
加载资源的工具类。
SqlSessionFactoryBuilder
获取SqlSessionFactory工厂对象的功能类。
SqlSessionFactory
获取SqlSession构建者对象的工厂接口
指定事务的提交方式
SqlSession
构建者对象接口
执行SQL
管理事务
接口代理
MyBatis映射配置文件
映射配置文件介绍
映射配置文件包含了数据和对象之间的映射关系以及要执行的SQL语句。
查询功能
属性
id: 唯一标识,配合名称空间使用
parameterType:指定参数映射的对象类型
resultType:指定结果映射的对象类型。
SQL获取参数
#{属性名}
StudentMapper中添加
StudentTest测试类中
/*
* 根据id查询
* */
@Test
public void selectById() throws Exception{
//1.记载核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//2.获取SqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.通过工厂对象获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.执行映射配置文件中的sql语句,并接受结果
Student stu = sqlSession.selectOne("StudentMapper.selectById",3);
//5.处理结果
System.out.println(stu);
//6.释放资源
sqlSession.close();
is.close();
}
新增功能
属性
id:唯一标识,配合名称空间使用。
parameterType:指定参数映射的对象类型
resultType:指定结果映射的对象类型
SQL获取参数
#{属性名}
StudentMapper中添加
Insert into Student values(#{id},#{name},#{age})
StudentTest测试类中
/*
* 新增功能
*
* */
@Test
public void insert() throws Exception{
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//2.获取SqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.通过工厂对象获取sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//4.执行映射文件中的sql语句
Student stu=new Student(5,"周气",27);
int insert = sqlSession.insert("StudentMapper.insert", stu);
//5.提交事务
//sqlSession.commit();
//6.处理结果
System.out.println(insert);
//7.关闭资源
sqlSession.close();
is.close();
}
修改功能
属性
id:唯一标识,配合名称空间使用。
parameterType:指定参数映射的对象类型
resultType:指定结果映射的对象类型
SQL获取参数
#{属性名}
StudentMapper中添加
update Student set name =#{name},age=#{age} where id=#{id}
StudentTest测试类中
/*
* 修改功能
* */
@Test
public void update() throws Exception{
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//2.获取SqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.通过工厂对象获取sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//4.执行映射文件中的sql语句
Student stu=new Student(5,"李气",30);
int insert = sqlSession.update("StudentMapper.update", stu);
//5.提交事务
//sqlSession.commit();
//6.处理结果
System.out.println(insert);
//7.关闭资源
sqlSession.close();
is.close();
}
删除功能
属性
id:唯一标识,配合名称空间使用。
parameterType:指定参数映射的对象类型
resultType:指定结果映射的对象类型
SQL获取参数
#{属性名}
StudentMapper中添加
delete from Student where id=#{id}
StudentTest测试类中
/*
* 删除功能
* */
@Test
public void delete() throws Exception{
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//2.获取SqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.通过工厂对象获取sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//4.执行映射文件中的sql语句
int result = sqlSession.delete("StudentMapper.delete", 5);
//5.提交事务
//sqlSession.commit();
//6.处理结果
System.out.println(result);
//7.关闭资源
sqlSession.close();
is.close();
}
映射配置文件小结
映射配置文件包含了数据和对象之间的映射关系以及要执行的SQL语句。
namespace属性:名称空间
id属性:唯一标识,配合名称空间使用
parameterType:指定参数映射的对象类型
resultType:指定结果映射的对象类型
SQL获取参数
#{属性名}
核心配置文件的介绍
核心配置文件包含了MyBatis最核心的设置和属性信息。如数据库的连接,事务,连接池等。
<?xml version="1.0" encoding="UTF-8" ?>
数据库连接配置文件的引入
属性
resource:数据库连接配置文件路径
获取数据库连接参数
${键名}
jdbc.properties文件
driver=com.mysql.jdbc.Driver url=jdbc:mysql://192.168.23.129:3306/db3 username=root password=root
MyBatisConfig.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
起别名:
属性:
type:指定全类名
alias:指定别名
MyBatisConfig.xml加入
StudentMapper.xml文件为
<?xml version="1.0" encoding="UTF-8" ?>Insert into Student values(#{id},#{name},#{age}) update Student set name =#{name},age=#{age} where id=#{id} delete from Student where id=#{id}
核心配置文件小结
核心配置文件包含了MyBatis最核心的设置和属性信息。如数据库的连接,事务,连接池信息等