SpringBoot | 第三十五章:Mybatis的集成和使用

最近收到公众号留言说,单纯的Mybatis的集成和使用。前面在第九章:Mybatis-plus的集成和使用介绍了基于mybatis-plus的集成和使用。后者也只是对mybatis进行了功能增强,原本的用法都是没有变化的。那今天就来简单介绍了如何springboot中如何集成和使用Mybatis吧。

SpringBoot的集成和使用

MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

这里介绍基于xml和注解两种方式进行配置。同时使用mybatis-spring-boot-starter进行集成。

这里选用的mybatis-spring-boot-starter版本为:1.3.2。
对应Mybatis版本为:3.4.6

通用配置

两种方式都引入一下的pom配置:

<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>

这里以user表为例子,数据库为mysql

DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) DEFAULT NULL COMMENT '唯一标示', `code` varchar(20) DEFAULT NULL COMMENT '编码', `name` varchar(64) DEFAULT NULL COMMENT '名称', `status` char(1) DEFAULT '1' COMMENT '状态 1启用 0 停用', `gmt_create` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

实体类User为:

/** * <p> * * </p> * * @author oKong * @since 2018-12-02 */ @Data @Accessors(chain = true) public class User implements Serializable{ /** * */ private static final long serialVersionUID = 1779270373648636358L; /** * 唯一标示 */ private Long id; /** * 编码 */ private String code; /** * 名称 */ private String name; /** * 状态1 启用 0 停用 */ private StatusEnum status; /** * 创建时间 */ private Date gmtCreate; /** * 修改时间 */ private Date gmtModified; }

状态枚举类StatusEnum:

public enum StatusEnum { DISABLE, ENABLE; }

配置文件:application.properties

# 实体别名 mybatis.type-aliases-package=cn.lqdev.learning.springboot.chapter35.biz.entity # 数据库配置 spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/learning?useUnicode=true&characterEncoding=utf-8 spring.datasource.username=root spring.datasource.password= spring.profiles.active=anno

启动类

/** * mybaits集成 * @author oKong * */ @SpringBootApplication @Slf4j public class MybatisApplication { public static void main(String[] args) throws Exception { SpringApplication.run(MybatisApplication.class, args); log.info("spring-boot-mybatis-chapter35启动!"); } } 注解方式

0.创建注解版的mapper:

UserMapper.java

/** * 注解配置 * @author okong * */ public interface UserMapper { //配置返回的字段类型,这里配置了创建日期和修改日期自动 @Select("select * from user where id = #{id}") @Results({ @Result(column = "gmt_create",property = "gmtCreate",jdbcType=JdbcType.DATE), @Result(column = "gmt_modified",property = "gmtModified",jdbcType=JdbcType.DATE) }) User queryOne(Long id); // 枚举类 默认是使用 EnumTypeHandler 处理类,即使用枚举name作为值 //status 为枚举类 也可以直接指定了 typeHandler类 作为处理类 ,如:#{status,typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler} //还可以在sqlFactory 直接使用 TypeHandlerRegistry 进行注册 详看;MybatisConfig 类 //最简单:自定义 ConfigurationCustomizer 了进行设置 详看;MybatisConfig 类 @Insert("insert into user(code,name,status) values(#{code},#{name}, #{status})") //以下配置会对user对象进行id赋值 @Options(keyProperty="id",keyColumn="id",useGeneratedKeys=true) int insert(User user); @Update("update user set code=#{code}, name = #{name}, status = #{status} where id=#{id}") void update(User user); @Delete("delete from user where id=#{id}") void delete(Long id); @Select("select * from user where code = #{code}") @Results({ @Result(column = "gmt_create",property = "gmtCreate",jdbcType=JdbcType.DATE), @Result(column = "gmt_modified",property = "gmtModified",jdbcType=JdbcType.DATE) }) List<User> queryByParams(@Param("code")String code); }

简单对以上相关注解进行说明下:

@Select 是查询类的注解,所有的查询均使用这个

@Result 修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。

@Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值

@Update 负责修改,也可以直接传入对象

@delete 负责删除

@Options 映射语句的属性,如新增时需要返回自增的ID时:@Options(keyProperty="id",keyColumn="id",useGeneratedKeys=true)

具体的可以去官网查阅:

映射器注解

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywfyd.html