初识框架之MyBatis

一、什么是框架

  1)传统 的JDBC编程

    JDBC作为Java语言连接数据库的一个重要的技能点,不可否认的是在一个程序中,如果我们需要多次进行与数据库的交互,那我们所需要的重复操作就就会有很多:

      1.加载数据库驱动

      2.获取数据库连接(Connection),获取Statement对象

      3.使用Statement操作sql语句

      4.如果是查询的话还需要获取一个ResultSet对象,并进行处理才能获取到查询的信息

      5.关闭数据库连接

    而且每次进行数据库交互,都需要进行一次类似与以上5个步骤的操作,这样就会对我们的工作量提升了许多,而且还是没有必要的。除此之外,我们还需要对以上操作不断地进行异常的捕捉,在我们工作的项目一般都很复杂,那么,这些操作是不是可以交给一个类似与第三方的工具进行处理,那我们的工作量不久会减轻好多吗?

  2)持久化与ORM

      1.持久化:持久化就是字面上的意思,很好理解,就是要数据以文件的形式,或者数据库等等方式永久的保存就是所谓的持久化。

        比较官方的解释就是:是程序数据在瞬时状态和持久状态之间转换的过程被称之为持久化。让对象的生存期超越使用对象的程序的运行期。(瞬时状态就是内存中的数据)

      2.ORM(Object Relational Mapping):

        编写程序时,与面向对象的方式处理数据(对象)

        保存数据时,以关系型数据库方式保存数据(表)

  3)框架的含义与好处:(比如我们在写简历的时候通常都会上网找一些模板来写,这时候我们就不需要考录简历的排版问题了,我们只需要把其中的内容填写好。使用框架的原因就类似与它)

    • 是一个应用程序的半成品。
    • 提供可重用的公共结构。
    • 按一定规则组织的一组组件
    • 不用再考虑公共性的问题
    • 专心在业务实现上
    • 结构统一,易于学习,维护
    • 新手也可以写出好程序

二、MyBatis

  1)MyBatis的构成

    1.SqlSessionFactoryBuilder

      SqlSessionFactoryBuilder是利用XML或者Java编码获得资源来构建SqlSessionFactory 的,通过它可以构建多个SessionFactory。它的作用仅仅是一个构建器而已,一旦我们构建了SessionFactory,那么它将毫无意义,应立即回收!

    2.SqlSessoinFactory

      SqlSessionFactory的作用是创建SqlSession,而SqlSession相当于一个会话,相当于JDBC中的connection对象,每次应用程序需要访问数据库,我们就要通SqlSessionFactory创建SqlSession,所以SqlSessionFactory应该在整个应用的生命周期中。而如果我们多次创建同一个数据库的SqlSessionFactory,则每次创建的SqlSessionFactory会打开更多的数据库连接资源,那么连接资源很开会被耗尽,因此SqlSessionFactory的职责是唯一的。果断的采取单例模式,在应用中使用同一个SqlSessionFactory对象即可

    3.SqlSession

      SqlSession是一个会话,相当于JDBC中的一个Connection对象,它的生命周期应该是在请求数据库处理事务的过程中,且SqlSession是线程非安全的对象,涉及多线程时要特别的当心,每次创建的SqlSession对象都要及时的关闭它,它长期存在就会使数据库连接池的活动资源减少,对系统性能影响很大

  2)使用MyBatis做简单的数据库增删改查

    1.导入jar包(https://github.com/mybatis/mybatis-3/releases)

      以上时官方下载地址,jar包的就导入方式在这里就不做介绍了(每个开发工具都有所不同)

      如果是使用idea的话也可以导入pom节点(https://mvnrepository.com/artifact/org.mybatis/mybatis)

      除了以上的MyBatis所依赖的包之外我们还需要导入JDBC的jar包或者pom,这些都可以在官方或者maven仓库中找到

    2.创建表结构

      

    3.准备resources目录

      1>database.properties文件(不会的就上网找一下,就是几个数据连接参数)

      2>configuration.xml文件(名字随便不是固定的,但是必须是xml文件)

        

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!-- xml文件的头文件,起到对文件的约束作用(例如:必须存在哪些节点) -->
 3 <!DOCTYPE configuration
 4         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 5         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 6 <configuration>
 7     <!--指向配置文件-->
 8     <properties resource="database.properties"></properties>
 9     <!--声明别名-->
10     <typeAliases>
11         <!--第一种方法-->
12         <!--<typeAlias type="com.cn.Dao.类名" alias="Monkey"></typeAlias>-->
13         <!--第二种方法,这玩意好用,别名就是其类名-->
14         <package name="com.cn.entity"></package>
15     </typeAliases>
16     <environments default="development">
17         <environment id="development">
18             <!--事务管理器:type JDBC or UNSIGNED(托管)-->
19             <transactionManager type="JDBC"></transactionManager>
20             <!--数据源:type jndi pooled unpooled-->
21             <dataSource type="POOLED">
22                 <!--连接数据库的4个连接参数-->
23                 <property name="driver" value="${driver}"></property>
24                 <property name="url" value="${url}"></property>
25                 <property name="username" value="${username}"></property>
26                 <property name="password" value="${password}"></property>
27             </dataSource>
28         </environment>
29     </environments>
30     <!--指向小配置文件xml-->
31     <mappers>
32         <package name="com.cn.Dao"></package>
33     </mappers>
34 </configuration>

    4.设置扫描路径+database.properties

    以上代码中有一个节点<mappers>中指定了一个相对路径,不难发现,这里是指定了xml的路径。但是有一定经验的会发现,idea中xml文件不是不可以在java目录下吗?当然,默认情况下是不可以的,即便是你放到了java目录下也不会被识别,更不要说说是使用了。但是上帝在把一扇门关上的同时自然也会给你打开一扇窗的。只需要在pom.xml文件中加入着呢一个接单就可以了

 

 1 <build>
 2   <resources>
 3     <resource>
 4       <directory>src/main/java</directory>
 5       <includes>
 6         <include>**/*.xml</include>
 7       </includes>
 8     </resource>
 9   </resources>
10 </build>

其中resource的节点就是祈祷这个作用的,resource节点是位于<build>节点下的,把<resource>节点放到该节点下就行了

    5.生成实体类(这个就不用多说了把)

    6.创建dao层的接口,并且声明相对应的方法

    

    7.生成mapper映射文件,起名与接口对应(UserDao.xml)

    

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <!--namespace:该属性值为本配置文件所指向的接口的相对路径-->
 6 <mapper namespace="com.cn.Dao.UserDao">
 7     <!--增加语句-->
 8     <insert id="addUser" parameterType="User"><!--这里id为接口中的方法名,parameterType入参的类型(设置了configuration.xml中的别名这里就是该别名了,否则就是全类名)-->
 9         insert into user values(default ,#{name},#{pwd})/*如果接口的入参是对象,那么这里的name和pwd就是对象中的属性名*/
10     </insert>
11     <!--修改语句-->
12     <update id="updateUser" parameterType="User">
13         update user set name=#{name},pwd=#{pwd} where id=#{id}
14     </update>
15     <!--删除语句-->
16     <delete id="delUser" parameterType="int">
17         delete from user where id=#{id}/*如果接口的入参是基本类型,那么这里的id就是其变量名*/
18     </delete>
19     <!--查询语句-->
20     <select id="getUser" parameterType="int" resultType="User">/*resultType是返回值的类型*/
21         select * from user where id=#{id}
22     </select>
23 </mapper>

    8.创建工厂

 1 package com.cn.util;
 2
 3 import org.apache.ibatis.session.SqlSessionFactory;
 4 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 5
 6 import java.io.InputStream;
 7
 8 public class SqlSessionUtil {
 9     private static SqlSessionFactory factory;
10     public static SqlSessionFactory getFactory(){
11         if (factory==null){
12             SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
13             //将配置文件configuration.xml,也就是最外层的配置Mybatis的xml文件放转换成流
14             InputStream is = SqlSessionUtil.class.getResourceAsStream("/configuration.xml");
15             //获取工厂
16             factory = builder.build(is);
17         }
18         return factory;
19     }
20 }

上边介绍中说过对于同一个数据库我们只需要一个工厂就可以了,所以在这里我们选择是使用单例模式

    9.基于我们初步使用MyBatis,在这里我们还要创建接口的实现类来完成测试

package com.cn.Dao;

import com.cn.entity.User;
import com.cn.util.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;

public class UserDaoImpl implements UserDao {
    @Override
    public void addUser(User user) {
        //获取会话(SqlSessoin)对象
        SqlSession session = SqlSessionUtil.getFactory().openSession();
        try {
            //把入参传入该会话的insert房中,其中“addUser为接口中的方法名,也就是小配置文件中的id属性”
            session.insert("addUser", user);
            //提交事务
            session.commit();
        } catch (Exception e) {
            //如果发生异常,回滚事务
            session.rollback();
        } finally {
            //最后必须要把此次会话关闭
            session.close();
        }
    }

    @Override
    public void delUser(int id) {
        SqlSession session = SqlSessionUtil.getFactory().openSession();
        try {
            session.delete("delUser", id);
            session.commit();

        } catch (Exception e) {
            session.rollback();
        } finally {
            session.close();
        }
    }

    @Override
    public void updateUser(User user) {
        SqlSession session = SqlSessionUtil.getFactory().openSession();
        try {
            session.update("updateUser", user);
            session.commit();
        } catch (Exception e) {
            session.rollback();
        } finally {
            session.close();
        }
    }

    @Override
    public User getUser(int id) {
        SqlSession session = SqlSessionUtil.getFactory().openSession();
        try {
            User getUser = (User)session.selectOne("getUser", id);
            session.commit();
            return getUser;
        } catch (Exception e) {
            session.rollback();
        } finally {
            session.close();
        }
        return null;
    }
}

    10.编写测试方法

    

package com.cn.text;

import com.cn.Dao.UserDao;
import com.cn.Dao.UserDaoImpl;
import com.cn.entity.User;
import org.junit.Test;

public class TextMybatis {
    UserDao ud= new UserDaoImpl();
    @Test
    public void test1(){
        User user=new User(-1,"sjdf","123");
        ud.addUser(user);
    }
    @Test
    public void test2(){
        User user=new User(1,"山间的风","789132");
        ud.updateUser(user);
    }
    @Test
    public void test3(){
        ud.delUser(1);
    }
    @Test
    public void test4(){
        User user = ud.getUser(1);
        System.out.println(user.toString());
    }
}

这里我使用junit单元测试,其中增删改大家自行测试

 

      

      

原文地址:https://www.cnblogs.com/Tiandaochouqin1/p/10260250.html

时间: 2024-10-30 03:27:41

初识框架之MyBatis的相关文章

Java框架篇---Mybatis 入门

一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果.MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素.Map接口和POJOs(普通java对象)到数据库中的记录. 二.MyBatis工作流程 (1)加载配置并初始化 触发条件:加载配置文件 配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个M

【推荐】微服务分布式企业框架 Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis+KafKa

平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成Dubbo服务管控.Zookeeper注册中心.Redis分布式缓存技术.FastDFS分布式文件系统.ActiveMQ异步消息中间件.Nginx负载均衡等分布式技术 使用Maven做项目管理,项目模块化,提高项目的易开发性.扩展性 以Spring Framework为核心容器,Spring MVC为模型视图控制器,MyBatis为数据访问层, Apach

【持久化框架】Mybatis简介与原理

从这篇博文开始我们学习一下Mybatis,希望大家提出宝贵的建议. 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .iBATIS一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架.iBATIS提供的持久层框架包括SQL Maps和Data Access Objec

【持久化框架】Mybatis与Hibernate的详细对比

前言 Mybatis与Hibernate对比 简介 开发速度 数据库移植性 缓存机制对比 两者对比总结 一句话总结 前言 这篇博文我们重点分析一下Mybatis与Hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理. Mybatis [持久化框架]Mybatis简介与原理 [持久化框架]SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载 Hibernate [SSH进阶之路]Hibernate基本原理(一)

推荐】微服务分布式企业框架 Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis+KafKa

平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成Dubbo服务管控.Zookeeper注册中心.Redis分布式缓存技术.FastDFS分布式文件系统.ActiveMQ异步消息中间件.Nginx负载均衡等分布式技术 使用Maven做项目管理,项目模块化,提高项目的易开发性.扩展性 以Spring Framework为核心容器,Spring MVC为模型视图控制器,MyBatis为数据访问层, Apach

【推荐】微服务分布式企业框架 Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis

摘要: 主要定位于互联网企业架构,已内置企业信息化系统的基础功能和高效的代码生成工具,包括:系统权限组件.数据权限组件.数据字典组件.核心工具 组件.视图操作组件.工作流组件.代码生成等.采用分层设计.双重验证.提交数据安全编码.密码加密.访问验证.数据权限验证. 框架简介--主要定位于互联网企业架构,已内置企业信息化系统的基础功能和高效的代码生成工具,包括:系统权限组件.数据权限组件.数据字典组件.核心工具 组件.视图操作组件.工作流组件组件.代码生成等.采用分层设计.双重验证.提交数据安全编

Java框架之Mybatis(一)

一.Mybatis 简介 Mybatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为Mybatis  , 2013年11月迁移到Github , iBATIS一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架.iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)Myb

JavaORM框架之Mybatis篇(Ibatis)

欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝的角度去观察(了解)Java体系.使Java的各种后端技术在你心中模块化:让你在工作中能将Java各个技术了然于心:能够即插即用.本章我们来一起了解ORM(对象关系映射关系)框架之Mybatis(Ibatis). 主流ORM框架有Mybatis和Hibernate,本章我们将对Mybatis的核心要

java后台框架 springmvc mybatis(sqlsever oracle 和 mysql数据库)

获取[下载地址]   QQ: 313596790   [免费支持更新]支持三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]A 代码生成器(开发利器);      增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid