亚洲必赢app有关MyBatis

初学时,感觉有些看头,最终发掘,还是有点欠缺,MyBatis对数据库须求很严俊,只好八个数据库,不能够随意移植,对开荒人士的编码技术有极高的须求。。。

有关MyBatis的搭建能够远瞻“MyBatis的配置”,MyBatis是对JDBC底层代码的包装,关于Oracle、MySQL、SqlServer的分页能够查看Oracle、SqlServer、MySQL的分页

 

MyBatis自带分页

至于分页,小编首先使用MyBatis自带的分页方法:

 sqlSession.selectList("sql 的 id",sql 参数 ,RowBounds 对象 

比如:

RowBounds bound = new RowBounds(2,3);
SqlSession session = MyBatisUtil.getSession();
List<Dept> list = session.selectList("findAll", null, bound);

那样大家得以阅览第二页的三的数目,可是那只是外部的。我们经过在MyBatis中主配置文件中拉开日志输出,那样我们就足以在调控新竹看看日志景况:

<settings>
   <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

完全的MyBatis主配置文件如下:

亚洲必赢app 1亚洲必赢app 2

<?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE configuration             PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"            "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>

    <!--引入数据库信息文件-->
    <properties resource="db.properties" />

    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <environments default="environment">
        <environment id="environment">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${driverClassName}" />
                <property name="url" value="${url}"/>
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
    <!-- 加载SQL定义文件 -->
    <mappers>
        <mapper resource="cn/test/sql/DeptMapper.xml" />
    </mappers>
</configuration> 

sqlmap-config.xml

上边是运作的日记截图:

亚洲必赢app 3

观察那么些日志截图,大家得以见见结果的数量是常规的,不过总共查询的数目有标题。那是利用MyBatis自带的分页的坏处。

 

亚洲必赢app 4

使用pageHelper分页

行使pageHelper的插件,大家须要下载pageHelper分页工具包。要求下载 pagehelper-5.0.0.jar 和 jsqlparser-0.9.5.jar
。笔者下载的是五.0.0的pagehelper,作者须要留意pagehelper5.0.0以上和以下的安排完全两样,pagehelper下载

在主配置文件中增进:

<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!-- 4.0.0以后版本可以不设置该参数 -->
        <!--<property name="dialect" value="mysql"/>-->
        <!-- 该参数默认为false -->
        <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
        <!-- 和startPage中的pageNum效果一样-->
        <property name="offsetAsPageNum" value="true"/>
        <!-- 该参数默认为false -->
        <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
        <property name="rowBoundsWithCount" value="true"/>
        <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
        <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
        <property name="pageSizeZero" value="true"/>
        <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
        <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
        <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
        <property name="reasonable" value="true"/>
        <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
        <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
        <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
        <!-- 不理解该含义的前提下,不要随便复制该配置 -->
        <!--<property name="params" value="pageNum=start;pageSize=limit;"/>-->
        <!-- 支持通过Mapper接口参数来传递分页参数 -->
        <!--<property name="supportMethodsArguments" value="true"/>-->
        <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
        <!--<property name="returnPageInfo" value="check"/>-->
    </plugin>
</plugins>

完全的主配置文件如下:

亚洲必赢app 5亚洲必赢app 6

<?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE configuration             PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"            "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">

<configuration>

    <!--引入数据库信息文件-->
    <properties resource="db.properties" />

    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!-- 4.0.0以后版本可以不设置该参数 -->
        <!--<property name="dialect" value="mysql"/>-->
        <!-- 该参数默认为false -->
        <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
        <!-- 和startPage中的pageNum效果一样-->
        <property name="offsetAsPageNum" value="true"/>
        <!-- 该参数默认为false -->
        <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
        <property name="rowBoundsWithCount" value="true"/>
        <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
        <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
        <property name="pageSizeZero" value="true"/>
        <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
        <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
        <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
        <property name="reasonable" value="true"/>
        <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
        <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
        <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
        <!-- 不理解该含义的前提下,不要随便复制该配置 -->
        <!--<property name="params" value="pageNum=start;pageSize=limit;"/>-->
        <!-- 支持通过Mapper接口参数来传递分页参数 -->
        <!--<property name="supportMethodsArguments" value="true"/>-->
        <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
        <!--<property name="returnPageInfo" value="check"/>-->
    </plugin>
</plugins>

    <environments default="environment">
        <environment id="environment">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${driverClassName}" />
                <property name="url" value="${url}"/>
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
    <!-- 加载SQL定义文件 -->
    <mappers>
        <mapper resource="cn/test/sql/DeptMapper.xml" />
    </mappers>

</configuration> 

sqlmap-config.xml

接下来经过如下的查询语句:

SqlSession session = MyBatisUtil.getSession();
          Page<Object> page PageHelper.startPage(2, 4);
          //获得总记录数:
          //long all=page.getTotal();

          DeptMapper deptDao=session.getMapper(DeptMapper.class);

          //查询所有信息
           List<Dept> list=deptDao.findAll();
           for(Dept dept:list){
               System.out.println(dept);
           }

接下来看一看日志截图:

亚洲必赢app 7

 

 

框架:

1、Spring 框架

  • 依傍注入容器 / AOP完结
  • 申明式事务
  • 简化Java EE应用
  • 黏合剂,将我们组装到3只

2、Spring MVC框架

  • 协会最清楚的MVC Model2达成
  • 惊人可配置,扶助各种视图工夫
  • 定制化开采

3、Struts框架

  • MVC设计形式的落到实处
  • 拦截器
  • 可变和可选取的竹签

4、MyBatis 框架

  • 半自动化的O君越M达成
  • DAO层
  • 动态SQL
  • 精美灵活、简单易学

5、Hibernate 框架

  • O奥迪Q7M,简化数据库操作
  • DAO层

 

MyBatis框架: 非凡的数额长久层框架,在实体类/持久类与数量库表之间创建映射关系,是一种半O库罗德M的落到实处。

优点:

  1. 相持简便易行
  2. SQL语句写在XML文件里,便于统一修改管理。
  3. 提供映射标签,援救对象与数码库表的照耀。

缺点:

  1. sql职业量比相当大 
  2. sql重视于数据库,导致数据库移植性差。 
  3. 由于xml里标签id必须唯壹,导致DAO中方法不协理艺术重载。

O翼虎M 简单介绍:O翼虎M(Object/Relational
Mapping)即对象/关系映射,是一种多少持久化技艺。

特色: 基于SQL语法,轻巧易学能掌握底层封装过程SQL语句封装在安排文件中,便于统一管理与维护,下降程序的耦合度
方便程序代码调试

MyBatis 情形搭建:

下载需求的jar文件

  • 部署jar包
  • 编辑MySatis宗旨配置文件
  • 创造实体类
  • 创建DAO接口
  • 始建SQL映射文件
  • 编写测试类
  • 读取焦点配置文件mybatis-config.xml
  • 创制SqlSessionFactory对象,读取配置文件
  • 成立SqlSession对象 调用mapper文件进行多少操作

MyBatis信赖包中文件表达:

  • asm-三.三.一.jar:操作java字节码的类库
  • cglib-二.二.二.jar:用来动态集成java类或促成接口
  • commons-logging-1.一.一.jar:通用日志管理
  • javassist-三.壹柒.1-GA.jar:剖析、编辑和开创java字节码的类库
  • log4j-1.二.壹7.jar:日志系统
  • slf④j-api-1.柒.5.jar:日志系统的包裹,对外提系统集结的API接口
  • slf四j-log4j1二-一.七.5.jar:slf肆j对log肆j的呼应驱动,实现slf肆j绑定log四j

MyBatis-config.xml文件常用成分:

  • configuration:配置文件的根成分节点
  • properties:通过resource属性从表面钦命properties属性文件,该属性文件讲述数据库连接的相关布署(Driver,UPAJEROL,用户名,密码)在resources目录下
  • settings:设置MyBatis运行中的一些表现
  • environments:表示配置MyBatis的多套运营条件,将SQL映射到分歧的数据库上,能够配备多少个,不过必须钦点1个私下认可运维情状
  • environment:配置MyBatis的1套运维条件,需点名运维景况ID,事务管理,数据源配置
  • mappers:找SQL映射文件
  • mapper:mappers的子成分节点,具体钦点sql映射文件的路子

瞩目:成分节点有各种,不按梯次报错

Mybatis三大主导目的:

  1. SqlSessionFactoryBuilder可被JVM虚拟机所实例化,使用与销毁,但SqlSessionFactoryBuilder在创制SqlSessionFactory后便没有供给存在了,既无需天天保持该指标的动静,所以能够在措施内部宣称SqlSessionFactoryBuilder对象创制SqlSessionFactory.
  2. SqlSessionFactory作为由SqlSessionFactory创建的对象,其实例在运营时期应该直接存在,无需每一回调用数据库时举办创办,故使用的它的特等办法是选取单例形式。
  3. SqlSession对象由SqlSessionFactory对象创造。每一种线程都应当由2个和谐的SqlSession实例,该实例不可共享且线程是不安全的,所以相对不要在Servlet中表明对象的实例变量。又因为Servlet是单例的,注明成实例变量会产生线程的不安全,也断然无法将SqlSession放在一个类的静态字段以致实例字段中,还不得以将SqlSession实例对象放在其余类型的田间管理中,如Servlet的HttpSession会话中。末了务必在finally语句中对SqlSession进行停业。

SqlSessionFactoryBuilder的作用:

  • SqlSessionFactoryBuilder担任创设SqlSessionFactory,并且提供多个build()方法的重载

天性: 用过即丢,最好范围存在于艺术体内,局地变量

SqlSessionFactory:

  • SqlSessionFactory是每一个MyBatis应用的着力
  • 作用:创造SqlSession实例(用openSession()方法获得)
  • 生命周期: 向来留存,不建议频仍创制,最好成效域(Application)

SqlSession:(sqlSession.selectList()、sqlSession.getMapper(Mapper.class)调用接口方法)

  • 用于实践漫长化操作对象,类似于JDBC中的Connection
    包括了试行SQL所需的具有办法 对应一回数据库会话,会话截止必须关闭
    线程等级,不能够共享

留意:(在SqlSession里能够施行多次SQL语句,但倘若关闭了SqlSession就必要重新创立)

SQL映射文件(一流成分):

  • mapper:映射文件的根成分节点,唯有贰性情质(namespace命名空间)
  1. 用来区分区别的mapper,全局唯一
  2. 绑定DAO接口,面向接口编程(namespace命名必须跟接口同名)
  • cache:配置给定命名空间的缓存
  • cache-ref:从其余命名空间引用缓存配置
  • resultMap:用来描述数据库结果集和目的的应和关系
  • sql:能够选拔的SQL块,也得以被别的语句引用
  • insert:映射插入语句
  • update:映射更新语句
  • delete:映射删除语句
  • select:映射查询语句

parameterType:

  • 基本功数据类型
    int、String、Date等
  • 唯其如此传入多少个,通过#{参数名}就能够获得传入的值

  • 复杂数据类型
    Java实体类、Map等

  • 通过#{属性名}或者#{map的keyName}就能够获得传入值

resultType :直接表示回去类型(手动映射)

  • 骨干数据类型
  • 复杂数据类型

resultMap :对表面resultMap的引用(自动映射)

  • 使用场景: 数据库字段音信与目的属性不壹致
    复杂的一块查询,自由支配映射结果

只顾:(贰者不能而且存在,本质上都以Map数据结构)

resultMap的主干配置:

  • id:resultMap的无与伦比标记
  • type:表示该resultMap的映射结果类型

association:一对多

  • javaType:完整java类名也许小名
  • property:映射到2个HashMap,应该钦点javaType,确定保障所需行为
  • peoperty:映射到数据库列的实体对象的习性

association的子成分:

  • id
  • result:
  • property:映射数据库列的实体对象的性格
  • column:数据库列名或别称

collection:(集合)

  • ofType:完整java类名可能外号,即集合所包含的花色
  • property:映射数据库的实业对象的本性

有关代码:

<resultMap id=“userMap” type=“User”>

  <id property=“id” column=“id”/>

  <result property=“usercode” column=“usercode”/>

  <!– 壹对多,多对多的关联 –>  

  <!– property: 指的是集合属性的值, ofType:指的是聚众兰月素的门类
–>

  <collection ofType=“Role” property=“role”>

    <id property=“id” column=“id”/>

    <resut property=“rolecode” column=“rolecode”/>

  </collection>

<resultMap>

 

resultMap自动映射等第:

  • NONE:禁止自动相配
  • PARTIAL(暗中同意):自动相称全部属性,有在那之中嵌套(association、collection)的除了这么些之外
  • FULL:自动相称全部

 

MyBatis缓存:

  • 一级缓存
  • 二级缓存

  <settings>

         <setting name = “cacheEnabled” value=”true”/>

  </settings>

  <cache eviction=”FIFO” flushInterval=”60000″

    size=”512″ readOnly=”true”/>

  <select id=”selectAll” resultType=”Emp” useCache=”true”>

 

动态SQL元素:

if:利用if完毕轻巧的口径采取

<select id=”listProduct” resultType=”Product”>

    select * from product

  <if test=”name!=null”>

    where name like concat(‘%’,#{name},’%’)

  </if>

</select>

  假如if里的test 表明式不创建 
那么就不会大增if里的代码

 

choose(when,otherwise):相当于java中switch语句,通常与when和otherwise搭配

提供了任何条件,就开始展览标准查询,不然就应用id>1以此标准。
依次判别 when 假如 其中八个when制造 就结束。 假若when未有3个起家
就施行otherwise

 

where:简化SQL语句中where的原则推断

<select id=”listProduct” resultType=”Product”>

    select * from product

  <where>

    <if test=”name!=null”>

      and name like concat(‘%’,#{name},’%’)

    </if>

    <if test=”price!=null and price!=0″>

      and price > #{price}

    </if>

  </where>

</select>

where标签会进行自动判定假使其它条件都不创制,那么就在sql语句里就不会油不过生where关键字
借使有其余条件构建,会活动去掉多出来的 and 或然 or。

 

set:化解动态更新语句

trim:能够灵活地去掉多余的关键字

foreach:迭代3个集合,常常用于in条件

 

trim属性

  • prefix:前缀,如where
  • suffix:后缀
  • prefixOverrides:对于trim包罗内容的首部实行点名内容的马虎
  • suffixOverrides:对于trim包涵内容的开始和结果进行点名内容的大体

foreach基本属性:

  •   item:表示集结中每贰个要素举办迭代时的别称
  •   index:内定二个称呼,用于表示迭代进度中,每趟迭代到的岗位
  •   open:表示该语句以什么样开端
  •   separator:表示在每一次举行迭代里边以什么样符号作为分隔符(即in条件语句,必须以“,”作分隔符)
  •   close:表示语句以什么甘休;

collection:最首要并最轻松失误的品质,

  属性值:

  •   若入参为单参数类型是List,collection属性值为List;
  •   若入参为单参数且参数类型是数组,collection属性值为array
  •   若入参参数为多参数:封装为Map

choose(when、otherwise):

相当于(switch)代码:

<choose>

  <when test =”条件1″> …</when>

  <when test =”条件2″> …</when>

  <when test =”条件3″> …</when>

  …

  <otherwise>…</otherwise>

</choose>

分页:
开端地点下标=(页码-壹)*页面体积

 

增加和删除改查关键代码:

添加:insert into 表名(列名) values()

删:delete from 表名 where id=。。。。

改:update 表名 set 列名=#{},列名=#{} where id=。。。。

查:select * from 表名 inner join 表名 on x=x where group by order by
limit 起始行,行数

 

Mybatis-config.xml  关键代码:

<configuration>

   <properties resource=“database.properties”/>

  <settings>

    <setting name=“logImpl” value=“LOG4J”/>

   </settings>

  <environments default=“a”>

    <environment id=“a”>

    <property name==“driver” value”${driver}”/>

    <property name==“url” value”${url}”/>

    <property name==“username” value”root”/>

    <property name==“password” value”ok”/>

    </environment>

  </environments>

   <mappers>

  <mapper resource=“cn/dao/UserMapper.xml”/></mappers>

</configuration>

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图