首先在查询之前,我们先要做些基础的工作先创建一个以你的数据库命名的model类
我的数据库的名字叫admin
我就创建了一个Admin的类
用来方便数据的访问
然后我们就要创建一个接口来声明我们要写的方法
我创建的接口命名为AdminDao
在创建一个xml的类用来实现声明的方法
<mapper namespace="dao.AdminDao">
找到对应的接口,并实现接口中定义的方法。
parameterType="int"
表示这个select
操作接受一个int
类型的参数,通常用于指定查询条件,例如id
。resultType="model.Admin"
表示预期的查询结果将被映射到model.Admin
类的实例上,即查询结果的每一行都会创建一个新的Admin
对象。
下面就是你要查询的SQL语句
不过在Mybatis中给id赋的值得用#{}
因为在MyBatis中,#{}
用于将参数占位符替换为实际的参数值。这种语法有几个关键点:
-
参数替换:
#{id}
是一个参数占位符,它告诉MyBatis在执行SQL语句时,这里需要被替换为实际的参数值。 -
预处理语句:使用
#{}
可以防止SQL注入攻击,因为它使用了预处理语句(prepared statements)。数据库会先接收SQL语句的结构,然后分别接收参数值,这样可以确保参数值被正确地转义。 -
参数名称:
#{id}
中的id
是参数名称,它对应于在Java代码中传递给MyBatis方法的参数名称。例如,如果你的Mapper方法如下:Admin findAdminById(int id);
这里的
id
就是参数名称,它将被插入到SQL语句中的#{id}
位置。 -
数据类型转换:MyBatis会根据参数的实际数据类型进行适当的转换。例如,如果
id
是一个int
类型,在数据库操作中,MyBatis会将其转换为数据库能理解的格式。 -
MyBatis配置:在MyBatis的配置中,不需要额外设置就可以使用
#{}
。MyBatis默认使用#{}
作为参数占位符。 -
与
${}
的区别:MyBatis还提供了${}
语法,它用于字符串替换,而不是参数替换。${}
会将变量直接插入到SQL语句中,没有预处理语句的保护,因此如果使用不当,容易受到SQL注入攻击。 -
使用场景:
#{}
通常用于<update>
、<insert>
和<select>
语句中,用于将方法的参数映射到SQL语句的相应位置。 -
复杂表达式:
#{}
也可以用于更复杂的SQL表达式中,例如,作为ORDER BY
、GROUP BY
子句的一部分,或者在函数调用中。
然后创建一个用来输出结果得到类
我创建的类叫Test1
然后就可以看到结果了我查询的id是4
另外说明一下,我这个结果是加了日志来方便看执行过程
如果你也相加的话
只需要在mybatis.xml配置文件里加一句
<setting name="logImpl" value="STDOUT_LOGGING"/>
就可以在下面看到日志