首页 > 作文

Mybatis如何自动生成sql语句

更新时间:2023-04-04 02:58:45 阅读: 评论:0

目录
mybatis自动生成sql语句mybatis的动态sql语句if标签的使用where标签的使用foreach标签的使用sql语句的简化编写

mybatis自动生成sql语句

创建maven项目,将该配置文件运行即可生成 sql 语句

<?xml version="1.0" encoding="utf-8"?><!doctype generatorconfiguration public "-//mybatis.org//dtd mybatis generator configuration 1.0//en" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><!-- mybatis 自动生成sql代码  --><generatorconfiguration&g西南交通大学分数线t;    <!-- 导入jar包(路径) -->    <classpathentry location="e:\courware\mysql\mysql-connector-java-5.1.26-bin.jar" />    <!-- 设置生成代码的规则 targetruntime 开发环境使用mybatis3的版本 -->    <context id="db2tables" targetruntime="mybatis3">        <plugin type="org.mybatis.generator.plugins.rowboundsplugin"></plugin>        <commentgenerator>            <!-- 这个元素用来去除指定生成的注释中是否包含生成的日期 fal:表示保护 -->            <!-- 如果生成日期,会造成即使修改一个字段,整个实体类所有属性都会发生变化,不利于版本控制,所以设置为true -->            <property name="suppressdate" value="true" />            <!-- 是否去除自动生成的注释 true:是 : fal:否 -->            <property name="suppressallcomments" value="fal" />        </commentgenerator>        <!-- 连接数据库的四要素 -->        <jdbcconnection             driverclass="com.mysql.jdbc.driver"            connectionurl="jdbc:mysql://localhost:3306/ur"             urid="root"            password="root">        </jdbcconnection>        <!-- 该属性用于指定mybatis生成器是否应该强制使用java.math。小数点和数字域的bigdecimal -->           <javatyperesolver>            <property name="forcebigdecimals" value="fal" />        </javatyperesolver>        <!-- 定义实体类 bean -->        <javamodelgenerator targetpackage="en.et.entity" targetproject="src/main/java">            <property name="enablesubpackages" value="true" />            <property name="trimstrings" value="true" />        </javamodelgenerator>        <!-- 接口映射的注解 或者xml文件路径 -->        <sqlmapgenerator targetpackage="cn.et.resource" targetproject="src/main/java">            <property name="enablesubpackages" value="true" />        </sqlmapgenerator>        <!-- 生成的接口所在的位置 type="xml 或者 注解" -->        <javaclientgenerator type="annotatedmapper"            targetpackage="en.et.dao" targetproject="src/main/java">            <property name="enablesubpackages" value="true" />        </javaclientgenerator>        <!-- 告诉mbg 需要生成代码的数据库的表 -->        <table tablename="emp"></table>    </context></generatorconfiguration>

mybatis的动态sql语句

mybatis的动态sql语句主要解决的问题是不同条件sql语句的拼接。

例如:根据用户信息,查询用户列表,当不知道根据的是用户的什么信息时,写出查询的sql语句是有一定困难的,而动态sql语句主要解决的就是此类问题。

if标签的使用

在持久层接口定义方法

    /**     * 根据用户信息,查询用户列表     * @param ur     * @return     */    list<ur> findbyur(ur ur);

编写持久层接口对应的映射文件

 <!-- 根据用户信息,查询用户列表 -->    <lect id="findbyur" resulttype="ur" parametertype="ur">        lect *from ur where 1 = 1        <if test="id != 0">            and id = #{id}        </if>        <if test="urname != null and urname != '' ">            and urname like #{urname}        </if>        <if test="birthday != null">            and birthday = #{birthday}        </if>        <if test="x != null">            and x = #{x}        </if>        <if tes浙江宁波海警学院t="address != null">            and address = #{address}        </if>    </lect>

编写测试方法

  /**     * 根据用户信息,查询用户列表     */    @test    public void testfindbyur()    {        ur ur = new ur();        ur.turname("%王%");        list<ur> urs = urdao.findbyur(ur);        for (ur u : urs)        {            system.out.println(u);        }    }

where标签的使用

为了简化上面 where 1=1 的条件拼接,我们可以采用标签来简化开发,因此修改持久层映射文件

 <!-- 根据用户信息,查询用户列表 -->    <lect id="findbyur" resultty北京咳pe="ur" parametertype="ur">        lect *from ur        <where>            <if test="id != 0">                and id = #{id}            </if>            <if test="urname != null and urname != '' ">                and urname like #{urname}            </if>            <if test="birthday != null">                and birthday = #{birthday}            </if>            <if test="x != null">                and x = #{x}            </if>            <if test="address != null">                and address = #{address}            </if>        </where>    </lect>

foreach标签的使用

froeach是对一个集合进行遍历,通常在构建in条件语句的时候应用

例如:根据一个用户id集合查询用户。

对id集合进行封装,加入到list集合

编写持久层接口方法

  /**     * 根据id集合查询用户     * @param queryur     * @return     */    list<ur> findinids(queryur queryur);

编写持久层接口映射文件

  <!--根据id集合查询用户 -->    <lect id="findinids" resulttype="ur" parametertype="int">       lect *from ur       <where>           <if test="ids != null and ids.size() > 0">                <!-- foreach:用于遍历集合                    collection:代表要遍历的集合                    open:代表语句的开始部分                    clo:代表语句的结束部分        一面五星红旗课文            item:代表需要遍历的集合的每个元素                    sperator:代表分隔符                 -->               <foreach collection="ids" open="id in (" clo=")" item="uid" parator=",">                    #{uid}               </foreach>           </if>       </where>    </lect>

编写测试方法

  /**     * 根据id集合查询用户     */    @test    public void testfindinids()    {        queryur queryur = new queryur();      网络营销策略分析  list<integer> ids = new arraylist<integer>();        ids.add(41);        ids.add(43);        ids.add(45);        queryur.tids(ids);        list<ur> urs = urdao.findinids(queryur);        for (ur ur : urs)        {            system.out.println(ur);        }    }

sql语句的简化编写

在映射文件中,可以将重复的sql语句通过sql标签提取出来,使用include标签引用即可,已达到sql重用的效果。如下所示:

    <!--抽取重复的语句代码片段-->    <sql id="querysql">        lect *from ur    </sql>    <lect id="findall" resulttype="ur" >        <include refid="querysql"></include>    </lect>    <!--根据id查询用户-->    <lect id="findbyid" resulttype="ur" parametertype="int">        <include refid="querysql"></include> where id= #{urid};    </lect>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。

本文发布于:2023-04-04 02:58:43,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/2402cfcad3d5c523e685b234bdaaf18f.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Mybatis如何自动生成sql语句.doc

本文 PDF 下载地址:Mybatis如何自动生成sql语句.pdf

标签:语句   标签   遍历   用户
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图