zoukankan      html  css  js  c++  java
  • mybatis

    Mapper动态代理方式  

    注册  SqlMapConfig.xml

        <mappers>
            <mapper resource="com.zym.mapper/User.xml"></mapper>
    
        </mappers>

    User.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="com.zym.mapper.User">
        <!-- id:statement的id 或者叫做sql的id-->
        <!-- parameterType:声明输入参数的类型 -->
        <!-- resultType:声明输出结果的类型,应该填写pojo的全路径 -->
        <!-- #{}:输入参数的占位符,相当于jdbc的? -->
        <select id="queryUserById" parameterType="int" resultType="com.zym.pojo.User">
            SELECT * FROM `User` WHERE id  = #{id}
        </select>
    
        <!--<insert id="addUser" parameterType="com.zym.pojo.User" >-->
    <!--&#45;&#45;     添加返回主键,属性说明-->
            <!--&lt;!&ndash; selectKey 标签实现主键返回 &ndash;&gt;-->
            <!--&lt;!&ndash; keyColumn:主键对应的表中的哪一列 &ndash;&gt;-->
            <!--&lt;!&ndash; keyProperty:主键对应的pojo中的哪一个属性 &ndash;&gt;-->
            <!--&lt;!&ndash; order:设置在执行insert语句前执行查询id的sql,孩纸在执行insert语句之后执行查询id的sql &ndash;&gt;-->
            <!--&lt;!&ndash; resultType:设置返回的id的类型 &ndash;&gt;-->
    
            <!--<selectKey resultType="int" keyColumn="id" order="AFTER" keyProperty="id">-->
              <!--select last_insert_id()-->
          <!--</selectKey>-->
    
            <!--insert into User(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})-->
    
        <!--</insert>-->
    
        <!--<select id="selectAll" resultType="com.zym.pojo.User">-->
            <!--select * from User ;-->
        <!--</select>-->
    </mapper>

    User接口

    package com.zym.mapper;
    
    import java.util.List;
    
    public interface User {
    
        com.zym.pojo.User queryUserById(int id);
    
        List<com.zym.pojo.User> queryUserByUsername(String username);
    
        void saveUser(com.zym.pojo.User user);
    }

    注意红色的地方,需要保持一致

    SqlMapConfig.xml配置文件

    qlMapConfig.xml中配置的内容和顺序如下:
    
    properties(属性)
    settings(全局配置参数)
    typeAliases(类型别名)
    typeHandlers(类型处理器)
    objectFactory(对象工厂)
    plugins(插件)
    environments(环境集合属性对象)
    environment(环境子属性对象)
    transactionManager(事务管理)
    dataSource(数据源)
    mappers(映射器)

    properties

    在SqlMapConfig.xml同级别的源文件夹下创建db.properties文件

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

    之后可以在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>
        <!-- 是用resource属性加载外部配置文件 -->
        <properties resource="db.properties">
            <!-- 在properties内部用property定义属性 -->
            <!-- 如果外部配置文件有该属性,则内部定义属性被外部属性覆盖 -->
            <property name="jdbc.username" value="root123" />
            <property name="jdbc.password" value="root123" />
        </properties>

    自定义别名

        <typeAliases>
            <!-- 单个别名定义 -->
            <typeAlias alias="user" type="com.jy.pojo.User" />
            <!-- 批量别名定义,扫描整个包下的类,别名为类名(大小写不敏感) -->
            <package name="com.jy.pojo" />
            <package name="其它包" />
        </typeAliases>

    定义之后type就可以写成 user了

    mappers

    注册指定包下的所有mapper接口

    如:<package name="com.jy.mapper"/>

    注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。

    动态sql

    if条件

    <!-- 根据条件查询用户 -->
    <select id="queryUserByWhere" parameterType="user" resultType="user">
        SELECT id, username, birthday, sex, address FROM `user`
        WHERE 1=1
        <if test="sex != null and sex != ''">
            AND sex = #{sex}
        </if>
        <if test="username != null and username != ''">
            AND username LIKE
            '%${username}%'
        </if>
    </select>

    Where标签

    注意字符串类型的数据需要要做不等于空字符串校验。

    <!-- 根据条件查询用户 -->
    <select id="queryUserByWhere" parameterType="user" resultType="user">
        SELECT id, username, birthday, sex, address FROM `user`
    <!-- where标签可以自动添加where,同时处理sql语句中第一个and关键字 -->
        <where>
            <if test="sex != null">
                AND sex = #{sex}
            </if>
            <if test="username != null and username != ''">
                AND username LIKE
                '%${username}%'
            </if>
        </where>
    </select>

    Sql片段

    Sql中可将重复的sql提取出来,使用时用include引用即可,最终达到sql重用的目的。
    
    把上面例子中的id, username, birthday, sex, address提取出来,作为sql片段,如下:
    <!-- 根据条件查询用户 -->
    <select id="queryUserByWhere" parameterType="user" resultType="user">
        <!-- SELECT id, username, birthday, sex, address FROM `user` -->
        <!-- 使用include标签加载sql片段;refid是sql片段id -->
        SELECT <include refid="userFields" /> FROM `user`
        <!-- where标签可以自动添加where关键字,同时处理sql语句中第一个and关键字 -->
        <where>
            <if test="sex != null">
                AND sex = #{sex}
            </if>
            <if test="username != null and username != ''">
                AND username LIKE
                '%${username}%'
            </if>
        </where>
    </select>
    
    <!-- 声明sql片段 -->
    <sql id="userFields">
        id, username, birthday, sex, address
    </sql>

    foreach

    user.xml

     <select id="queryUserByList" parameterType="int" resultType="com.zym.pojo.User">
            <!--select * from `User` where id in-->
            <!--<foreach collection="list" index="index" item="item" open="(" separator="," close=")">-->
                <!--#{item}-->
            <!--</foreach>-->
    
            select * from `User`
            <where>
                <foreach collection="list" open="id in (" close=")" separator="," item="ddd">
                    #{ddd}
                </foreach>
    
            </where>
            
    
    
        </select>

    mapper.user

    public List<com.zym.pojo.User> queryUserByList(List<Integer> ids);

    测试

    User mapper = sqlSession.getMapper(User.class);
            List<Integer> ids = new ArrayList<Integer>();
            ids.add(1);
            ids.add(2);
            ids.add(3);
            System.out.println(ids);
            List<com.zym.pojo.User> user = mapper.queryUserByList(ids);
            System.out.println(user);

  • 相关阅读:
    DOSD用scratch的方式训练通用目标检测,性能很高
    caffemodel模型
    NetScope脱机(localhost)使用[转】
    class前置声明
    const函数
    CUDA开发
    caffe2学习
    faster rcnn讲解很细
    控制台输出覆盖当前行显示
    UA池 代理IP池 scrapy的下载中间件
  • 原文地址:https://www.cnblogs.com/taozizainali/p/11153116.html
Copyright © 2011-2022 走看看