- , 24 8月 2021
- 作者 847954981@qq.com
- 后端学习, 我的编程之路
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数据类型 |
---|---|
varchar | String |
text | String |
integer | int |
double | double |
bigint | long |
datetime | date |
DAO
在 Java 工程化中,我们一般会把数据层的服务称为DAO层,DAO层会包含对数据库操作的接口和实现类。
DAO层的包一般放在xxx.xxx.xxx.dao下并添加Mapper注解来方便映射xml
代码语言:javascript复制import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserDAO {
}
创建玩DAO层之后,可以通过创建Controller来引用
代码语言:javascript复制@Controller
public class UserController {
@Autowired
private UserDAO userDAO;
}
添加接口方法
DAO层中可以添加接口方法如:
代码语言:javascript复制@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层
代码语言:javascript复制 @Select("SELECT id,user_name as userName,pwd,nick_name as nickName,avatar,gmt_created as gmtCreated,gmt_modified as gmtModified FROM user")
使用Controller来使用方法
代码语言:javascript复制@Controller
public class UserController {
@Autowired
private UserDAO userDAO;
@GetMapping("/users")
@ResponseBody
public List<UserDO> getAll() {
return userDAO.findAll();
}
}
插入
代码语言:javascript复制 @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表示主键的设置
修改
代码语言:javascript复制@Update("update user set nick_name=#{nickName},gmt_modified=now() where id=#{id}")
删除
代码语言:javascript复制@Delete("delete from user where id=#{id}")
传入参数
代码语言:javascript复制List<CommentDO> findByRefId(@Param("refId") String refId);
通过@Param 来定义一个别名在使用#{}可以直接写入别名来传入参数