欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MyBatis 使用权威指南

程序员文章站 2024-03-04 16:11:17
什么是 mybatis mybatis 是支持定制化 sql、存储过程以及高级映射的优秀的持久层框架。mybatis 避免了几乎所有的 jdbc 代码和手动设置参数以...

什么是 mybatis

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,我觉得还是看自己的喜好。

下面看下#{}和${}的区别

#{}在底层实现上使用?做占位符来生成preparedstatement,然后将参数传入,大多数情况都应使用这个,它更快、更安全。

${}将传入的数据直接显示生成在sql中。如:order by ${user_id},如果传入的值是111,那么解析成sql时的值为order by 111, 如果传入的值是id,则解析成的sql为order by id.

以上所述是小编给大家介绍的mybatis 使用指南,希望对大家有所帮助