深入SSM框架--MyBatis入门

MyBatis简介

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

MyBatis映射对象

DO对象规则

DO( Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。

DO对象数据类型

DO 对象和普通的 POJO 类并无不同,唯一要注意的点是属性类型要和数据库类型进行匹配。

MyBatis DAO

创建 DAO 层

创建包。

定义 DAO 接口

创建接口(此接口需要添加一个@Mapper的注解)。

引用 DAO

完成 MyBatis DAO 的定义后,Spring 启动的时候会自动加载这个接口并动态创建一个 Spring Bean。

MyBatis 查询

添加接口方法

@Mapper
public interface ExampleDAO {

    public List<ExampleDO> findAll();

}

findAll方法:

public List<ExampleDO> findAll();

查询多条记录的时候,请使用List做为返回类型。

添加@Select注释

@Mapper
public interface ExampleDAO {

    @Select("SELECT id,user_name as userName,pwd,nick_name as nickName,avatar,gmt_created as gmtCreated,gmt_modified as gmtModified FROM user")
    List<ExampleDO> findAll();

}

API测试

@Controller
public class ExampleController {

  @Autowired
  private ExampleDAO exampleDAO;

  @GetMapping("/examples")
  @ResponseBody
  public List<ExampleDO> getAll() {
    return exampleDAO.findAll();
  }

}

MyBatis 插入

添加接口方法

insert方法:

int insert(ExampleDO exampleDO);

 insert方法介绍:

执行 SQL 插入语句的时候,会返回插入行数,一般成功是返回 1。(判断插入是否成功可以通过看返回值)。

@Mapper
public interface  ExampleDAO {

  int insert(ExampleDO exampleDO);

  @Select("SELECT id,user_name as userName,pwd,nick_name as nickName,avatar,gmt_created as gmtCreated,gmt_modified as gmtModified FROM user")
  List<ExampleDO> findAll();

}

 添加 @Insert 注解

@Mapper
public interface ExampleDAO {

  @Insert("INSERT INTO user (user_name, pwd, nick_name,avatar,gmt_created,gmt_modified) VALUES(#{userName}, #{pwd}, #{nickName}, #{avatar},now(),now())")
  int insert(ExampleDO exampleDO);

  @Select("SELECT id,user_name as userName,pwd,nick_name as nickName,avatar,gmt_created as gmtCreated,gmt_modified as gmtModified FROM user")
  List<ExampleDO> findAll();

}

value 值换成了 #{变量名} 

VALUES(#{userName}, #{pwd}, #{nickName}, #{avatar},now(),now())

  #{userName} 实际上就是执行userDO.getUserName()这个方法来获取 userName 变量值,MyBatis 会自动更新生成正式的 SQL 语句去到数据库里执行。

API测试

@PostMapping("/example")
  @ResponseBody
  public ExampleDO save(@RequestBody ExampleDO exampleDO) {
    exampleDAO.insert(exampleDO);
    return exampleDO;
  }

查看主键值

 @Options(useGeneratedKeys = true, keyColumn = "id", keyProperty = "id")

 useGeneratedKeys————>设置为 true,代表允许数据库使用自增主键

keyColumn————>设置表的主键字段名称,一般都是id

keyProperty————>设置DO模型的主键字段

MyBatis 修改

接口方法

update方法:

 int update(ExampleDO exampleDO);

 DAO代码:

@Mapper
public interface ExampleDAO {

    @Insert("INSERT INTO user (user_name, pwd, nick_name,avatar,gmt_created,gmt_modified) " +
            "VALUES(#{userName}, #{pwd}, #{nickName}, #{avatar},now(),now())")
    @Options(useGeneratedKeys = true, keyColumn = "id", keyProperty = "id")
    int insert(ExampleDO exampleDO);

    @Select("SELECT id,user_name as userName,pwd,nick_name as nickName,avatar,gmt_created as gmtCreated,gmt_modified as gmtModified FROM user")
    List<ExampleDO> findAll();

    int update(ExampleDO exampleDO);
}

 @Update 注解

@Update("update user set nick_name=#{nickName},gmt_modified=now() where id=#{id}")

完整代码:

@Mapper
public interface ExampleDAO {

    @Insert("INSERT INTO user (user_name, pwd, nick_name,avatar,gmt_created,gmt_modified) " +
            "VALUES(#{userName}, #{pwd}, #{nickName}, #{avatar},now(),now())")
    @Options(useGeneratedKeys = true, keyColumn = "id", keyProperty = "id")
    int insert(ExampleDO exampleDO);

    @Select("SELECT id,user_name as userName,pwd,nick_name as nickName,avatar,gmt_created as gmtCreated,gmt_modified as gmtModified FROM user")
    List<ExampleDO> findAll();


    @Update("update user set nick_name=#{nickName},gmt_modified=now() where id=#{id}")
    int update(ExampleDO exampleDO);
}

API注释

 @PostMapping("/example/update")
    @ResponseBody
    public ExampleDO update(@RequestBody ExampleDO exampleDO) {
        exampleDAO.update(exampleDO);
        return exampleDO;
    }

MyBatis 删除

接口方法

delete方法:

int delete(long id);

为了能够在 SQL 语句中完成普通参数解析,还需要对参数增加一个注解@Param

 

public interface ExampleDAO {
    int delete(@Param("id") long id);
}

@Delete 注解 

@Delete("delete from user where id=#{id}")

#{id} 中的 id 要和 @Param("id") 中的 id 一样

完整代码:

@Mapper
public interface ExampleDAO {

    @Insert("INSERT INTO user (user_name, pwd, nick_name,avatar,gmt_created,gmt_modified) " +
            "VALUES(#{userName}, #{pwd}, #{nickName}, #{avatar},now(),now())")
    @Options(useGeneratedKeys = true, keyColumn = "id", keyProperty = "id")
    int insert(ExampleDO exampleDO);

    @Select("SELECT id,user_name as userName,pwd,nick_name as nickName,avatar,gmt_created as gmtCreated,gmt_modified as gmtModified FROM user")
    List<ExampleDO> findAll();

    @Delete("delete from user where id=#{id}")
    int delete(@Param("id") long id);
}

 API测试

 @GetMapping("/example/del")
    @ResponseBody
    public boolean delete(@RequestParam("id") Long id) {
        return exampleDAO.delete(id) > 0;
    }

返回值大于0,则删除成功 ,反之则无

MyBatis 简单查询

接口方法

ExampleDO findByUserName(@Param("exampleName") String name);

@Select 注解

public interface ExampleDAO {
   
  @Select("select id,user_name as userName,pwd,nick_name as nickName,avatar,gmt_created as gmtCreated,gmt_modified as gmtModified  from user  where user_name=#{userName} limit 1")
  ExampleDO findByExampleName(@Param("exampleName") String name);

}

API测试

  @GetMapping("/example/findByExampleName")
  @ResponseBody
  public ExampleDO findByExampleName(@RequestParam("exampleName") String exampleName) {
    return exampleDAO.findByExampleName(exampleName);
  }
  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DF_Orange

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值