Java小白的数据库爱情(五)mybatis 入门环境搭建

Java小白的数据库爱情(五)mybatis 入门环境搭建

Mybatis不是一个完全的orm框架,Mybatis需要程序员自己写sql,但是 也存在映射(输入参数映射,输出结果映射),学习门槛mybatis比 hibernate低;同时灵活性高,特别适用于业务模型易变的项目,使用 范围广。

简单概括: 更加简化jdbc代码,简化持久层,sql语句从代码中分离,利用反射, 将表中数据与java bean 属性一一映射 即 ORM(Object Relational Mapping 对象关系映射)

使用范围: 在日常的开发项目中,如中小型项目,例如ERP,需求与关系模型相对 固定建议使用Hibernate,对于需求不固定的项目,比如:互联网项 目,建议使用mybatis,因为需要经常灵活去编写sql语句。总之, mybatis成为当下必须学习掌握的一个持久层框架。

从上面我们可以看到mybatis的功能架构分为三层:

API接口层:提供给外部使用的接口API,开发人员通过这些本地API来 操纵数据库。接口层接收到调用请求就会调用数据处理层来完成具体 的数据处理。

**数据处理层:**负责具体的SQL查 找、SQL解析、SQL执行和执行结果映 射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

**基础支撑层:**负责最基础的功能支撑,包括连接管理、事务管理、配 置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基 础的组件。为上层的数据处理层提供最基础的支撑

Mybatis特点

属于持久层ORM框架

  1. 持久层: 讲内存中对象数据,转移到数据库中的过程持久层 Mybatis Hibernate Spring-jpa

  2. ORM Object Relational Mapping 对象关系映射框架

    类 表

    属性 字段

    对象 记录

  3. 半自化 自动

    ​ Mybatis 半自动化

    ​ 表需要手动进行设计

    ​ 提供sql

    ​ 依赖与数据库平台

    ​ 优点:学习使用简单(基与原声jdbc封装),优化灵活,适合做 互联网项目

    ​ Hibernate 自动化ORM框架

    ​ 表可以通过框架自动创建

    ​ 省略一些基本的sql

    ​ 不依赖与数据库平台

    ​ 缺点: 学生成本高,优化难度大,适合与传统框(OA|图书管 理系 统…),不适合做大型互联网项目

Mybatis环境搭建

官网: https://mybatis.org/mybatis-3/zh/index.html

  1. 新建Java项目

​ 新建Java项目,导入核心java包与mybatis依赖jar包

  1. 导入jar包
  • ​ mybatis核心jar包
  • ​ mybatis依赖jar包
  • ​ 数据库驱动jar包
  • ​ Build Path 选中所有的jar包,右键build path->add to build path 管理外部的jar资源
Mybatis配置文件

mybatis提供两种配置文件, 核心配置文件

mybatisconfig.xml|mybatis.xml 与 SQL映射文件mapper.xml

核心配置文件添加

是一个xml文件,命名无要求,位置无要求,一般成为mybatis.xml,放在src 路径下

dtd 头约束
<?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配置文件根目录,所有其他的元素都要在这个标签下使用(dtd文件规 定)
environments用于管理所有环境, 并可以指定默认使用那个环境,通过defualt属性来 指定
transactionManager用户配置事务管理器
dataSource用于配置数据源, 设置Myabtis是否使用连接池技术,并且配置数据库的 四个连接参数
property用于配置数据库连接参数 (driver,url,username,password)
mappers用于配置扫描sql映射文件,我们需要告诉 MyBatis 到哪里去找到定义 SQL 映射语句。 最好的办法是直接告诉 MyBatis 到哪里去找映射文件。
<?xml version="1.0" encoding="UTF-8" ?>
<!--dtd: 规定mybatis核心配置稳定的定义要求:内容,位置,规范...-->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--基础核心配置 : 根元素-->
<configuration>
    <!--使用的环境: 定义事务管理,数据库连接,连接参数配置...-->
    <!--
        environments: 可以定义多个环境environment
        default : 选择使用哪一个环境,关联environment的id 属性值
    -->
    <environments default="dvd">
        <!--定义环境基础配置: id: 表示唯一 不可重复-->
        <environment id="dvd">
            <!--事务管理: type="JDBC" 使用JDBC的事务管理机制-->
            <transactionManager type="JDBC"/>
            <!--数据源的配置: type="POOLED" 选择使用数据库连接池管理连接 -->
            <dataSource type="POOLED">
                <!--配置连接参数  name:配置的内容   value:数据值 -->
                <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
                <property name="username" value="SCOTT"/>
                <property name="password" value="TIGER"/>
            </dataSource>
        </environment>
    </environments>
    <!--配置sql映射文件的位置-->
    <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>


SQL映射文件的添加
配置映射文件
标签名作用
parameterType入参类型
resultType结果类型
<?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">
<!--
    SQL映射文件 mapper 根元素映射配置
    namespace: 命名空间  必填
        在当前项目下是唯一的,唯一标识,标识sql映射文件的唯一
        任意定义,内容没有要求
        一般定义为:当前sql映射文件的包名.文件名  com.xxxx.mappers.DeptMapper
-->
<mapper namespace="com.xxxx.mappers.DeptMapper">
    <!--
        select : 定义查询语句
        id : 是当前命名空间下的sql语句的唯一标识,当前命名空间下不能重复
        resultType : 结果类型
            常用的结果类型: 基本数据类型  包装类型  String   Date  Javabean   List   Map.
        parameterType : 入参类型
            常用的入参类型: 基本数据类型  包装类型  String   Date  Javabean  List  数组   Map
    -->
    <select id="queryAll" resultType="String" >
        select dname from dept
  </select>

    <select id="queryAllDept" resultType="com.xxxx.pojo.Dept" >
        select * from dept
  </select>
    
    <!--
   测试sql语句传递参数
    sql语句中的占位符号#{deptno}
    占位符号的名字可以随意定义
-->
        <select id="queryDeptById" parameterType="int" resultType="com.xxxx.pojo.Dept" >
        select  *  from dept where deptno = #{deptno}
    </select>
</mapper>
创建工厂使用Mapper中的增删改查方法
简单步骤:
  1. 创建SqlSessionFactoryBuilder对象
  2. 加载SqlMapConfig.xml配置文件
  3. 创建SqlSessionFactory对象
  4. 创建SqlSession对象
  5. 通过SqlSession对象调用Mapper中的增删改查方法

案例

public class DeptTest {
    public static void main(String[] args) throws IOException {
        //1.加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis.xml");
        //2.构建SqlSessionFactory对象实例
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        //3.根据工厂获取会话 SqlSession
        SqlSession session = factory.openSession();
        //4.执行sql语句
        //selectList("命名空间.id") 执行某一个sql做查询,返回一个List集合  com.xxxx.mappers.DeptMapper.queryAll

        List<String> list =  session.selectList("com.xxxx.mappers.DeptMapper.queryAll");
        list.forEach(System.out::println);

        List<Dept> list2 = session.selectList("com.xxxx.mappers.DeptMapper.queryAllDept");
        list2.forEach(System.out::println);

        //5.关闭
        session.close();
 测试有条件的Sql语句  ->DeptMapper2.xml
    selectOne("命名空间.id")  执行指定的sql,返回一个结果
    selectOne("命名空间.id",sql语句的实参)
    selectList("命名空间.id")  执行指定的sql,返回一个List集合 (集合中存储的数据的类型->resultType)
    selectList("命名空间.id",sql语句的实参)
    selectMap("命名空间.id","返回的map集合中,作为key的字段名")  执行指定的sql,返回一个存储的数据的Map集合,默认键值对的value查询的数据resultType
    selectMap("命名空间.id",Object类型的sql语句的实参,"返回的map集合中,作为key的字段名")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值