MyBatis 使用指南(1)

744 阅读3分钟
原文链接: blog.makerwei.me

什么是 MyBatis

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

SpringBoot 中使用

使用 Maven

在你的pom.xml中:

< dependency>
    < groupId>org.mybatis.spring.boot< /groupId>
    < artifactId>mybatis-spring-boot-starter< /artifactId>
    < version>1.2.1-SNAPSHOT< /version>
< /dependency>

使用 Gradle

在你的 build.gradle中:

dependencies {
    compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.2.1-SNAPSHOT")
}

使用

目录结构

--src 
 --main
  --java
   --com.example
    --dao
     --UserDao.java
    --entity
     --User.java
    --DemoApplication.java
    --UserSex.java
 --resources
  --mapper
   --UserMapper.xml
  --application.properties

基于注解

使用MyBatis-Spring-Boot-Starter will:

  • 将自动检测存在的数据源
  • 将数据源输入然后创建注册一个SqlSessionFactoryBean实例
  • SqlSessionFactoryBean中创建注册一个SqlSessionTemplate实例
  • 自动扫描你的 mappers,将它们连接到SqlSessionTemplate然后将它们注册到 Spring 的上下文

我们新建一个实体类User.java,在这里我们使用 Lombok (使用说明见这篇文章)来简化代码

@Data
public class User {
    private Long id;
    private String userName;
    private String password;
    private UserSex userSex;
    private String nickName;
}

接着我们创建一张叫 user的表

DROP TABLE IF EXISTS user;
CREATE TABLE user(
  id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  user_name VARCHAR(32) DEFAULT NULL COMMENT '用户名',
  password VARCHAR(32) DEFAULT NULL COMMENT '密码',
  user_sex VARCHAR(32) DEFAULT NULL ,
  nick_name VARCHAR(32) DEFAULT NULL ,
  PRIMARY KEY (id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8;

然后创建一个 Dao 文件UserDao.java

@Mapper
public interface UserDao {
    @Select("SELECT * FROM user WHERE id = #{id}")
    @Results({
            @Result(property = "userName", column = "user_name"),
            @Result(property = "password", column = "password"),
            @Result(property = "userSex", column = "user_sex", javaType = UserSex.class),
            @Result(property = "nickName",column = "nick_name")
    })
    User findById(@Param("id") Long id);
    @Insert("INSERT INTO user (user_name,password,user_sex ) VALUES (#{userName},#{password},#{userSex})")
    void save(User user);
    @Update("UPDATE user set user_name = #{userName}, nick_name = #{nickName} WHERE id = #{id}")
    void update(User user);
    
    @Delete("DELETE FROM user where id = #{id}")
    void remove(Long id);
}

每个方法都对应的对应的 sql 语句,其中@Select注解用于查询,@Result注解将实体类属性跟数据库的字段一一对应,@Insert注解用于插入数据,@Update注解用于修改数据,@Delete注解用于删除

接下来我们简单的测试下

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
    @Autowired
    UserDao userDao;
    @Test
    public void test(){
        User one = new User();
        one.setUserName("张三");
        one.setPassword("123456");
        one.setUserSex(UserSex.MAN);
        userDao.save(one);
        User two = new User();
        two.setUserName("李四");
        two.setPassword("123456");
        two.setUserSex(UserSex. WOMAN);
        userDao.save(two);
    }
}

结果如下
结果

基于 XML 配置

application.properties配置文件中新增以下配置

mybatis.type-aliases-package= com.example.entity
mybatis.mapper-locations=classpath:mapper/*.xml

然后在resources文件夹中创建mapper文件夹,然后新建一个userMapper.xml

< ?xml version="1.0" encoding="UTF-8" ?>
< !DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
< mapper namespace="com.example.dao.UserDao">
    < resultMap id="userMap" type="com.example.entity.User">
        < result column="id" property="id"/>
        < result column="user_name" property="userName"/>
        < result column="password" property="password"/>
        < result column="user_sex" property="userSex" javaType="com.example.UserSex"/>
        < result column="nick_name" property="nickName"/>
    < /resultMap>
    
    < insert id="save" parameterType="com.example.entity.User">
        INSERT INTO user (user_name,password,user_sex ) VALUES (#{userName},#{password},#{userSex})
    < /insert>
    
    < delete id="remove" parameterType="java.lang.Long">
        DELETE FROM user where id = #{id}
    < /delete>
    
    < update id="update" parameterType="com.example.entity.User">
        UPDATE user SET user_name = #{userName}, nick_name =#{nickName} WHERE id = #{id}
    < /update>
    
    < select id="findById" parameterType="java.lang.Long" resultMap="userMap">
        SELECT * FROM user WHERE id = #{id}
    < /select>
            
< /mapper>

然后将UserDao.java文件修改如下

public interface UserDao {
    
    User findById(Long id);
    
    void save(User user);
    
    void update(User user);
    
    void remove(Long id);
}

最后在SpringBoot的主程序上加上@MapperScan的注解将 dao 文件跟 sql 语句对应起来

@SpringBootApplication
@MapperScan("com.example.dao")
public class DemoApplication {
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}

总结

mybatis-spring-boot-starter可以快速的通过注解来开发,十分方便,可以灵活的使用 SQL 和调整 SQL,具体用注解还是基于 XML,我觉得还是看自己的喜好

如果觉得我的文章对你有帮助,就赏给我这个学生党一些钱买书继续深入学习下去吧! 赏 小小小maker_wei WeChat Pay

微信打赏

小小小maker_wei Alipay

支付宝打赏