- XML文件
在resource下面建立一个包,命名为mapper,再创建sring config文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.Lee.connect.mapper.UserMapper"> <select id="getUserById" resultType="com.Lee.connect.table.TableUser"> SELECT * FROM t1 WHERE id=#{id} </select> </mapper>
注意头部的两个标签,制定了xml的属性信息,是公用的
其次指定<mapper>标签表示其为在mapper中使用的信息,同时指定命名空间namespace(就是在mapper中定义的类名)
在<mapper>内即包含了由sql语句命名的标签,如<select>
在<select>中,需要指定id,即namespace中的类对应的方法名(此处就完成了XML文件中sql语句和mapper文件中类方法的连接)
同时也需要指定resultType,来表示返回值的类型,如果是自定的实体类,需要完成写出,如com.Lee.connect.table.TableUser
如果没有返回值,则不需要指定
对于自增长id(增加数据操作),将如下的@Option设置添加到<insert>标签内
@Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id") <insert id="addUser" useGeneratedKeys = true,keyProperty = "id",keyColumn = "id">
此时在select标签中就可以写入相应的select语句,但仍要使用mapper中定义的变量
(sql语句建议使用大写,并在必要的地方换行)
- 属性文件
mybatis.mapper-locations=classpath:**/mapper/*.xml
作用是扫描Mapper接口对应的XML文件,此处指的是resources下mapper位置对应的所有xml文件
mybatis.typeAliasesPackage=com.Lee.connect.mapper
使用如上方法来指定项目中的mapper
logging.level.com.Lee.connect.mapper=debug
使用logging.level来对mapper的执行进行输出
http请求调用了mapper,其会在idea控制台输出程序的执行信息,即调试日志
- mapper
package com.Lee.connect.mapper; import com.Lee.connect.table.TableUser; import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Component; @Mapper @Component(value = "UserMapper") public interface UserMapper { //select TableUser getUserById(@Param("id") Integer id);
此时就可以不使用注解@Select进行加载,而可以直接定义方法
- 动态sql语句
mapper语句
//select by page List<TableUser> getUserByPage(@Param("UserName") String UserName);
此处会返回多条数据,所以使用LIst<entity对象>来接收对象的多个数据
注意此处需要调用如下库
import java.util.List;
系统有时会自动调用如下库,会报错
import java.awt.*;
controller语句
@RequestMapping(value = "/getUserByPage") @ResponseBody public Object getUserByPage(@RequestParam("UserName") String UserName){ List<TableUser> users = userMapper.getUserByPage(UserName); return users; }
此处同样使用LIst<entity对象>实例后的user对象接收多条数据
sql语句
select * from sys_test where 1=1 <if test="name != null"> and name=#{name} </if> </select>
<where>标签里的内容会将select * from sys_test的数据进一步细分
在其内部添加<if>,注意条件选择一般会加上and,表示条件符合则继续执行(sql中每个语句前面都要加个关键字)
所以上述的执行就是如果test中的name = != null成立,则执行where 1=1 and name = #{name}
(1=1的作用就是后面可以使用and来连接多个条件)
此处就是if条件成立,则共同执行1=1和name=#{name}
因为此处的where没有<>