MyBatis小结1

MyBatis小结1

1.持久性框架:我们将数据存储在磁盘中的行为,被称为持久化:负责操作数据库的框架
2.mybatis、hibernate、
3.ORM框架:目前流行的持久性框架,都是ORM框架
4.ORM:object Relation Mapper(对象关系映射) 将咋们的java对象和关系型数据库建立映射关系
,本质上就是可以将记录和java对象进行互相转化
5.阻抗不匹配:将表中的记录和对象 模型不匹配行为;ORM主要解决阻抗不匹配的问题

6.完全ORM:使用者可以不用写sql语句,只要操作对象,就可以将对象持久化。例如:hibernate

7.半ORM框架:SQL自己写,记录和对象的转换工作,框架帮我们做

8.mybatis的配置文件:为mybatis做全局配置

9.mybatis的映射文件:定义sql语句的

  1. 接口作用:java的接口只是提供了一套对外开放的规范,接口本身并不能直接使用
    (接口不能被实例化):功能实现主要靠实现类。在javaEE开发中,接口作用很重要,很多时候起到了
    松耦合的作用。当具体的功能有变化时,我们只需要修改或改变实现类即可,对外还是使用原接口,此时使用者和功能的提供方,
    都是通过接口对接的。使用者和提供者之间耦合度就会降低。

11.面向接口的编程:自己定义一个接口,让该接口和映射文件结合起来,通过动态代理,
在运行时,根据映射文件,动态的生成接口的实现类,我们对外表面使用的是接口,实际上使用的是动态生成的实现类

配置文件

<?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>
  <!--环境配置:配置连接数据库的必须设置以及事务管理等等  
     我们可以配置多个环境,此处的default就是用来指定我们要用
   的环境,default的值指定为那个id,就表明使用该环境
  -->
  <environments default="mysql">
    <!--环境: id就是该环境的唯一标识  -->
    <environment id="mysql">
      <!--事务管理器  
        JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,
            它依赖从数据源获得的连接来管理事务作用域。
    MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,
        而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
      -->
      <transactionManager type="JDBC"></transactionManager>
      <!--数据源:连接数据库的配置  
         UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。
         POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,
              避免了创建新的连接实例时所必需的初始化和认证时间
            自定义数据库连接池,type处可以填自己定义的全限定类名
            例如要用c3p0数据库连接池
       public class C3P0DataSourceFactory extends UnpooledDataSourceFactory {

        public C3P0DataSourceFactory() {
            this.dataSource = new ComboPooledDataSource();
          }
    }
    
    <dataSource type="C3P0DataSourceFactory">
      -->
      <dataSource type="POOLED">
        <!--连接数据库需要的配置  -->
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
        <!-- 在xml文件中,属性值中的&amp; 就是&符号 -->
        <property name="url" 
        value="jdbc:mysql://localhost:3306/mybatis1?characterEncoding=UTF8&amp;serverTimezone=UTC"/>
      </dataSource>
    </environment>
    <!-- <environment id="oracle"></environment> -->
  </environments>
     
  <!--配置映射文件 -->
  <mappers>
  <mapper resource="com/kang3/mappers/StudentMapper.xml"/ >
  </mappers>
</configuration>
</configuration>

mybatis的执行流程

package com.kang;

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;

public class Test {
	public static void main(String[] args) throws IOException {
		//1.mybatis的执行流程
		//1.加载配置文件
		InputStream in =  Resources.getResourceAsStream("mybatis-config.xml");
		//2.创建工厂构建器对象:作用就是用来创建SqlSessionFactory
		SqlSessionFactoryBuilder  builder = new SqlSessionFactoryBuilder();
		//3.通过工厂构建器对象加载配置文件  创建工厂对象
		//工厂的作用就是用来创建SqkSession对象的
		SqlSessionFactory factory = builder.build(in);
		//4.通过工厂创建SqlSession对象
		SqlSession sqlSession = factory.openSession();
		//5.通过SqlSession对象中的api方法操作数据库
		Student student = new Student();
		student.setAge(20);
		student.setName("张三");
		student.setSex("男");
			/*
		 * 第一个参数:要执行的sql语句的位置  映射文件的namespace.语句的id
		 * 第二个参数:sql中需要的数据,如果不需要数据。那么可以省略该形参
		 */
//		int row = sqlSession.insert("com.yd.student.addStudent", student);
//		System.out.println(row);
		
		//执行删除语句
		int row=sqlSession.delete("com.yd.student.deletaAll");
		System.out.println(row);
		
		//更新的方法
		//sqlSession.update(arg0)
		
		//查询的方法
		//sqlSession.select(arg0, arg1);
		
		/*
		 * 在实际开发中,我们很少直接使用sqlSession的API方法操作数据库
		 * 都是使用面向接口的编程方式,也就是接口 + 映射文件
		 * 
		 */
		
		//提交事务
		sqlSession.commit();
		
		
	}

在数据库中创建库并建表

SHOW DATABASES;
CREATE DATABASE mybatis1 CHARSET=utf8 COLLATE utf8_general_ci;
USE mybatis1;
CREATE TABLE student (id INTEGER PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),age INTEGER,sex VARCHAR(5))CHARSET=utf8;

实体类:映射数据库中的表

package com.kang.model;

//实体类:映射数据库中的表
public class Student {
	//对应表中的四个字段,一般情况下,最好属性名和字段名保持一致
private Integer id;
private String name;
private Integer age;
private String sex;
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;
}
public String getSex() {
	return sex;
}
public void setSex(String sex) {
	this.sex = sex;
}
@Override
public String toString() {
	return "Student [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";
}


}

映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- 将来我们是通过namespace找到对应的mapper中的sql语句
     可以认为namespace就是当前mapper的唯一标识
 -->
  <mapper namespace="com.yd.student">
  <!-- 定义插入语句 
       id:就是当前语句的唯一标识,通过id找到当前语句
       parameterType:参数类型(大部分时候,该属性可以省略)
       
       默认情况下使用的statement是perparedStatement 防止SQL注入
       #{对象的属性名}:获取指定对象的属性值 通过getter方法获取的
  -->
  <insert id="addStudent" parameterType="com.kang.model.Student">
     insert into student (name,age,sex) values(#{name},#{age},#{sex})
  </insert>
  
  <delete id="deletaAll">
    delete from student
  </delete>
  </mapper>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值