Spring+Mybatis使用

一.Spring+Mybatis运行机制             

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

      MyBatis参考资料官网:https://mybatis.github.io/mybatis-3/zh/index.html

官网对Mybatis的介绍更加具有权威性:  

1.MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集。MyBatis 使用简单的 XML 或注解来配置和映射基本体,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 

2.MyBatis是iBatis的升级版,用法有很多的相似之处,但是MyBatis进行了重要的改进。例如:

2.1.Mybatis实现了接口绑定,使用更加方便。在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。

2.2.对象关系映射的改进,效率更高

2.3.MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。

MyBatis的框架架构

 

           7264350DC89B4F388AEA87F88BCE9BF7

看到Mybatis的框架图,可以清晰的看到Mybatis的整体核心对象,我更喜欢用自己的图来表达Mybatis的整个的执行流程。如下图所示:

             9018EC4E8462483094430E5B58EB1E51

原理详解:

        MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。

MyBatis的优缺点

优点:

1、简单易学

       mybatis本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

2、灵活

       mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。

3、解除sql与程序代码的耦合

       通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

4、提供映射标签,支持对象与数据库的orm字段关系映射

5、提供对象关系映射标签,支持对象关系组建维护

6、提供xml标签,支持编写动态sql。

缺点:

1、编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。

2、SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。

3、框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。

4、二级缓存机制不佳

 

二.Spring+Mybatis配置

在applicationContext.xml中配置

323E6B4249234319A3F7D5DB4AF3D051

B6DA42D14FBA4829A04CA9B3CA5FEC6D

 

配置信息:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"

    xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd   

   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd   

   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd   

   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">

    <context:component-scan base-package="com.photo" />

    <!-- 数据源 -->

    <!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 

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

        name="url" value="jdbc:mysql://45.78.50.118:3306/We Photo" /> <property name="username" 

        value="root" /> <property name="password" value="lizeping" /> </bean> -->



    <bean

        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

        <property name="locations">

            <list>

                <value>classpath:/config/jdbc.properties</value>

            </list>

        </property>

    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

        destroy-method="close">

        <property name="driverClassName" value="${driver}" />

        <property name="url" value="${url}" />

        <property name="username" value="${username}" />

        <property name="password" value="${password}" />

        <!-- 初始化连接大小 -->

        <property name="initialSize" value="${initialSize}"></property>

        <!-- 连接池最大数量 -->

        <property name="maxActive" value="${maxActive}"></property>

        <!-- 连接池最大空闲 -->

        <property name="maxIdle" value="${maxIdle}"></property>

        <!-- 连接池最小空闲 -->

        <property name="minIdle" value="${minIdle}"></property>

        <!-- 获取连接最大等待时间 -->

        <property name="maxWait" value="${maxWait}"></property>

    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <property name="dataSource" ref="dataSource" />

        <!-- 自动扫描mapping.xml文件 -->

        <property name="mapperLocations" value="classpath:/com/photo/automatic/*.xml"></property>

    </bean>

    <!-- DAO接口所在包名,Spring会自动查找其下的类 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 

        <property name="basePackage" value="com.photo.dao" /> <property name="sqlSessionFactoryBeanName" 

        value="sqlSessionFactory"></property> </bean> -->

    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->

    <bean id="transactionManager"

        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <property name="dataSource" ref="dataSource" />

    </bean>

</beans>

jdbc.properties配置

DA47EC0EBF6C47F098E63D63215E7954

 

配置信息:


driver=com.mysql.jdbc.Driver

url=jdbc:mysql://45.78.50.118:3306/We Photo

username=demao

password=demao

#\u5B9A\u4E49\u521D\u59CB\u8FDE\u63A5\u6570

initialSize=0

#\u5B9A\u4E49\u6700\u5927\u8FDE\u63A5\u6570

maxActive=20

#\u5B9A\u4E49\u6700\u5927\u7A7A\u95F2

maxIdle=20

#\u5B9A\u4E49\u6700\u5C0F\u7A7A\u95F2

minIdle=1

#\u5B9A\u4E49\u6700\u957F\u7B49\u5F85\u65F6\u95F4

maxWait=60000

 

generatorConfig.xml配置(generator mybatis配置)

4CFF59485B5D40D78AA74774997C4747

 

配置信息:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >

<generatorConfiguration >

   <classPathEntry location="E:\lzp\lib\mysql-connector-java-5.1.9.jar"/> 

    <context id="context1" >

    <commentGenerator>

            <property name="suppressAllComments" value="false" />

            <property name="suppressDate" value="true" />

    </commentGenerator>

    <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://45.78.50.118:3306/We Photo" userId="root" password="lizeping" />



    <javaModelGenerator targetPackage="com.photo.model" targetProject="Photo\src" />

    <sqlMapGenerator targetPackage="com.photo.automatic" targetProject="Photo\src" />

    <javaClientGenerator targetPackage="com.photo.automatic" targetProject="Photo\src" type="XMLMAPPER" />

    <table schema="PHOTO" tableName="PHOTO" ></table>

    <table schema="PHOTO_ALBUM" tableName="PHOTO_ALBUM" ></table>

    <table schema="PHOTO_ALBUM_TIMER" tableName="PHOTO_ALBUM_TIMER" ></table>

  </context>

</generatorConfiguration>

 

转载于:https://my.oschina.net/zepinglidoc/blog/750884

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值