MyBatis框架学习整理PART 2

本文详细介绍MyBatis框架中的高级特性,包括模糊查询、高级映射、存储函数的使用、注解配置、动态SQL、SQL片段复用及缓存机制等。通过具体示例帮助读者理解并掌握这些特性。

9.模糊查询

需要注意的是:参数传入以后,不能正常的代入到SQL语句中,如何解决这个问题,有三种方法

1. 参数传入之前在数据的前后手动 添加 % 号.  (s ="%"+s+"%";)

2. 在SQL语句中使用concat方法连接 % 号。 #{tag}是点位符,会用传入的参数进行填充

<!-- 模糊查询-->

<select id="findMoHu" parameterType="String"resultMap="gradeMap">

       select * from grade where gradeName likeconcat("%",concat(#{tag},'%'))

</select>

3. 用bind标签来实现

<!-- 模糊查询-->

<select id="findMoHu" parameterType="String"resultMap="gradeMap">

     <!-- _parameter :是系统中的关键字,表示传入的参数  -->

     <bind name="b"value="'%' + _parameter + '%'" />

         select * from grade where gradeName like#{b} 

</select>


10.高级映射

在学生表中体现年级对象

<resultMap type="Student" id="studentResult">

<!-- 实体的属性名    表的字段名 -->

<id column="studentNo" property="studentNo"/>

<result property="name" column="name"/>

<result property="sex" column="sex"/>

<result property="phone" column="phone"/>

<result property="birthday"column="birthday"/>

<result property="email" column="email"/>

<result property="address" column="address"/>

<!-- result property="grade" column="gid"/>-->

<!-- column:学员表中的外键列,select:是执行查询的方法,并返回年级对象存储在property属性中 -->

<!-- 多对一  -->

<association property="grade" column="gid"

       select="com.etc.dao.GradeDao.findById"></association>

</resultMap>

 

 

获取一个年级对象同时,想查看这个年级中有哪些学生?  一对多的使用

<!-- extends="gradeMap":表示继承另一个resultMap,与Java中的继承原理一样 -->

<resultMap type="Grade" id="gradeResult"extends="gradeMap">

<!-- 学生对象如何处理-->

<!-- property:存储返回的集合  column:表示主键 select:根据主键年级编号去查询属于此年级的学员列表 -->

<collection property="students"

          column="id"select="com.etc.dao.StudentDao.findByGid"></collection>

</resultMap>

 

<!--  parameterType:传入的参数类型   resultType:返回的实体类型的别名-->

<select id="findById" parameterType="int"resultMap="gradeResult">

     select * from grade where id =#{id}

</select>


11.使用存储函数

1.  无参的存储过程如何执行。

     A. 映射文件的配置

<!--statementType:表示SQL语句的类型  STATEMENT表示执行普通的SQL语句   CALLABLE表示执行存储过程 -->

<selectid="findPro" resultMap="studentResult"statementType="CALLABLE">

                   {call p_student()}

</select>

     B. 调用没有任何区别。

2. 输入参数的存储过程的执行。

A. 映射文件的配置

<!-- 带输入参数的存储过程 -->

<parameterMap type="Map" id="p1">

<!-- 定义参数 property:过程中的参数名  mode="IN"参数的类型 out inout

         sex值源自于Map集合中的键,与过程中的参数名没有关系。

      -->

<parameter property="sex" mode="IN"jdbcType="VARCHAR"/>

</parameterMap>

<select id="findBySex" parameterMap="p1"resultMap="studentResult" statementType="CALLABLE">

<!-- ? 表示参数的占位符   s -->

      {call p_studentBySex(?)}

</select>

B.数据访问接口的方法

     //执行带输入参数的过程

     public List<Student>findBySex(Map map);

C.调用

    Map<String,Object> map =new HashMap<String,Object>();

    map.put("sex", "女");

    List<Student> list =biz.findBySex(map);

3. 输出参数的存储过程的执行。

A.映射文件配置

<!-- 带输出参数的过程 -->

<parameterMap type="Map" id="p2">

<parameter property="count" mode="OUT"  jdbcType="INTEGER"/>

</parameterMap>

<select id="findStudentCount" parameterMap="p2"statementType="CALLABLE">

      {call p_studentCount(?)}

</select>

B.数据访问接口的方法:

   //执行带输出参数的过程

   public voidfindStudentCount(Map<String, Object> map);

C.调用

  StudentDao dao =session.getMapper(StudentDao.class);

  dao.findStudentCount(map);

  //取Map中的参数值

 returnInteger.parseInt(map.get("c").toString());


12.注解配置Select

1.   查询多个对象

@Select("select * fromgrade")

    //当实体属性与数据库表中的字段不匹配时,就必须要配置Results注解。

    @Results({

        @Result(id=true,column="id",property="id"),

        @Result(column="gradeName",property="gradeName")

    })

    public List<Grade> find();

2.   查询单个对象

@Select("select * from gradewhere id=#{id}")

    public Grade findById(int id);

3.   增加

//增加,并且可以获取到数据库中受影响的行数

    @Insert("insert into grade values(null,#{gradeName})")

    //当我们需要马上获取添加的数据的主键值时(主键是一个自动增长列)

    //statement:表示执行的命令keyProperty:表示数据存放的属性 before:表示执行前获取还执行后获取

    //resultType:返回的数据类型

    @SelectKey(statement="selectlast_insert_id()",keyProperty="id",

        before=false,resultType=int.class)

publicint add(Grade grade);

4.   修改

//修改

    @Update("update grade set gradeName=#{gradeName} whereid=#{id}")

publicint update(Grade grade);

5.   删除

//删除

@Delete("delete from gradewhere id=#{id}")

publicint delete( int id);


13.映射关系

1.       一对多 many

//many:表示一个一对多的映射关系

    @Results({

        @Result(id=true,column="id",property="id"),

        @Result(column="gradeName",property="gradeName"),

        @Result(column="id",property="students",

        many=@Many(select="com.etc.dao.StudentDao.findByGid"))

})

2.       多对一 one

//多对一 : one属性来实现  select:表示取数据的方法  column:表示外键属性

        @Result(column="gid",property="grade",

        one=@One(select="com.etc.dao.GradeDao.findById"))


14.动态SQL

因为有时候我们需要对SQL语句进行拼接,比如说带一些条件拼接,这时候,动态SQL就可以行好的支持我们的需求。动态SQL是MyBatis中功能非常强大的一种体现。

动态SQL有点类似于JSTL表达式。

1.   if  

<selectid="search"resultMap="subjectResult"parameterType="Map">

     select * from subject where 1=1

    <!-- 动态SQL if  test:条件,如果条件成立,则向SQL语句中加入其中的SQL片断-->

    <iftest="name!=null">

       and subjectName like #{name}

    </if>

    <!-- &gt; >&lt; <  -->

    <iftest="hour!=null">

       and classHour>=#{hour}

    </if>

</select>

2.   where 特点是:自动在SQL语句中加上where关键字,并且把里面的第一个and 关键字去掉。

<selectid="search1"resultMap="subjectResult"parameterType="Map">

     select * from subject

    <where><!-- 自动加上where  去掉第一个and -->

        <!-- 动态SQL if  test:条件-->

        <iftest="name!=null">

           and subjectName like #{name}

        </if>

        <!-- &gt;  >&lt; <  -->

        <iftest="hour!=null">

           and classHour>=#{hour}

        </if>

    </where>

    <!--select * from subject wheresubjectName='%j%' and classHoure>=40    -->

</select>

3.   choose- when- otherwise

choose:是一个整体,不能单独存在,必须与when或 when、otherwise一起作用。when 也不可以单独存在,必须包含在choose中,otherwise也不可以单独存在,必须与choose结合起来使用。otherwise不是必须的,因为choose与when这个就可搭配使用。when可以出现多次。

<selectid="searchOrder"resultMap="subjectResult"parameterType="Map">

     select * from subject

    <choose>

    <whentest="name!=null">

         order by subjectName

    </when>

    <whentest="hour!=null">

         order by classHour

    </when>

    <otherwise>

         order by subjectNodesc

    </otherwise>

    </choose>

</select>

4.   foreach

<selectid="search2"resultMap="subjectResult"parameterType="Map">

      select * from subject where subjectNo in

    <!--collection:集合对象 item:迭代出的值 separator:分隔符号 open:开始 close:关闭-->

    <foreachcollection="list"item="id"separator=","

    open="("close=")">

         #{id}

    </foreach> 

    <!-- select * from subject where subjectNo in(2,5,4)  -->

    </ select >


14.SQL

<sql id="search"> select * from subject </sql>  声明一个SQL指令

<selectid="find"resultMap="subjectResult">

    <includerefid="search"></include>

</select>


15.缓存

缓存:就是把数据查询完成之后,MyBatis会把查询的数据进行缓存,存在内存中,下一次如果执行的是相同的SQL语句,则直接从缓存中取数据,不需要再次访问数据库,从而提升了性能。

缓存以SQL语句作为键,查询结果作为值进行缓存。

MyBatis的缓存有一级缓存及二级缓存,默认情况下,一级是自动开启的。很少用到二级缓存。

一级缓存是针对每一个打开的SQLSession对象来进行缓存,这个连接一旦关闭,则对就的一级缓存就失效。

二级缓存是针对整个应用程序来进行缓存。
标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则和常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化和改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
在金融行业中,对信用风险的判断是核心环节之一,其结果对机构的信贷政策和风险控制策略有直接影响。本文将围绕如何借助机器学习方法,尤其是Sklearn工具包,建立用于判断信用状况的预测系统。文中将涵盖逻辑回归、支持向量机等常见方法,并通过实际操作流程进行说明。 一、机器学习基本概念 机器学习属于人工智能的子领域,其基本理念是通过数据自动学习规律,而非依赖人工设定规则。在信贷分析中,该技术可用于挖掘历史数据中的潜在规律,进而对未来的信用表现进行预测。 二、Sklearn工具包概述 Sklearn(Scikit-learn)是Python语言中广泛使用的机器学习模块,提供多种数据处理和建模功能。它简化了数据清洗、特征提取、模型构建、验证与优化等流程,是数据科学项目中的常用工具。 三、逻辑回归模型 逻辑回归是一种常用于分类任务的线性模型,特别适用于二类问题。在信用评估中,该模型可用于判断借款人是否可能违约。其通过逻辑函数将输出映射为0到1之间的概率值,从而表示违约的可能性。 四、支持向量机模型 支持向量机是一种用于监督学习的算法,适用于数据维度高、样本量小的情况。在信用分析中,该方法能够通过寻找最佳分割面,区分违约与非违约客户。通过选用不同核函数,可应对复杂的非线性关系,提升预测精度。 五、数据预处理步骤 在建模前,需对原始数据进行清理与转换,包括处理缺失值、识别异常点、标准化数值、筛选有效特征等。对于信用评分,常见的输入变量包括收入水平、负债比例、信用历史记录、职业稳定性等。预处理有助于减少噪声干扰,增强模型的适应性。 六、模型构建与验证 借助Sklearn,可以将数据集划分为训练集和测试集,并通过交叉验证调整参数以提升模型性能。常用评估指标包括准确率、召回率、F1值以及AUC-ROC曲线。在处理不平衡数据时,更应关注模型的召回率与特异性。 七、集成学习方法 为提升模型预测能力,可采用集成策略,如结合多个模型的预测结果。这有助于降低单一模型的偏差与方差,增强整体预测的稳定性与准确性。 综上,基于机器学习的信用评估系统可通过Sklearn中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值