mybatis记录二 #与$,输出结果,别名,resultMap,like

一、#和$
select id , name,email ,age from student where id-#{studentId}# 的结果: select id, name,email ,age from student where id=?
select id , name,email,age from student where id=${studentId}$的结果: select id ,name,email,age from student where id=1001
string sql="select id ,name,email,age from student where id=" + "1001" ;使用的statement对象执行sql,效率比Preparedstatement低。
$ :可以替换表名或者列名,你能确定数据是安全的。可以使用$


#和$区别
1.#使用?在sql语句中做站位的,使用Preparedstatement执行sql,效率高

2.#能够避免sql注入,更安全。
3.$不使用占位符,是字符串连接方式,使用statement对象执行sql,效率低

4.$有sgl注入的风险,缺乏安全性。
5. $:可以替换表名或者列名

 

二、

mybatis的输出结果
mybatis执行了sql语句,得到java对象-
1) resultrype结果类型,指sql语句执行完毕后,数据转为的java对象,java类型是任意的。
resultType结果类型的它值 1.类型的全限定名称―2.类型的别名,例如java.lang. Integer别名是int


处理方式:
1. mybatis执行sql语句,然后mybatis调用类的无参数构造方法,创建对象。

2. mybatis把Resultset指定列值赋给同名的属性
<select id="selectMultiPosition" resultType="com.bjpowernode . domain.student">

     select id ,name, email ,age from student
</select>
对等的jdbc
Resultset rs = executeQuery(" select id,name,email,age from student" )

  while (rs.next(){
    studentstudent - new student() ;student.setid (rs.getInt( "id"));
    student. setName (rs.getstring ( "nane" ) ) }

 

三、定义别名:


1)在mybatis主配置文件中定义,使<typeAlias>定义别名

2)可以在resultType中使用自定义别名

 <!--定义别名实例-->
    <!--
    第一种方法:    可以指定一个类型一个自定义别名  标签<typeAliases>
    type:自定义类型的全限定名称
    alias:别名(短小,容易记忆的)
    -->
    <typeAliases>
        <typeAlias type="stu" alias="com.edu.domain.Student"></typeAlias>
        <!--
        第二种方式
        <package> name是包名,这个包中的所有类,类名就是别名(类名不区分大小写),需要注意的是当不同的包存在相同的
        类名时,会报错,因为idea不知道该使用哪个类  -->
 <package name="com.edu.domain" />
    </typeAliases>

 

四、resultMap结果映射

resultMap:结果映射,指定列名和java对象的属性对应关系。
1)你自定义列值赋值给哪个属性
2)当你的列名和属性名不一样时,一定使用resultMap
res&ltMap和resultrype不要一起用,二选一l
 

<resultMap id="myStudentMap" type="com.edu.domain.MyStudent">
<!--        把从数据库查到的值 通过property赋给相应的实体属性。-->
        <id column="id" property="stuid"/>
        <result column="name" property="stuname"/>
        <result column="age" property="stuage"/>
    </resultMap>
<!--   使用resultMap 列名与属性名不一致的测试,此时select标签中的resultMap指向 resultmap标签的id -->
    <select id="selectMyStudent" resultMap="myStudentMap">
        select id,name,age from student
    </select>

    <!--    列名与属性名不一致的测试 第二种使用resultType
    resultType的默认原则是同名的列值赋值给同名的属性,使用列别名-->

    <select id="selectOtherStudent" resultType="com.edu.domain.MyStudent">
        select id as stuid,name as stuname from student
    </select>

五、like模糊查询

<!--第一种模糊查询like,推荐第一种-->
    <select id="selectLikeOne" resultType="com.edu.domain.Student">
        select * from student where name like #{name}
    </select>

    <!--第二种模糊查询like,在mapper中拼接,不推荐这种,拼接比较麻烦-->
    <select id="selectLikeTwo" resultType="com.edu.domain.Student">
        select * from student where name like "%" #{name} "%"
    </select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值