MyBatis 使用權(quán)威指南
什么是 MyBatis

MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以對配置和原生Map使用簡單的 XML 或注解,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。
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")
}
使用
目錄結(jié)構(gòu)
--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:
將自動檢測存在的數(shù)據(jù)源
將數(shù)據(jù)源輸入然后創(chuàng)建注冊一個(gè)SqlSessionFactoryBean實(shí)例
從SqlSessionFactoryBean中創(chuàng)建注冊一個(gè)SqlSessionTemplate實(shí)例
自動掃描你的 mappers,將它們連接到SqlSessionTemplate然后將它們注冊到 Spring 的上下文
我們新建一個(gè)實(shí)體類User.java,在這里我們使用 Lombok (使用說明見這篇文章)來簡化代碼
@Data
public class User {
private Long id;
private String userName;
private String password;
private UserSex userSex;
private String nickName;
}
接著我們創(chuàng)建一張叫 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;
然后創(chuàng)建一個(gè) 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);
}
每個(gè)方法都對應(yīng)的對應(yīng)的 sql 語句,其中@Select注解用于查詢,@Result注解將實(shí)體類屬性跟數(shù)據(jù)庫的字段一一對應(yīng),@Insert注解用于插入數(shù)據(jù),@Update注解用于修改數(shù)據(jù),@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);
}
}
結(jié)果如下
結(jié)果
基于 XML 配置
在application.properties配置文件中新增以下配置
mybatis.type-aliases-package= com.example.entity mybatis.mapper-locations=classpath:mapper/*.xml
然后在resources文件夾中創(chuàng)建mapper文件夾,然后新建一個(gè)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 語句對應(yīng)起來
@SpringBootApplication
@MapperScan("com.example.dao")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
總結(jié)
mybatis-spring-boot-starter可以快速的通過注解來開發(fā),十分方便,可以靈活的使用 SQL 和調(diào)整 SQL,具體用注解還是基于 XML,我覺得還是看自己的喜好。
下面看下#{}和${}的區(qū)別
#{}在底層實(shí)現(xiàn)上使用?做占位符來生成PreparedStatement,然后將參數(shù)傳入,大多數(shù)情況都應(yīng)使用這個(gè),它更快、更安全。
${}將傳入的數(shù)據(jù)直接顯示生成在sql中。如:order by ${user_id},如果傳入的值是111,那么解析成sql時(shí)的值為order by 111, 如果傳入的值是id,則解析成的sql為order by id.
以上所述是小編給大家介紹的MyBatis 使用指南,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
springboot之security?FilterSecurityInterceptor的使用要點(diǎn)記錄
這篇文章主要介紹了springboot之security?FilterSecurityInterceptor的使用要點(diǎn)記錄,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
Spring事務(wù)&Spring整合MyBatis的兩種方式
這篇文章主要介紹了Spring事務(wù)&Spring整合MyBatis的兩種方式,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02
Spring?boot詳解fastjson過濾字段為null值如何解決
這篇文章主要介紹了解決Spring?boot中fastjson過濾字段為null值的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
J2ee 高并發(fā)情況下監(jiān)聽器實(shí)例詳解
這篇文章主要介紹了J2ee 高并發(fā)情況下監(jiān)聽器實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-02-02
SpringCloud災(zāi)難性雪崩效應(yīng)處理方法之降級實(shí)現(xiàn)流程詳解
這篇文章主要介紹了SpringCloud災(zāi)難性雪崩效應(yīng)處理方法之降級,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧<BR>2022-11-11

