SpringBoot-MySQL(结合XML,多条查询,动态SQL)


  • 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没有<>


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM