教务后端总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yanwenwennihao/article/details/84502714

Mybatis动态sql语句

<foreach item="item" index="index" collection="list" open="(" separator="," close=")">

#{item}

</foreach>

解释含义:

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
foreach元素的属性主要有 item,index,collection,open,separator,close。
item集合中每一个元素进行迭代时的别名,
index表示在迭代过程中,每次迭代到的位置,
open该语句以什么开始,
separator在每次进行迭代之间以什么符号作为分隔 符,
close以什么结束,
在使用foreach的时候最关键的也是最容易出错的就是collection属性,
该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,
主要有一下3种情况:
1.     如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2.     如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3.     如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了


<if test="userName != null and userName != ''">
	<bind name="nameLike" value="'%' + userName + '%'"/>
	and user_name like #{nameLike} 
</if>
!

由于不同的数据库,concat函数的用法不一样,Mysql的有3个参数,而oracle的只有2个。这就造成了这条SQL在不同环境中运行可能会出错。为了避免这种错误,可以用<bind>标签.

value的值写OGNL表达式,OGNL表达式的使用不做过多说明,如果想在OGNL表达式中使用字符串

  1. 简单写法:用引号扩起来,到底使用单引号还是双引号是由外层引号决定的。
  2. 标准写法:用%{’’}或%{""}把表达式括起来,强制转成字符串

bind标签的name属性填写一个参数名,value填写这个参数的值(使用OGNL表达式),bind标签写上后,在标签后面的上下文中使用的和bind标签name值同名的参数,它的值就会被替换为bind标签的value的值。如上面的例子中,在执行这条select语句时,#{pattern}的值就会为"’%’ + _parameter.getTitle() + ‘%’"计算执行后的值。

 <select id="queryCourseByTypeAndAcademy" resultType="com.tfjybj.itoo.teach.model.CourseModel">
        SELECT
        *
        FROM
        tt_course
        WHERE
        is_delete=0 AND
        course_type in (
        <foreach collection="courseType" item="courseType" separator=",">
            #{courseType}
        </foreach>
        )
        <if test="academyId != ''">
            <bind name="academyId" value="academyId"/>
            and academy_id = #{academyId}
        </if>
        order by
        convert(name using gbk)
    </select>
其中的convert(name using gbk)   name 字段,按汉语拼音的顺序排序。

四 sql语句模糊查询三种方式

<!--根据学院或专业名称模糊查询行政班信息-->
WHERE
<if test="strLike!=''">
    <bind name="_strLike" value="'%'+ strLike +'%'"/>
    tc.name like #{_strLike} or ta.`name`like #{_strLike} or ta.`abbreviation` like #{_strLike} and
</if>
<!--根据班级,教师,课程名称来查询课表信息-->
 <if test="courseName!=''">
            <bind name="courseName" value="'%'+ courseName +'%'"/>
            and  f.course_name like #{courseName}
        </if>
        <if test="teacherName!=''">
            <bind name="teacherName" value="'%'+ teacherName +'%'"/>
            and  f.teacher_name like #{teacherName}
        </if>
        <if test="className!=''">
            <bind name="className" value="'%'+ className +'%'"/>
            and  c.name like #{className}
        </if>
<!--根据关键词模糊查询学号或姓名student-->
 <if test="strLike !=''">
     <bind name="strLike" value="'%' + strLike + '%'"/>
     AND 
     concat(s.name,s.code) LIKE #{strLike}
 </if>

BeanUtils.copyProperties(x, courseScheduleEntity);

1、 通过反射将一个对象的值赋值个另外一个对象(前提是对象中属性的名字相同)。

2、 BeanUtils.copyProperties(obj1,obj2); 经常闹混不知道是谁给谁赋值,无意中先到"后付前"这个词来帮助自己记忆这个功能。即将obj2的值赋值给obj1。

3、 如果2中实例obj2为空对象,即值new了他的实例并没有赋值的话obj1对应的属性值也会被设置为空置。

4、BeanUtils与PropertyUtils对比(这里对比copyProperties方法)

PropertyUtils的copyProperties()方法几乎与BeanUtils.copyProperties()相同,主要的区别在于后者提供类型转换功能,即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围内进行转换,BeanUtils 不支持这个功能,但是BeanUtils速度会更快一些。

猜你喜欢

转载自blog.csdn.net/yanwenwennihao/article/details/84502714