什么是 MyBatis
MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以對配置和原生Map使用簡單的 XML 或注解,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。
SpringBoot 中使用
使用 Maven
在你的pom.xml中:
1
2
3
4
5
|
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version> 1.2 . 1 -SNAPSHOT</version> </dependency> |
使用 Gradle
在你的 build.gradle中:
1
2
3
|
dependencies { compile( "org.mybatis.spring.boot:mybatis-spring-boot-starter:1.2.1-SNAPSHOT" ) } |
使用
目錄結構
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
--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 (使用說明見這篇文章)來簡化代碼
1
2
3
4
5
6
7
8
|
@Data public class User { private Long id; private String userName; private String password; private UserSex userSex; private String nickName; } |
接著我們創建一張叫 user的表
1
2
3
4
5
6
7
8
9
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@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注解用于刪除
接下來我們簡單的測試下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@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配置文件中新增以下配置
1
2
|
mybatis.type-aliases- package = com.example.entity mybatis.mapper-locations=classpath:mapper/*.xml |
然后在resources文件夾中創建mapper文件夾,然后新建一個userMapper.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?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文件修改如下
1
2
3
4
5
6
|
public interface UserDao { User findById(Long id); void save(User user); void update(User user); void remove(Long id); } |
最后在SpringBoot的主程序上加上@MapperScan的注解將 dao 文件跟 sql 語句對應起來
1
2
3
4
5
6
7
|
@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 使用指南,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:http://blog.makerwei.me/posts/33582/?utm_source=tuicool&utm_medium=referral