MyBatis
1.什么是MyBatis?
MyBatis 是一款优秀的持久层[数据访问层]框架,对原始的JDBC技术的封装,可以帮助我们快速的链接和访问数据库。
MyBatis是一款优秀的基于ORM的持久层[数据访问层]框架
2.为什么要使用MyBatis?
它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
3.什么是ORM?
ORM[对象关系映射]—我们在访问数据库的时候所编写的都是Java程序,Java程序只认识Java对象,而我们所访问的数据库大多数都是关系型数据库,那么这时Java程序要想访问关系型数据库,那么就需要将Java对象转换成关系型数据,才能被数据库认识。这时我们可以认为一个Java类就是关系型数据库中的一张数据表,Java类中的成员变量是数据库表中的一个列,Java类创建的Java对象就是数据库表中的一行记录。
这时将Java对象对应成为数据库表记录的过程就是对象关系映射【ORM】.
ORM的优点:当我们使用Java程序控制Java对象的时候,数据库中的数据表记录会随之变化。
4.MyBatis的工作原理
(1)mybatis框架在启动的时候会先读取指定的核心配置文件(mybatis-config.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>
<!-- 配置引入数据库链接字符串的资源文件 -->
<properties resource="dbconfig.properties"></properties>
<!-- 配置mybatis默认的连接数据库的环境 -->
<environments default="development">
<environment id="development">
<!-- 配置事务管理者 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${mydriver}"/>
<property name="url" value="${myurl}"/>
<property name="username" value="${myusername}"/>
<property name="password" value="${mypassword}"/>
</dataSource>
</environment>
</environments>
<!-- 配置MyBatis数据访问接口的SQL映射文件路径 -->
<mappers>
<!-- 如果SQL映射文件在数据访问接口包中 -->
<mapper resource="com/click369/mybatis/mapper/PersonMapper.xml"/>
<!-- 如果SQL映射文件在src/main/resources中 -->
<!-- <mapper resource="PersonMapper.xml"/>-->
</mappers>
</configuration>
(2)在读取核心配置mybatis-config.xml时,在核心配置文件中使用
<!-- 配置MyBatis数据访问接口的SQL映射文件路径 -->
<mappers>
<!-- 如果SQL映射文件在数据访问接口包中 -->
<mapper resource="com/click369/mybatis/mapper/PersonMapper.xml"/>
<!-- 如果SQL映射文件在src/main/resources中 -->
<!-- <mapper resource="PersonMapper.xml"/>-->
</mappers>
(3)在mybatis加载完核心配置文件之后,就可以构建出mybatis的核心对象SqlSessionFactory。
SqlSessionFactory用来创建SqlSession
由于SqlSessionFactory是一个接口,所以不能new,需要子类【SqlSessionFactoryBuilder】。
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
(4)通过核心对象SqlSessionFactory获取到与数据库的连接对象SqlSession(专业术语:sql会话)
SqlSession对象可以创建数据访问接口对象,也可以调用数据库操作方法【增删改查】访问数据库。
由此可知,SqlSession对象访问数据库的方法有2种。
(1)SqlSession对象调用getMapper(Class)方法得到数据访问接口对象,通过数据访问接口对象调用数据访问接口中操作数据库的方法。
(2)SqlSession对象调用insert(),update(),delete(),select(),直接操作数据库数据。
(5)使用SqlSession对象结合核心文件读取到SQL配置文件中的SQL语句,就可以操作数据库。
mybatis会根据指定的输入参数和输出参数将数据进行自动的封装
例如:
<insert id="insertPerson" parameterType="com.click369.mybatis.javabean.Person">
insert into t_person values(null,#{
pername},#{
perage},#{
peraddress})
</insert>
parameterType【输入参数】:1.基本数据库类型
2.pojo类型【对象】
3.集合类型【Map】
例如:
<select id="selectPersonById" parameterType="int" resultMap="personMap">
select * from t_person where per_id=#{
perid}
</select>
resultMap【输出参数】:1.基本数据库类型
2.pojo类型
3.集合类型【HashMap】
resultType【输出参数】
5.MyBatis中的核心对象
SqlSessionFactory如何创建?有什么作用?常用方法?
SqlSessionFactory它是mybatis的核心对象,通过这个对象可以获取到与数据库的连接【SqlSession】。同时这个对象中保存着读取到的核心配置文件【mybatis-config.xml】中的信息【1.数据源 2.SQL映射文件】。
例如:
//加载mybatis配置文件
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactory接口对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
得SqlSessionFactory 的实例。
SqlSessionFactory 的实例可以获得操作数据的SqlSession实例,通过这个实例对数据库进行操作
SqlSession如何创建?有什么作用?常用方法?
SqlSession对象提供的常用方法:
1.insert(statement, parameter):添加数据的方法
参数1【String】:需要执行的sql映射文件中的sql语句【数据访问接口+抽象方法名称】
参数2【Object】:输入参数。
2.update(statement, parameter):修改数据的方法
参数1【String】:需要执行的sql映射文件中的sql语句【数据访问接口+抽象方法名称】
参数2【Object】:输入参数。
3.selectOne(statement, parameter):查询一个数据的方法
参数1【String】:需要执行的sql映射文件中的sql语句【数据访问接口+抽象方法名称】
参数2【Object】:输入参数。
4.session.selectList(statement):查询所有数据的方法
参数1【String】:需要执行的sql映射文件中的sql语句【数据访问接口+抽象方法名称】
5.delete(statement, parameter):删除数据的方法
参数1【String】:需要执行的sql映射文件中的sql语句【数据访问接口+抽象方法名称】
参数2【Object】:输入参数。
6.getMapper(class):得到数据访问接口对象
参数1【Class】:被获取的数据访问接口的反射对象
7.commit():提交执行
8.close():关闭sqlsession
5.2 SqlSession对象
SqlSession对象它表示的是与数据库之间的一个连接(会话)。
通过SqlSession对象可以对数据库进行CRUD操作。
但是SqlSession对象在使用的时候必须指明到底需要执行的是Mapper文件中的哪个SQL。
例如:
package com.click369.test1;
import java.io.InputStream;
import java.util.List;
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.click369.mybatis.javabean.Person;
import com.click369.mybatis.mapper.PersonMapper;
public class MyTest2 {
/**
* 测试添加
*/
@Test
public void testInsertPerson(){
SqlSession session=null;
try{
//加载mybatis配置文件
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactory接口对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession接口对象【有增删该查方法】
session=sqlSessionFactory.openSession();
Person person=new Person();
person.setPername("zhangsan");
person.setPerage(23);
person.setPeraddress("西安");
int temp=session.insert("com.click369.mybatis.mapper.PersonMapper.insertPerson", person);
System.out.println("temp="+temp);
//提交执行
session.commit();
}catch(Exception e){
e.printStackTrace();
}finally{
session.close();
}
}
/**
* 测试修改
*/
@Test
public void testUpdatePerson(){
SqlSession session=null;
try{
//加载mybatis配置文件
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactory接口对象
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession接口对象【有增删该查方法】
session=sqlSessionFactory.openSession();
Person person=new Person();
person.setPerid(1);
person.setPername("lisi");
person.setPerage(23);
person.setPeraddress("西安");
int temp=session.update("com.click369.mybatis.mapper.PersonMapper.updatePerson", person);
System.out.println("temp="+temp);
//提交执行
session