zoukankan      html  css  js  c++  java
  • Mybatis框架第一天

    pojo:不按mvc分层,只是java bean有一些属性,还有get set方法
    domain:不按mvc分层,只是java bean有一些属性,还有get set方法
    po:用在持久层,还可以再增加或者修改的时候,从页面直接传入action中,它里面的java bean 类名等于表名,
     属性名等于表的字段名,还有对应的get set方法
    vo: view object表现层对象,主要用于在高级查询中从页面接收传过来的各种参数.好处是扩展性强
    bo: 用在servie层,现在企业基本不用.
    这些po,vo, bo,pojo可以用在各种层面吗
    可以,也就是po用在表现层,vo用在持久层不报错,因为都是普通的java bean没有语法错误.
    但是在企业最好不要混着用,因为这些都是设计的原则,混着用比较乱.不利于代码维护.

    1.核心配置文件SqlMapConfig.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>
        
            <!--引入配置文件-->
        <properties resource="db.properties"></properties>
        
        <typeAliases>         
            <!-- 使用包扫描的方式批量定义别名 
            定以后别名等于类名,不区分大小写,但是建议按照java命名规则来,首字母小写,以后每个单词的首字母大写
            -->
            <package name="cn.itheima.pojo"/>
        </typeAliases>
    
        <!-- 和spring整合后 environments配置将废除-->
        <environments default="development">
            <environment id="development">
            <!-- 使用jdbc事务管理-->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
            </environment>
        </environments>
        
        <mappers>
            <mapper resource="User.xml"/>
            
            <!-- 
            使用class属性引入接口的全路径名称:
            使用规则:
                1. 接口的名称和映射文件名称除扩展名外要完全相同
                2. 接口和映射文件要放在同一个目录下
             -->
    <!--         <mapper class="cn.itheima.mapper.UserMapper"/> -->
            
            <!-- 使用包扫描的方式批量引入Mapper接口 
                    使用规则:
                    1. 接口的名称和映射文件名称除扩展名外要完全相同
                    2. 接口和映射文件要放在同一个目录下
            -->
            <package name="cn.itheima.mapper"/>
        </mappers>
    </configuration>

    2:数据库配置文件db.properties:注意用户名和密码不能有空客,不然会报错

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
    jdbc.username=root
    jdbc.password=admin

    3:持久化对象的配置文件:类名.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">
    <!-- namespace:命名空间,做sql隔离 -->
    <mapper namespace="test">
    
        <!-- 
        id:sql语句唯一标识
        parameterType:指定传入参数类型
        resultType:返回结果集类型
        #{}占位符:起到占位作用,如果传入的是基本类型(string,long,double,int,boolean,float等),那么#{}中的变量名称可以随意写.
         -->
        <select id="findUserById" parameterType="java.lang.Integer" resultType="cn.itheima.pojo.User">
            select * from user where id=#{id}
        </select>
        
        <!-- 
        如果返回结果为集合,可以调用selectList方法,这个方法返回的结果就是一个集合,所以映射文件中应该配置成集合泛型的类型
        ${}拼接符:字符串原样拼接,如果传入的参数是基本类型(string,long,double,int,boolean,float等),那么${}中的变量名称必须是value
        注意:拼接符有sql注入的风险,所以慎重使用
         -->
        <select id="findUserByUserName" parameterType="java.lang.String" resultType="cn.itheima.pojo.User">
            select * from user where username like '%${value}%'
        </select>
        
        <!-- 
        #{}:如果传入的是pojo类型,那么#{}中的变量名称必须是pojo中对应的属性.属性.属性.....
        如果要返回数据库自增主键:可以使用select LAST_INSERT_ID()
         -->
        <insert id="insertUser" parameterType="cn.itheima.pojo.User" >
            <!-- 执行 select LAST_INSERT_ID()数据库函数,返回自增的主键
            keyProperty:将返回的主键放入传入参数的Id中保存.
            order:当前函数相对于insert语句的执行顺序,在insert前执行是before,在insert后执行是AFTER
            resultType:id的类型,也就是keyproperties中属性的类型
            -->
            <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
                select LAST_INSERT_ID()
            </selectKey>
            insert into user (username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
        </insert>
        
        <delete id="delUserById" parameterType="int">
            delete from user where id=#{id}
        </delete>
        
        <update id="updateUserById" parameterType="cn.itheima.pojo.User">
            update user set username=#{username} where id=#{id}
        </update>
    </mapper>
    1. mybatis是一个持久层框架, 作用是跟数据库交互完成增删改查
    2.原生Dao实现(需要接口和实现类)
    4.动态代理方式(只需要接口)
     mapper接口代理实现编写规则:
     1) 映射文件中namespace要等于接口的全路径名称
     2) 映射文件中sql语句id要等于接口的方法名称
     3) 映射文件中传入参数类型要等于接口方法的传入参数类型
     4) 映射文件中返回结果集类型要等于接口方法的返回值类型
    5. #{}占位符:占位
     如果传入的是基本类型,那么#{}中的变量名称可以随意写
     如果传入的参数是pojo类型,那么#{}中的变量名称必须是pojo中的属性.属性.属性...
    6. ${}拼接符:字符串原样拼接
     如果传入的是基本类型,那么${}中的变量名必须是value
     如果传入的参数是pojo类型,那么${}中的变量名称必须是pojo中的属性.属性.属性...
     注意:使用拼接符有可能造成sql注入,在页面输入的时候可以加入校验,不可输入sql关键字,不可输入空格
    7. 映射文件:
     1)传入参数类型通过parameterType属性指定
     2)返回结果集类型通过resultType属性指定
    8. hibernate和mybatis区别:
     hibernate:它是一个标准的orm框架,比较重量级,学习成本高.
      优点:高度封装,使用起来不用写sql,开发的时候,会减低开发周期.
      缺点:sql语句无法优化
      应用场景:oa(办公自动化系统), erp(企业的流程系统)等,还有一些政府项目,
       总的来说,在用于量不大,并发量小的时候使用.
     mybatis:它不是一个orm框架, 它是对jdbc的轻量级封装, 学习成本低,比较简单
      有点:学习成本低, sql语句可以优化, 执行效率高,速度快
      缺点:编码量较大,会拖慢开发周期
      应用场景: 互联网项目,比如电商,P2p等
           总的来说是用户量较大,并发高的项目.
  • 相关阅读:
    Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc
    Atitit. C#.net clr 2.0  4.0新特性
    Atitit. C#.net clr 2.0  4.0新特性
    Atitit.通过null 参数 反射  动态反推方法调用
    Atitit.通过null 参数 反射  动态反推方法调用
    Atitit..net clr il指令集 以及指令分类  与指令详细说明
    Atitit..net clr il指令集 以及指令分类  与指令详细说明
    Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL
    Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL
    Atitit.跨语言反射api 兼容性提升与增强 java c#。Net  php  js
  • 原文地址:https://www.cnblogs.com/133261c/p/9477839.html
Copyright © 2011-2022 走看看