1. 程式人生 > >上手spring boot專案(三)之spring boot整合mybatis進行增刪改查

上手spring boot專案(三)之spring boot整合mybatis進行增刪改查

使用mybatis框架進行增刪改查大致有兩種基礎方式,一種擴充套件方式。兩種基礎方式分別是使用xml對映檔案和使用方法註解。擴充套件方式是使用mybatis-plus的方式,其用法類似於spring-data-jpa。

1.引入依賴

<!--springboot的web起步依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Mybatis起步依賴 -->
<dependency>
       <groupId>org.mybatis.spring.boot</groupId>
       <artifactId>mybatis-spring-boot-starter</artifactId>
       <version>2.1.0</version>
</dependency>    
<!-- MySql連線驅動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>

2.entity實體類

@TableName(value = "tb_user")//使用mybatis-plus時需要新增,與資料庫中的表建立關係
public class SysUser implements Serializable {

    @TableId(type = IdType.AUTO)//使用mybatis-plus時需要新增,主鍵生成策略
    private Long id;

    private String username;


    private String password;

    private String salt;
    private String avatar;
    private String introduce;
    private String remark;
    //省略get,set方法
}

3.建立application.properties配置檔案

#DB Configuration資料庫資訊:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql:///test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.zaxxer.hikari.HikariDataSource

#spring整合Mybatis環境
#pojo別名掃描包
mybatis.type-aliases-package=cn.zhq.system.entity
#載入Mybatis對映檔案
mybatis.mapper-locations=classpath:mapper/*Mapper.xml

# 列印sql
#列印sql到控制檯
logging.level.cn.zhq.system.mapper=debug
mybatis.type-aliases-package是實體所在包的位置,mybatis.mapper-locations是配置檔案所在的位置。初次使用的時候最好加上列印sql的配置,如果出現錯誤的話,這樣容易找出錯誤原因。

4.建立UserMapper類

@Mapper
public interface UserMapper {

}

5.在spring boot的application加上註解

@EntityScan("cn.zhq.system.entity")//填寫 entity類所在包的位置。

加上這個註解後,springboot就可以掃描能實體類。

6.進行增刪改查

6.1 使用mapper.xml進行增刪改查

6.1.1 編寫UserMapper類中的方法

    /**
     * 根據Name查詢使用者資料
     *
     * @param username
     * @return
     */
    SysUser findByName(String username);

6.1.2  在resources的mapper目錄下建立UserMapper.xml配置檔案

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.zhq.system.mapper.UserMapper">
    <select id="findByName" resultType="sysuser" parameterType="String">
      select * from tb_user where username = #{username}
    </select>
</mapper>

使用select標籤執行查詢語句,使用update標籤進行 增,刪,改操作。其中 id是UserMapper類中方法的名稱,resultType是返回值的型別,parameterType是接收的引數型別。

6.2 使用註解進行增刪改查

    /**
     * 更新使用者名稱
     * @param username
     */
    @Update("update tb_user set username= #{username} where id = #{id}")
    void updateByAvatar(String username,Long id);

使用@Update註解後,就無需再編寫UserMapper配置檔案了,同理@Updae可以進行增刪改操作。此外使用@Select進行查詢。當進行一對多,多對多關係的查詢時,還可以使用@Results註解指定返回結果的資料型別,這裡就不細說了。

以上兩種方式各有利弊,使用配置檔案編寫sql語句好處是耦合度低但過於麻煩,使用註解的方式相對於配置檔案來說比較簡單,但是耦合度高。如果是簡單語句,建議是使用註解,如果是複雜語句,使用配置檔案的方式。具體使用哪種方式,可以視實際情況而定。

6.3 使用mybatis-plus進行增刪改查

mybatis-plus類似於spring data jpa , 內建查詢,更新,刪除,插入語句,使我們無需再寫那些簡單的sql語句。

6.3.1 引入依賴

 <!-- Mybatis Plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>

6.3.2 application.yml配置檔案

# mybatis-plus
mybatis-plus:
  type-aliases-package: cn.zhq.system.entity
  mapper-locations: classpath:mapper/*.xml
  configuration:
    jdbc-type-for-null: null
  global-config:
    banner: false
type-aliases-package填寫Entity實體類所在包的位置。mapper-locations:填寫對映檔案所在的位置,如果不寫的話,在你的resources下的mapper配置檔案會報錯。

6.3.3 相關service,serviceImpl,mapper類

service:

public interface UserService  extends IService<SysUser> {


    /**
     * 更新
     *
     * @param sysUser
     */
    void update(SysUser sysUser);
}

serviceImpl:

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, SysUser> implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    @Transactional
    public void update(SysUser sysUser) {
        userMapper.updateById(sysUser);
    }
}

mapper:

@Mapper
public interface UserMapper extends BaseMapper<SysUser> {
}

雖然我們在UserMapper中沒有定義任何方法,但是mybatisPlus集成了很多方法可供我們使用。

執行後,列印的sql語句結果如下