MyBatis查询数据库

文章目录

    • 一.基础概念
      • 1.什么是MyBatis
      • 2.添加MyBatis依赖
      • 3.配置MyBatis中的xml路径
    • 二.MyBatis的使用
      • 1.添加用户实体类
      • 2.添加 mapper 接⼝
      • 3.配置xml
      • 4.接口实现
      • 5.添加Service
      • 6.添加Controller
    • 三.其它情况下Mybatis的使用
      • 1.返回自增主键值
      • 2.数据库字段和类属性不匹配
    • 四.动态SQL
      • 1.参数占位符 #{} 和 ${}
      • 2.标签
      • 3. \标签
      • 4.\标签
      • 5. \标签

一.基础概念

1.什么是MyBatis

MyBatis是一个持久层框架,简单来说 MyBatis是更简单的操作和读取数据库⼯具。

2.添加MyBatis依赖




 org.mybatis.spring.boot
 mybatis-spring-boot-starter
 2.1.4





 mysql
 mysql-connector-java
 5.1.38
 runtime

如果是SpringBoot项目可以直接在创建项目的时候进行勾选

3.配置MyBatis中的xml路径

 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件  application.yml
 #连接数据库
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8&useSSL=false
    username: root
    password: ""
    driver-class-name: com.mysql.cj.jdbc.Driver

#配置mybatis
mybatis:
  mapper-locations: classpath:mybatis/**Mapper.xml

二.MyBatis的使用

MyBatis查询数据库_第1张图片

1.添加用户实体类

属性名称要和数据库的字段名称对应

@Data

public class User {
 private Integer id;
 private String username;
 private String password;
 private String photo;
 private Date createTime;
 private Date updateTime;
}

2.添加 mapper 接⼝

@Mapper

public interface UserMapper {
 public List getAll();
}

3.配置xml




  //curd


namespace指的就是接口类的位置

4.接口实现





 

  • resultType: 返回的数据格式
  • id: 接口的方法名称

5.添加Service

@Service

public class UserService {
 @Resource

 private UserMapper userMapper;
 public List getAll() {
 return userMapper.getAll();
 }
}

6.添加Controller

@RestController

@RequestMapping("/u")

public class UserController {
 @Resource

 private UserService userService;
 @RequestMapping("/getall")
 public List getAll(){
 return userService.getAll();
 }
}

简单Mybatis使用已经完成

三.其它情况下Mybatis的使用

1.返回自增主键值




 insert into userinfo(username,password,photo,state)
 values(#{username},#{password},#{photo},1)

  • useGeneratedKeys:这会令 MyBatis 使⽤ JDBC 的 getGeneratedKeys ⽅法来取出由数据库内部⽣成的主键(⽐如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的⾃动递增字段),默认值:false。
  • keyColumn:设置⽣成键值在表中的列名,在某些数据库(像 PostgreSQL)中,当主键列不是表中的第⼀列的时候,是必须设置的。如果⽣成列不⽌⼀个,可以⽤逗号分隔多个属性名称。
  • keyProperty:指定能够唯⼀识别对象的属性,MyBatis 会使⽤ getGeneratedKeys 的返回值或 insert 语句的 selectKey ⼦元素设置它的值,默认值:未设置(unset)。如果⽣成列不⽌⼀个,可以⽤逗号分隔多个属性名称。

2.数据库字段和类属性不匹配

返回字典映射:resultMap


 
 
 


column是数据字段,property是类属性名

四.动态SQL

1.参数占位符 #{} 和 ${}

  • #{}:预编译处理
  • ${}: 字符直接替换
    预编译处理是指:MyBatis 在处理#{}时,会将 SQL 中的 #{} 替换为?号,使⽤ PreparedStatement 的 set ⽅法来赋值。直接替换:是MyBatis 在处理 ${} 时,就是把 ${} 替换成变量的值。

${}有可能会引发sql注入问题,能用#{}则用#{}

2.标签


 insert into user(
 username,
 password,
 nickname,
 
 sex,
 
 birthday,
 head
 ) values (
 #{username},
 #{password},
 #{nickname},
 
 #{sex},
 
 #{birthday},
 #{head}
 )

前端传来的对象有可能有些属性为null,如果还是照常进行插入,将可能不会触发数据库字段的default属性。
if如果会真则会保留值,否则删除

3. 标签

之前的插⼊⽤户功能,只是有⼀个 sex 字段可能是选填项,如果所有字段都是⾮必填项,就考虑使⽤
标签结合标签,对多个字段都采取动态⽣成的⽅式。
标签中有如下属性:

  • prefix:表示整个语句块,以prefix的值作为前缀
  • suffix:表示整个语句块,以suffix的值作为后缀
  • prefixOverrides:表示整个语句块要去除掉的前缀
  • suffixOverrides:表示整个语句块要去除掉的后缀

4.标签

样例:


在上面的示例中,如果传入的参数中name不为null,则查询条件中会包含AND name = #{name};如果age不为null,则查询条件中会包含AND age = #{age};如果email不为null,则查询条件中会包含AND email = #{email}。这样就可以根据输入参数灵活地构建查询条件,避免了硬编码的弊端。

类似标签的还有

5. 标签

对集合进⾏遍历时可以使⽤该标签。标签有如下属性:

  • collection:绑定⽅法参数中的集合,如 List,Set,Map或数组对象
  • item:遍历时的每⼀个对象
  • open:语句块开头的字符串
  • close:语句块结束的字符串
  • separator:每次遍历之间间隔的字符串

示例

	
	 delete from article
	 where id in
	 
	 #{item}
	 
	

你可能感兴趣的:(mybatis,java,spring)