一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - MyBatis 使用權威指南

MyBatis 使用權威指南

2020-09-01 09:58Java教程網 Java教程

MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集,本文給大家介紹MyBatis 使用指南,一起看看吧

什么是 MyBatis

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜一级视频 | 亚洲人影院 | bt伙计最新合集 | 农村老妇1乱69系列小说 | 午夜爱爱爱爱爽爽爽视频网站 | 极品丝袜老师h系列全文阅读 | 好奇害死猫在线观看 | 国产日韩精品一区二区三区 | 国产精品第页 | 色色色色网站 | 黑人与欧洲女子性大战 | 999精品视频这里只有精品 | 母乳在线 | 免费在线公开视频 | 亚洲天堂视频在线观看免费 | 午夜免费无码福利视频麻豆 | 国产精品一区二区三区免费 | 久久99r66热这里有精品 | 999精品视频在线观看 | 小鸟酱视频在线观看 | 亚洲黄色大片 | 青草午夜精品视频在线观看 | 亚洲成av人片在线观看天堂无码 | 香蕉国产人午夜视频在线观看 | 女人肮脏的交易中文字幕未删减版 | 97蝌蚪自拍自窝 | 精品一区二区三区在线成人 | 草草草在线 | 精品久久久麻豆国产精品 | 我的好妈妈7中字在线观看韩国 | 18hdxxxx中国 | 久久99热在线观看7 久久99精品涩AV毛片观看 | 腿交hd | 亚洲欧洲日产国码无码av | 欧美靠逼视频 | 欧洲另类一二三四区 | 国产伦精品一区二区三区免费观看 | 无遮无挡免费视频 | 亚洲电影成人 成人影院 | 爆操女友 | 日本护士xxxx爽爽爽 |