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 使用指南,希望对大家有所帮助
上一篇: 详解Java中接口的定义与实例代码