• MyBatis(五)、CRUD操作与重要参数及标签


    1.CRUD操作

    <?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.bittergourd.mybatis.dao.UserDao">
    <!-- 配置查询所有 id是对应接口的方法名 sql语句建议不要写*号 -->
    <select id="findAll" resultType="com.bittergourd.mybatis.domain.User">
            select * from user
        </select>
        <insert id="saveUser"
                parameterType="com.bittergourd.mybatis.domain.User">
            <!-- 返回插入数据 的id  /*这种注释不对  如果不是原生get方法,需要写get后的名称*/ -->
            <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
                select last_insert_id();
            </selectKey>
            insert into user(username,address,sex,birthday)
            values(#{username},#{address},#{sex},#{birthday})
        </insert>
        <update id="updateUser"
                parameterType="com.bittergourd.mybatis.domain.User">
            update user set
            username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id={#id};
        </update>
        <delete id="deleteUser" parameterType="int">
            delete from user where id=#{id} /*只有一个参数时只需要有一个占位符即可*/
        </delete>
    
        <!-- 查询一个-->
        <select id="findById" parameterType="int"
                resultType="com.bittergourd.mybatis.domain.User">
            select * from user where id=#{abc};
        </select>
    
        <!-- 根据名称模糊查询 -->
        <select id="findByName" parameterType="string"
                resultType="com.bittergourd.mybatis.domain.User">
            <!-- 调用方法的时候再提供百分号%% preparestatement-->
            select * from user where username like #{username};
            <!-- 下面也可以 value固定写法 不推荐 因为是再statement上处理-->
            <!-- select * from user where username like '%${value}%'; -->
        </select>
        
        <!-- 聚合函数 -->
        <select id="findTotal" resultType="Int">
            select count(id) from user ;
        </select>
    </mapper>
    

    保存并得到保存后的id

    2.parameterType(输入类型)

    1.传递简单类型

    2.传递pojo对象

    Mybatis使用ognl表达式解析对象字段的值,#{} 或者 ${} 括号中的值为pojo属性的名称

    ognl表达式:

    通过对象的取值方法来获取数据。写法上get省略

    Object Graphic Navigation Language

    对象 图 导航 语言

    • 类中: user.getUsername()
    • OGNL表达式写法: user.username

    通常包装多个对象到一个对象里

    3.resultType(输出结果)

    username数据库字段与userName对象字段可以对应

    因为mysql在windows系统下不区分大小写,在linux系统下严格区分,所以也会报错

    之前进行查询的前提是

    对象的字段与数据库的字段保持一致

    只有这样才能从数据库查出结果封装
    进pojo对象。

    如果对象的字段与数据库的字段不一致
    • 1.让sql语句里面别名为对象的字段
    • 2.使用resultMap让值一一对应
      【开发效率提升,执行效率降低】
       <resultMap id="userMap"
                   type="com.bittergourd.mybatis.domain.User">
            <!-- 主键字段的对应 -->
            <id property="userId" column="id"></id>
            <!-- 非主键字段-->
            <result property="userName" column="username"></result>
        </resultMap>
    
    

    重要标签

    知识点

    • properties的url与resources [注意本地路径也是一种url]
    • typeAliases与package
    • mappers与package

    引出问题:

    答案:
    parameterType都在Mybatis里面注册过了[所以在windows下数据库不区分大小写]

    resultType如果也要这么办可以使用typeAliases与package [实体类别名]

    mapper的package是规定了

        <mappers>
            <!--<mapper resource="com/itheima/dao/IUserDao.xml"></mapper>-->
            <!-- package标签是用于指定dao接口所在的包,当指定了之后就不需要在写mapper以及resource或者class了 -->
            <package name="com.bittergourd.mybatis.dao"></package>
        </mappers>
    
    完整配置:
    <?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属性: 常用的
                用于指定配置文件的位置,是按照类路径的写法来写,并且必须存在于类路径下。
            url属性:
                是要求按照Url的写法来写地址
                URL:Uniform Resource Locator 统一资源定位符。它是可以唯一标识一个资源的位置。
                它的写法:
                    http://localhost:8080/mybatisserver/demo1Servlet
                    协议      主机     端口       URI
    
                URI:Uniform Resource Identifier 统一资源标识符。它是在应用中可以唯一定位一个资源的。
        -->
        <properties url="file:///D:/IdeaProjects/day02_eesy_01mybatisCRUD/src/main/resources/jdbcConfig.properties">
            <!-- <property name="driver" value="com.mysql.jdbc.Driver"></property>
             <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"></property>
             <property name="username" value="root"></property>
             <property name="password" value="1234"></property>-->
        </properties>
    
        <!--使用typeAliases配置别名,它只能配置domain中类的别名 -->
        <typeAliases>
            <!--typeAlias用于配置别名。
            type属性指定的是实体类全限定类名。alias属性指定别名,当指定了别名就不再区分大小写
            <typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>-->
    
            <!-- 用于指定要配置别名的包,当指定之后,该包下的实体类都会注册别名,并且类名就是别名,不再区分大小写-->
            <package name="com.bittergourd.mybatis.domain"></package>
        </typeAliases>
    
        <!--配置环境-->
        <environments default="mysql">
            <!-- 配置mysql的环境-->
            <environment id="mysql">
                <!-- 配置事务 -->
                <transactionManager type="JDBC"></transactionManager>
    
                <!--配置连接池-->
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}"></property>
                    <property name="url" value="${jdbc.url}"></property>
                    <property name="username" value="${jdbc.username}"></property>
                    <property name="password" value="${jdbc.password}"></property>
                </dataSource>
            </environment>
        </environments>
        <!-- 配置映射文件的位置 -->
        <mappers>
            <!--<mapper resource="com/itheima/dao/IUserDao.xml"></mapper>-->
            <!-- package标签是用于指定dao接口所在的包,当指定了之后就不需要在写mapper以及resource或者class了 -->
            <package name="com.bittergourd.mybatis.dao"></package>
        </mappers>
    </configuration>
    

    4.if、where [ 条件查询 ]

        <!--  根据条件查询  -->
        <select id="findUserByCondition"
                resultType="com.bittergourd.mybatis.domain.User"
                parameterType="user">
            select * from user where 1=1
            <if test="username != null">
                and username = #{username}
            </if>
            <if test="sex != null">
                and sex = #{sex}
            </if>
        </select>
    
        <!--  根据条件查询  -->
        <select id="findUserByCondition2"
                resultType="com.bittergourd.mybatis.domain.User"
                parameterType="user">
            select * from user
            <where>
                <if test="username != null">
                    and username = #{username}
                </if>
                <if test="sex != null">
                    and sex = #{sex}
                </if>
            </where>
        </select>
    

    5.in条件查询与sql的复用

        <sql id="defaultSql">
            select * from user
            <!-- mybatis里面的;可写可不写,但是这种写法不能写,因为后面还有语句 -->
        </sql>
        <!--  根据条件查询  -->
        <select id="findUserByCondition3"
                resultType="com.bittergourd.mybatis.domain.User"
                parameterType="queryvo">
    --         select * from user
            <include refid="defaultSql"></include>
            <where>
                <if test="username != null">
                    <foreach collection="ids" open="and id in (" close=")"
                             item="uid" separator=",">
                        <!-- 需要与item保持一致即可 -->
                        #{uid}
                    </foreach>
                </if>
            </where>
        </select>
    
  • 相关阅读:
    爬虫的基本原理、requests模块、模拟登陆网站、爬取视频网站、cookie池和代理池、正向代理和反向代理
    git初识、
    签发token、校验token、多方式登录签发token的实现、自定义认证反爬规则的认证类、admin使用自定义User表:新增用户密码密文、群查接口各种筛选组件数据准备、drf搜索过滤组件、drf排序过滤组件、drf基础分页组件
    频率认证源码分析、自定义频率认证组件、JWT认证、drf-jwt插件
    auth组件的权限六表 自定义User的权限六表 六表之间的数据访问 三大认证整体源码分析 自定义认证类 系统权限类 自定义权限类
    视图类与序列化类传参、二次封装response类、视图家族、GenericAPIView视图基类、mixins视图6大工具类、generic中的工具视图、视图集、GenericAPIView 与 APIView 作为两大继承视图的区别、工具视图集、路由组件(了解)
    修改文件后缀
    python统计自己微信好友并抓取信息
    关于今日头条小程序(字节跳动小程序)相关问题
    关于飞鱼文档不详细无法拉取数据问题
  • 原文地址:https://www.cnblogs.com/biturd/p/12623139.html
Copyright © 2020-2023  润新知