MyBatis基础(SSM框架)

在当下 MyBatis 已经是最主流的持久层框架,具体一点就是操作数据库的框架;MyBatis 非常轻量,只需要通过简单的XML或者注解就可以完成数据映射和操作数据。

很多公司都采用 MyBatis 作为 Java 的持久层框架,主要的原因在于它可以灵活的自定义SQL又兼具ORM框架的特性。

Spring依赖: Spring Web、MyBatis Framework、MySQL Driver

DO对象规则

所有的 ORM 框架都需要有一个 Java 对象来映射数据库的表,并且是一一对应的,一般我们把这类对象称为DO对象,对象名称的规范是 表名+DO

比如user表对应的对象名称叫UserDO,comment表对应的对象为CommentDO,如果为test_user表可以使用UserDO或者TestUserDO一般使用前者

DO对象包规则

DO对象一般存放在xxx.xxx.dataobject目录下

如CommentDO放在com.test.comment.dataobject

数据类型

JDBC数据类型Java数据类型
varcharString
textString
integerint
doubledouble
bigintlong
datetimedate

DAO

在 Java 工程化中,我们一般会把数据层的服务称为DAO层,DAO层会包含对数据库操作的接口和实现类。

DAO层的包一般放在xxx.xxx.xxx.dao下并添加Mapper注解来方便映射xml


import
org.apache.ibatis.annotations.Mapper; @Mapper public interface UserDAO { }

创建玩DAO层之后,可以通过创建Controller来引用

@Controller
public class UserController {

    @Autowired
    private UserDAO userDAO;

}

添加接口方法

DAO层中可以添加接口方法如:

@Mapper
public interface UserDAO {

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

}

这里的Select注解为SQL方法。使用别名对应DO层

 @Select("SELECT id,user_name as userName,pwd,nick_name as nickName,avatar,gmt_created as gmtCreated,gmt_modified as gmtModified FROM user")

使用Controller来使用方法

@Controller
public class UserController {

  @Autowired
  private UserDAO userDAO;

  @GetMapping("/users")
  @ResponseBody
  public List<UserDO> getAll() {
    return userDAO.findAll();
  }

}

插入

 @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(UserDO userDO);

使用@Insert来表示插入SQL语句,此时 values 内值中的#{} 表示自动通过UserDO上下文读取值

@Options表示主键的设置

修改

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

删除

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

传入参数

List<CommentDO> findByRefId(@Param("refId") String refId);

通过@Param 来定义一个别名在使用#{}可以直接写入别名来传入参数