Mybatis

作者: 金石_832e | 来源:发表于2019-05-05 12:58 被阅读0次

    Mybatis是SSM框架中的M。操作持久层,代替dao,hibernate。提供半自动数据查询。


    一.MyBatis的框架原理(掌握)

    Mybatis是一个持久层的架构,是apache下的顶级项目。

    Mybatis原先是托管在googlecode下,再后来是托管在Github上。

    Mybatis让程序员将主要的精力放在sql上,通过Mybatis提供的映射方式,自由灵活生成(半自动,大部分需要程序员编写sql)满足需要sql语句。

    Mybatis可以将向preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活的映射成java对象。(输出映射)


    二.Mybatis框架

    mybatis架构图.jpg

    三.Mybatis简单应用(IDE:idea intellij)

    完成对数据库emp表的查询(查询一条,查询全部,条件查询)

    1.准备jar包(maven上自选版本)

    mybatis-3.4.6.jar(核心依赖)
    commons-logging-1.2.jar(日志)
    log4j-1.2.17.jar(日志)

    2.web-inf下创建lib文件夹,标记为resource root,将项目所需的依赖粘贴进去,并标记为library

    3.在工作空间下创建一个统一存放为配置的文件夹resources,并标记为resource root。

    ①.在resources建立一个连接数据库的db.properties

    jdbc.driverClassName = oracle.jdbc.driver.OracleDriver
    jdbc.url= jdbc:oracle:thin:@127.0.0.1:1521:orcl
    jdbc.username =  scott
    jdbc.password =  tiger
    
    

    ②.在resources建立一个log4j.properties文件,配置开发时运行日志相关内容,必须要知道有这个文件,但是文件内容对于小白来说可以不知道。

    # Global logging configuration
    #在开发环境日志级别要设置为DEBUG、生产环境要设置为INFO或者ERROR
    log4j.rootLogger=DEBUG, stdout
    # Console output...
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
    

    ③在resources建立SqlMapConfig.xml文件,文件名称虽然随意,但是约定熟成,用mybatis操作数据库配置的文件名称都是这个。

    <?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>
        <!--  如果不配置db.properties,下面的连接池可直接定义driver,url,username,password  -->
        <properties resource="db.properties"></properties>
        <!--  包的类型别名,配置完后,该包下所有类的别名都默认是自己的类名  -->
        <typeAliases>
            <package name="com.zpwd.pojo"/>
            <!--    自定义单个包下其中的一个类的别名      -->
            <!--    <typeAlias type="com.zpwd.pojo.Emp" alias="Emp"></typeAlias>      -->
        </typeAliases>
        <!--数据源配置  这块用 Oracle数据库 -->
        <environments default="development">
            <environment id="development">
                <transactionManager type="jdbc"/>
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driverClassName}"/>
                    <property name="url" value="${jdbc.url}"/>
                    <property name="username" value="${jdbc.username}"/>
                    <property name="password" value="${jdbc.password}"/>
                </dataSource>
            </environment>
        </environments>
        <!--  mapper映射器,配置持久层的包(以前是dao,现在叫mapper,就是持久层) -->
        <!--    -->
        <mappers>
            <package name="com.zpwd.mapper"></package>
        </mappers>
    </configuration>
    

    注意点:

    • <properties resource="db.properties"></properties>调用的是db.properties文件,如果没有配置db.properties,可再下方driver,url,username,password 处填写真实的连接池。
    • <mappers>
      <package name="com.zpwd.mapper"></package>
      </mappers>
      指的是SqlMapConfig.xml配置的是哪个包下的文件,使配置文件和包进行连接。
    • <typeAliases>
      <package name="com.zpwd.pojo"/>
      </typeAliases>
      指的是SqlMapConfig.xml配置的是哪个包下mapper.xml文件中出现的类的所在包的路径,使用该种写法后,可以mapper.xml中不需写类名的全称(包名.类名)

    4.创建一个Java bean

    注意:类名称和属性一定要与数据库中的表名称和字段名称一一对应。
    自己补全getter() 、setter()方法(alt+insert)
    java bean代码

    package com.zpwd.pojo;
    
    import java.util.Date;
    
    public class Zpwd {
        private Integer empno;
        private String ename;
        private String job;
        private Integer mgr;
        private Date hiredate;
        private double sal;
        private double comm;
        private Integer deptno;
    }
    

    5.创建一个mapper包,该包可以认为是代替dao的包。

    dao模式:一个接口,一个实现类
    mapper:一个接口,一个对应的.xml文件(接口名和xml文件名称必须完全一致
    接口写的是查询规则,根据人员ID查询一条,查询全部数据,根据条件查询返回雇员信息集合
    !!!该框架下如果形参为两个以上的条件,必须使用对象,换句话说,不接受两个及以上的形参。
    ZpwdMapper.java

    public interface ZpwdMapper {
    
        Zpwd serchByEmpno(Integer empno);
    
        List<Zpwd> serchAll();
    
        List<Zpwd> serchByDeptnoSal(Zpwd zpwd);
    }
    

    ZpwdMapper.xml

    <?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">
    <mapper namespace="com.zpwd.mapper.ZpwdMapper">
        <select id="serchByEmpno" parameterType="Integer" resultType="Zpwd">
            select * from zpwd where empno = #{value}
        </select>
        <!--  返回值为list或set集合时,需要写泛型(与map不同)  -->
        <select id="serchAll" resultType="Zpwd">
            select * from zpwd
        </select>
        <select id="serchByDeptnoSal" parameterType="Zpwd" resultType="Zpwd">
            select * from zpwd where deptno = #{deptno} and sal > #{sal}
        </select>
    </mapper>
    

    注意点:

    • 该框架下如果形参为两个以上的条件,必须使用对象,换句话说,不接受两个及以上的形参
    • 接口名和xml文件名称必须完全一致
      <mapper namespace="com.zpwd.mapper.ZpwdMapper">指向的就是ZpwdMapper.java文件
    • id中的内容是方法名称。
    • parameterType: 是参数类型,当形参是一个的时候,用#{value}代替。当形参是对象时,xml会解析成#{getter(属性)},但是getter去掉,直接写成#属性}
    • resultType:是返回值类型,当返回值是list,set集合时,使用泛型(map除外)

    <?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">

    如果记不住该头部,从别的位置复制过来,要记住修改三个位置。小写mapper,开头大写Mapper,小写mapper这三个要修改好。

    相关文章

      网友评论

          本文标题:Mybatis

          本文链接:https://www.haomeiwen.com/subject/drmcoqtx.html