初始MyBatis框架

什么是JDBC? 

JDBC(JavaDataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句

请列举使用JDBC的步骤?

1.加载驱动

2.建立连接

3.创建PreparedStatemnet或Statemnet对象

4.执行查询,得到结果集

5.遍历查询结果

6.释放资源,关闭连接

为什么需要框架技术?

如何更快更好地写简历?使用word简历模板

使用模板有什么好处呢?

不用考虑布局、排版等,提高效率、可专心在简历内容上、结构统一,便于人事阅读、新手也可以作出专业的简历

主流框架的介绍:

Mybatis的前生是ibatis,最后升级版本后叫mybatis。mybatis是以纯sql操作数据(动态sql),是一个持久层框架,比Hibernate灵活,但移植性差。DAO层、实体类与SQL语句之间建立映射关系,半自动化的ORM(对象/关系映射)实现。

Spring(开源的、轻量级框架),是一个JavaEE框架,支持IOC、DI、AOP,对DAO层的支持等简化开发功能

Spring框架有很多的模块,例如我们可以使用AOP模块实现日志管理功能,事物管理功能等。

Spring的模块包括:Spring Core、Spring AOP、Spring Web、 Spring Context、Spring Web MVC、Spring ORM、Spring DAO 等

Spring还可以很方便地与SpringMVC、Struts2、Hibernate等框架集成 (粘合剂,将大家组装到一起)

SpringMVC是Spring框架提供的构建Web应用程序的全功能MVC模块,支持多视图技术。

Spring和SpringMVC的区别?

Spring是一个JavaEE框架,支持IOC、DI、AOP。Spring框架有很多模块,每个模块可以独立运行

SpringMVC是一个Spring的一个模块,实现MVC设计思想

Struts2是一个MVC框架,而MVC是模型、视图、控制器的意思,可以实现业务逻辑和页面显示的分离,扩展性好。它的核心原理就是用一个核心的过滤器实现前端控制器的功能,结合struts的配置文件,实现请求的分发,和结果页面的调用。

SpringMVC和Struts2的区别?

1、Spring MVC 开发效率和性能要优于Struts2。

2、Spring MVC继承了Ajax,使用@ResponseBody可以获取json数据,使用@RequestBody可以在请求中发送json数据。

3、Struts中使用Ajax 比较麻烦。

4、Spring MVC 通过前端控制器 DispatcherServlet 完成请求的分发。入口是一个Servlet

5、Struts2 通过 FilterDispatcher(2.1.3以前)或 StrutsPrepareAndExecuteFilter(2.1.3和以后)完成请求的分发。入口是一个 Filter。

6、Spring MVC 是基于方法级别传递数据。单实例情况下不存在线程安全的问题。因为SpringMVC的参数是在控制器的方法中传递的。

7、Struts2是基于类级别传输数据。Struts2单实例情况下有线程并发问题,多实例情况下没有线程并发问题,但是效率又很低。也可以在单实例情况下使用ActionContext类传递数据,但是比较麻烦。

hibernate是一个基于ORM持久化框架,可以让程序员以面向对象的思想操作数据库,提高生产效率。

hibernate是一个开放源代码的对象关系映射,将JDBC进行了封装

DAO层,对象与数据表之间建立映射关系

什么是ORM?

ORM是一种思想,意思是对象关系映射(Object Relation Mapping),是基于pojo(领域模型)层的映射,映射的是对象和表、属性和列。如hibernate可以让你以面向对象的方式去编程。封装了JDBC

JDBC和ORM区别?

JDBC只是一个java操作数据库的规范接口而已

ORM是一种思想,对象关系模型(Object Relation Mapping),以面向对象的方式去编程。封装了JDBC

Spring,SpringMVC ,Struts2,hibernate,mybatis  分别是解决什么问题的?

SpringMVC 和 Struts2 是MVC框架,主要是将系统分为视图、模型、控制器三个层次,负责接收请求,调用业务层接口,给视图层返回需要的数据。降低系统的耦合性。

hibernate 和 mybatis 是持久层框架,解决如何存取数据库中的数据的问题,提高数据操作的效率。

Spring 实现依赖注入的功能,例如将dao对象注入service 层,同时spring 面向切面的特性可以实现程序中事物管理的功能,日志记录的功能等。

 

持久化与ORM

持久化是程序数据在瞬时状态和持久状态间转换的过程

     瞬时状态就是临时状态,保存在内存中

          数据在读取的时候都是从内存中进行读取的

      持久状态长期的保存,保存在硬盘光盘

            硬盘中的数据读取出来,持久化的数据转换成瞬时状态的

MyBatis简介

Mybatis的前生是ibatis,官网 http://mybatis.org  或者 MyBatis · GitHub 

半自动化的ORM实现,实体类与SQL语句之间建立映射关系

特点:基于sql语法,简单易学

能了解底层封装过程

SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度

方便程序代码调试  

搭建MyBatis开发环境

1.下载mybatis-3.5.1.jar并将所需jar文件导入工程

2.编写MyBatis核心配置文件configuration.xml

3.创建实体类(POJO)

4.定义DAO层Mapper接口、定义SQL映射文件

5.创建测试类

读取MyBatis核心配置文件 mybatis-config.xml

创建SqlSessionFactory实例,读取配置文件

创建SqlSession实例

创建Mapper实例执行SQL映射文件中的SQL语句

具体在IDEA中的创建步骤详见 创建web项目+引入jar包+编写配置文件.pdf

mybatis核心配置文件主要用于配置数据库连接和mybatis运行时所需的各种特性,包含了设置和影响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>
    <!-- 引入database.properties文件,连接数据库 -->
    <properties resource="database.properties"></properties>
    <!-- 配置mybatis的log实现为LOG4J -->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!-- 配置mybatis多套运行环境 -->
    <environments default="development">
        <environment id="development">
            <!-- 配置事物管理,采用JDBC的事物管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- POOLED:mybatis自带的数据源,JNDI:基于Tomcat的数据源 -->
            <dataSource type="POOLED">
                <!-- property中的name属性值 是固定的 不能变 -->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${name}"/>
                <property name="password" value="${pwd}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 将Mapper文件加入到配置文件中 -->
    <mappers>
        <mapper resource=""></mapper>
    </mappers>
</configuration>


解说
configuration:配置文件的根元素节点
mybatis-config.xml文件的元素节点是有一定顺序的,节点位置若不按顺序排位,那么xml文件会报错

配置文件如果没有提示  需要手动的引入

解压mybatis-3.5.1.jar后,在\org\apache\ibatis\builder\xml 路径中,如图

mybatis-3-config.dtd是MyBatis框架的核心配置文件的DTD文件

mybatis-3-mapper.dtd是SQL映射文件的DTD文件

 

创建实体

对象的属性与数据库表的字段名一致

注:数据表的字段命名按照java的驼峰命名规则,这样在进行实体映射的时候,一是方便开发者的工作,二是使用mybatis框架开发,也方便数据表字段与实体类的属性进行自动映射

定义实体类相关的Mapper接口--------实体名称+Mapper的规则来进行命名


public interface UserMapper {
    //注意 下面的方法名字要与Mapper映射文件中的id值一致


    //查询用户表的记录数
    public int count();
    //查询用户列表
    List<User> getUserList();
}


创建SQL映射文件-------实体名称+Mapper的规则来进行命名

映射文件的配置,该文件位于dao包下  命名如:UserMapper.xml 

SQL映射文件一般都对应于相应的实体,所以一般都是采用 实体名称+Mapper的规则来进行命名。

Mapper文件属于DAO层的操作,应该放置在dao包下

<?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,全局唯一 -->
<mapper namespace="com.msds.user.dao.UserMapper">

    <!--查询用户表的记录数 id值为方法名 resultType为方法的返回类型 -->
    <select id="count" resultType="int">
        SELECT COUNT(1) AS COUNT FROM smbms_user
    </select>
    <!--查询用户列表-->
    <select id="getUserList" resultType="com.msds.bean.User">
        SELECT * FROM smbms_user
    </select>
</mapper>

编写测试类 

放入lib下

为便于分类管理测试代码,可以在项目中新建一个test目录,用来存放测试相关的代码。右击test目录,在弹出的快捷菜单中选择如下 


public class TestUserMapper {
    private Logger log = Logger.getLogger(TestUserMapper.class);
    //查询总记录数
    @Test
    public void countTest() {
        SqlSession sqlSession = null;
        try {
            //1.读取mybatis-config.xml框架的核心配置文件
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //2.使用SqlSessionFactoryBuilder读取配置文件并构建SqlSessionFactory实例
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
            //3.创建SqlSession实例
            sqlSession = factory.openSession();
            //4.创建UserMapper接口实例,调用其方法执行相关的SQL语句
            int num = sqlSession.getMapper(UserMapper.class).count();
            log.info("TestUserMapper count------>" + num);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();//关闭会话
        }
    }



    //查询用户列表
    @Test
    public void getUserListTest(){
        SqlSession sqlSession = null;
        try {
            //1.读取mybatis-config.xml框架的核心配置文件
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //2.使用SqlSessionFactoryBuilder读取配置文件并构建SqlSessionFactory实例
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
            //3.创建SqlSession实例
            sqlSession = factory.openSession();
            //4.创建UserMapper接口实例,调用其方法执行相关的SQL语句
            List<User> list = sqlSession.getMapper(UserMapper.class).getUserList();
            for (User user:list){
                log.info("getUserListTest------>" + user.getUserCode()+"\t"+user.getUserName());
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();//关闭会话
        }
    }
}


搭建MyBatis与JDBC直观对比 

MyBatis框架的优缺点

浅谈mybatis优缺点_wangpeng047的博客-CSDN博客_mybatis的优缺点 

优点:

1)与JDBC相比,减少了50%以上的代码量

2)学习曲线短、灵活

3)sql全部写在xml文件中(从程序中彻底分离),便于管理和优化

4)可以写动态sql 

缺点:

1)编写sql工作量大

2)不易于数据库移植

3)查询出结果集后,如果列名和属性不匹配,必须手工组装

注:Mybatis专注SQL本身,是一个足够灵活地DAO层解决方案,适用于性能要求较高或者需求多变的互联网项目 

MyBatis基本要素——核心对象

SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession作用域(Scope)和生命周期 - OKevin - 博客园 

1.核心对象——SqlSessionFactoryBuilder

1.用过即丢,其生命周期只存在于方法体内

2.可重用其来创建多个SqlSessionFactory实例

3.负责创建SqlSessionFactory,并提供多个build方法的重载

 

注:SqlSessionFactoryBuild的最大特点是:用过即丢。一旦创建了SqlSessionFactory对象之后,这个类就不在需要存在了,因此SqlSessionFactoryBuild的最佳范围就是存在于方法体内,也就是局部变量而已

2.核心对象——SqlSessionFactory

SqlSessionFactory是每个MyBatis应用的核心

作用:创建SqlSession实例

 作用域:Application

SqlSessionFactory对象一旦创建,就会在整个应用运行过程中始终存在。

没有理由去销毁或在创建它,并且在应用运行中不建议多次创建SqlSessionFactory。

因此SqlSessionFactory的最佳作用域是Application

生命周期:SqlSessionFactory的生命周期与应用周期相同

单例:存在整个应用运行时,并且同时值存在一个对象实例

3.核心对象——SqlSession

SqlSession适用于执行持久化操作对象,类似于JDBC中的Connection

1.包含了执行SQL所需的所有方法

2.对应一次数据库会话,会话结束必须关闭

3.非线程安全,不能共享

SqlSession生命周期:对应着一次数据库会话。在每次访问数据库时需要创建它(注意:并不是说在SqlSession里只能执行一次SQL,是完全可以执行多次的,但是若关闭了SqlSession,那么就需要重新创建它)

创建SqlSession:SqlSessionFactory对象的openSession()方法

 SqlSession作用域:request作用域或者方法体作用域内 

 

 SqlSession的两种使用方式

1.通过namespace+id字符串运行映射的SQL语句

2.基于Mapper接口方式执行SQL语句

在以上代码的基础上编写工具类,优化SqlSessionFactory实例

 


public class MybatisUtil {
    private static SqlSessionFactory factory;
    static {
        try {
            //1.读取mybatis-config.xml框架的核心配置文件
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //2.使用SqlSessionFactoryBuilder读取配置文件并构建SqlSessionFactory实例
            factory = new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //创建SqlSession
    public static SqlSession createSqlSession(){
        return factory.openSession(false);//false 开启事物控制  在第2章节会有体现
    }
    //关闭SqlSession
    public static void closeSqlSession(SqlSession sqlSession){
        if(sqlSession!=null){
            sqlSession.close();
        }
    }
}


 

MyBatis基本要——核心配置文件

mybatis-config.xml 核心配置文件

 

一、配置properties元素的两种方式

方式1.通过外部指定的方式(database.properties),实现动态配置

 <properties resource="database.properties"/>

 方式2.直接配置为XML,实现动态配置

<properties>

      <property  name="driver"  value="com.mysql.cj.jdbc.Driver"/>

      <property  name="url"  value="jdbc:mysql://127.0.0.1:3306/......"/>

      <property  name="user"  value="root"/>

      <property  name="password"  value="123456"/>

</properties>

 注:若两种方式同时都用了,resource属性值的优先级高于property子节点配置的值

二、settings元素

用来修改MyBatis运行时的行为方式  

只要是MyBatis的一些全局配置属性的设置

  

三、typeAliases元素 [ˈeɪliəsɪz] 

类型别名

仅仅只关联XML配置,简写冗长的Java类名 

 上面的这种方式的弊端在于如果一个项目中有多个实体类的时候,需要一一进行配置,所以简化的写法就是通过package的name属性直接指定包名,MyBatis会自动扫描指定包下的JavaBean,并默认设置一个别名,默认名称就是JavaBean的非限定类名。

 

四、environments元素 [ɪnˈvaɪrənmənts]

表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上

子元素节点:environment,但是必须指定其中一个默认运行环境(通过default指定)

每个SqlSessionFatory实例只能选择一个运行环境

transactionManager事务管理器,MyBatis有两种事务管理类型即JDBC、MANAGED

 dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源

有三种内建的数据源类型 [UNPOOLED|POOLED|JNDI] 

 

五、mappers元素

映射器,定义SQL映射语句

须在配置中引用mapper映射文件

方式一:使用类资源路径获取资源

 

 方式二:使用Mapper接口的包路径

 

 

 

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qinꦿ.๓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值