<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      Github 地址:https://github.com/Snailclimb/springboot-integration-examples
      <https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2FSnailclimb%2Fspringboot-integration-examples>
      (SpringBoot和其他常用技術(shù)的整合,可能是你遇到的講解最詳細(xì)的學(xué)習(xí)案例,力爭(zhēng)新手也能看懂并且能夠在看完之后獨(dú)立實(shí)踐?;谧钚碌?
      SpringBoot2.0+,是你學(xué)習(xí)SpringBoot 的最佳指南。) ,歡迎各位 Star。

      SpringBoot 整合 Mybatis 有兩種常用的方式,一種就是我們常見的 xml 的方式 ,還有一種是全注解的方式。我覺得這兩者沒有誰比誰好,在
      SQL 語句不太長(zhǎng)的情況下,我覺得全注解的方式一定是比較清晰簡(jiǎn)潔的。但是,復(fù)雜的 SQL 確實(shí)不太適合和代碼寫在一起。

      下面就開始吧!

      目錄:

      *
      一 開發(fā)前的準(zhǔn)備 <https://yq.aliyun.com/go/articleRenderRedirect?url=%23>

      * 1.1 環(huán)境參數(shù) <https://yq.aliyun.com/go/articleRenderRedirect?url=%2311->
      * 1.2 創(chuàng)建工程 <https://yq.aliyun.com/go/articleRenderRedirect?url=%2312->
      * 1.3 創(chuàng)建數(shù)據(jù)庫(kù)和 user 用戶表
      <https://yq.aliyun.com/go/articleRenderRedirect?url=%2313->
      * 1.4 配置 pom 文件中的相關(guān)依賴
      <https://yq.aliyun.com/go/articleRenderRedirect?url=%2314->
      * 1.5 配置 application.properties
      <https://yq.aliyun.com/go/articleRenderRedirect?url=%2315->
      * 1.6 創(chuàng)建用戶類 Bean <https://yq.aliyun.com/go/articleRenderRedirect?url=%2316->
      *
      二 全注解的方式 <https://yq.aliyun.com/go/articleRenderRedirect?url=%23>

      * 2.1 Dao 層開發(fā) <https://yq.aliyun.com/go/articleRenderRedirect?url=%2321-dao->
      * 2.2 service 層
      <https://yq.aliyun.com/go/articleRenderRedirect?url=%2322-service->
      * 2.3 Controller 層
      <https://yq.aliyun.com/go/articleRenderRedirect?url=%2323-controller->
      * 2.4 啟動(dòng)類 <https://yq.aliyun.com/go/articleRenderRedirect?url=%2324->
      * 2.5 簡(jiǎn)單測(cè)試 <https://yq.aliyun.com/go/articleRenderRedirect?url=%2325->
      *
      三 xml 的方式 <https://yq.aliyun.com/go/articleRenderRedirect?url=%23>

      * 3.1 Dao 層的改動(dòng) <https://yq.aliyun.com/go/articleRenderRedirect?url=%2331-dao->
      * 3.2 配置文件的改動(dòng) <https://yq.aliyun.com/go/articleRenderRedirect?url=%2332->
      一 開發(fā)前的準(zhǔn)備

      1.1 環(huán)境參數(shù)

      * 開發(fā)工具:IDEA
      * 基礎(chǔ)工具:Maven+JDK8
      * 所用技術(shù):SpringBoot+Mybatis
      * 數(shù)據(jù)庫(kù):MySQL
      * SpringBoot版本:2.1.0
      1.2 創(chuàng)建工程

      創(chuàng)建一個(gè)基本的 SpringBoot 項(xiàng)目,我這里就不多說這方面問題了,具體可以參考下面這篇文章:

      https://blog.csdn.net/qq_34337272/article/details/79563606
      <https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fblog.csdn.net%2Fqq_34337272%2Farticle%2Fdetails%2F79563606>

      1.3 創(chuàng)建數(shù)據(jù)庫(kù)和 user 用戶表

      我們的數(shù)據(jù)庫(kù)很簡(jiǎn)單,只有 4 個(gè)字段:用戶 id、姓名、年齡、余額,如下圖所示:



      添加了“余額money”字段是為了給大家簡(jiǎn)單的演示一下事務(wù)管理的方式。

      建表語句:
      CREATE TABLE `user` ( `id` int(13) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
      `name` varchar(33) DEFAULT NULL COMMENT '姓名', `age` int(3) DEFAULT NULL COMMENT
      '年齡', `money` double DEFAULT NULL COMMENT '賬戶余額', PRIMARY KEY (`id`) )
      ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
      1.4 配置 pom 文件中的相關(guān)依賴

      由于要整合 springboot 和 mybatis 所以加入了artifactId 為 mybatis-spring-boot-starter
      的依賴,由于使用了Mysql 數(shù)據(jù)庫(kù) 所以加入了artifactId 為 mysql-connector-java 的依賴。
      <dependencies> <dependency> <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version>
      </dependency> <dependency> <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope>
      </dependency> <dependency> <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope>
      </dependency> </dependencies>
      1.5 配置 application.properties

      由于我使用的是比較新的Mysql連接驅(qū)動(dòng),所以配置文件可能和之前有一點(diǎn)不同。
      server.port=8333
      spring.datasource.url=jdbc:mysql://127.0.0.1:3306/erp?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
      spring.datasource.username=root spring.datasource.password=153963
      spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
      注意:我們使用的 mysql-connector-java 8+ ,JDBC 連接到mysql-connector-java 6+以上的需要指定時(shí)區(qū)
      serverTimezone=GMT%2B8。另外我們之前使用配置 Mysql數(shù)據(jù)連接是一般是這樣指定
      driver-class-name=com.mysql.jdbc.Driver,但是現(xiàn)在不可以必須為 否則控制臺(tái)下面的異常:
      Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver
      class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via
      the SPI and manual loading of the driver class is generally unnecessary.
      上面異常的意思是:com.mysql.jdbc.Driver 被棄用了。新的驅(qū)動(dòng)類是 com.mysql.cj.jdbc.Driver
      。驅(qū)動(dòng)程序通過SPI自動(dòng)注冊(cè),手動(dòng)加載類通常是不必要。

      如果你非要寫把com.mysql.jdbc.Driver 改為com.mysql.cj.jdbc.Driver 即可。

      1.6 創(chuàng)建用戶類 Bean
      public class User { private int id; private String name; private int age;
      private double money; ... 此處省略getter、setter以及 toString方法 }
      二 全注解的方式

      先來看一下 全注解的方式,這種方式和后面提到的 xml 的方式的區(qū)別僅僅在于 一個(gè)將 sql 語句寫在 java 代碼中,一個(gè)寫在 xml
      配置文件中。全注方式解轉(zhuǎn)換成 xml 方式僅需做一點(diǎn)點(diǎn)改變即可,我在后面會(huì)提到。

      項(xiàng)目結(jié)構(gòu):



      2.1 Dao 層開發(fā)

      UserDao.java
      @Mapper public interface UserDao { /** * 通過名字查詢用戶信息 */ @Select("SELECT * FROM
      user WHERE name = #{name}") User findUserByName(@Param("name") String name);
      /** * 查詢所有用戶信息 */ @Select("SELECT * FROM user") List<User> findAllUser(); /** *
      插入用戶信息 */ @Insert("INSERT INTO user(name, age,money) VALUES(#{name}, #{age},
      #{money})") void insertUser(@Param("name") String name, @Param("age") Integer
      age, @Param("money") Double money); /** * 根據(jù) id 更新用戶信息 */ @Update("UPDATE user
      SET name = #{name},age = #{age},money= #{money} WHERE id = #{id}") void
      updateUser(@Param("name") String name, @Param("age") Integer age,
      @Param("money") Double money, @Param("id") int id); /** * 根據(jù) id 刪除用戶信息 */
      @Delete("DELETE from user WHERE id = #{id}") void deleteUser(@Param("id") int
      id); }
      2.2 service 層
      @Service public class UserService { @Autowired private UserDao userDao; /** *
      根據(jù)名字查找用戶 */ public User selectUserByName(String name) { return
      userDao.findUserByName(name); } /** * 查找所有用戶 */ public List<User>
      selectAllUser() { return userDao.findAllUser(); } /** * 插入兩個(gè)用戶 */ public void
      insertService() { userDao.insertUser("SnailClimb", 22, 3000.0);
      userDao.insertUser("Daisy", 19, 3000.0); } /** * 根據(jù)id 刪除用戶 */ public void
      deleteService(int id) { userDao.deleteUser(id); } /** * 模擬事務(wù)。由于加上了
      @Transactional注解,如果轉(zhuǎn)賬中途出了意外 SnailClimb 和 Daisy 的錢都不會(huì)改變。 */ @Transactional
      public void changemoney() { userDao.updateUser("SnailClimb", 22, 2000.0, 3); //
      模擬轉(zhuǎn)賬過程中可能遇到的意外狀況 int temp = 1 / 0; userDao.updateUser("Daisy", 19, 4000.0, 4);
      } }
      2.3 Controller 層
      @RestController @RequestMapping("/user") public class UserController {
      @Autowired private UserService userService; @RequestMapping("/query") public
      User testQuery() { return userService.selectUserByName("Daisy"); }
      @RequestMapping("/insert") public List<User> testInsert() {
      userService.insertService(); return userService.selectAllUser(); }
      @RequestMapping("/changemoney") public List<User> testchangemoney() {
      userService.changemoney(); return userService.selectAllUser(); }
      @RequestMapping("/delete") public String testDelete() {
      userService.deleteService(3); return "OK"; } }
      2.4 啟動(dòng)類
      //此注解表示SpringBoot啟動(dòng)類 @SpringBootApplication //
      此注解表示動(dòng)態(tài)掃描DAO接口所在包,實(shí)際上不加下面這條語句也可以找到 @MapperScan("top.snailclimb.dao") public
      class MainApplication { public static void main(String[] args) {
      SpringApplication.run(MainApplication.class, args); } }
      2.5 簡(jiǎn)單測(cè)試

      上述代碼經(jīng)過測(cè)試都沒問題,這里貼一下根據(jù)姓名查詢的測(cè)試的結(jié)果。



      三 xml 的方式

      項(xiàng)目結(jié)構(gòu):


      相比于注解的方式主要有以下幾點(diǎn)改變,非常容易實(shí)現(xiàn)。

      3.1 Dao 層的改動(dòng)

      我這里只演示一個(gè)根據(jù)姓名找人的方法。

      UserDao.java
      @Mapper public interface UserDao { /** * 通過名字查詢用戶信息 */ User
      findUserByName(String name); }
      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="top.snailclimb.dao.UserDao"> <select id="findUserByName"
      parameterType="String" resultType="top.snailclimb.bean.User"> SELECT * FROM
      user WHERE name = #{name} </select> </mapper>
      3.2 配置文件的改動(dòng)

      配置文件中加入下面這句話:

      mybatis.mapper-locations=classpath:mapper/*.xml

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          6080一级片 | 中国明星裸体欣赏合集 | 亚欧精品久久无码产区 | 吴梦梦一区二区在线观看 | 国产成人无码精品aa免费 | jlzz国产丝袜18老师女人 | 美女露出粉嫩的尿口 | 骚逼一级片 | 张文慈三级理伦电影 | 嫩草网站入口一区二区 |