MyBatis

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值