Spring入門,Spring Boot Mybatis入門示例

 2023-10-12 阅读 33 评论 0

摘要:Spring Boot Mybatis 入門示例 基于Spring Boot 2.3.4,Junit5 步驟說明 Spring入門。????整個工程的最終目錄結構如下,添加文件或者新建的目錄的參考: └─src├─main│ ├─java│ │ └─com│ │ └─mall│ │ └─MallWeb│ │ ├─controllers│

Spring Boot Mybatis 入門示例


基于Spring Boot 2.3.4,Junit5

步驟說明

Spring入門。????整個工程的最終目錄結構如下,添加文件或者新建的目錄的參考:

└─src├─main│  ├─java│  │  └─com│  │      └─mall│  │          └─MallWeb│  │              ├─controllers│  │              ├─mapper│  │              ├─model│  │              └─services│  └─resources│      └─mybatis│          └─mapper└─test└─java└─com└─mall└─MallWeb└─mapper

數據庫初始化語句

????數據庫表的初始化語句全部在下面,也可以根據自己的情況進行修改

CREATE DATABASE  IF NOT EXISTS `mall`;USE `mall`;CREATE TABLE IF NOT EXISTS `users` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(16) NOT NULL,`password` varchar(16) NOT NULL,`phoneNumber` varchar(15) NOT NULL,`money` int(11) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

build.gradle:依賴添加

Springboot注解,????需要添加下面依賴

  • ‘mysql:mysql-connector-java:8.0.14’
  • ‘org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.0’
  • ‘org.projectlombok:lombok:1.16.16’
dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'//	MySQL數據庫需要implementation 'mysql:mysql-connector-java:8.0.14'//	spring mybatisimplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.0.0'//	lombok,用于Entity的自動get和set方法生成,不用自己寫一大推的get和set方法implementation 'org.projectlombok:lombok:1.16.16'testImplementation('org.springframework.boot:spring-boot-starter-test') {exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'}
}

application.properties:配置添加

????配置文件的編寫需要注意參數的配置,比如SSL那個一般要設置為false,driver-class-name也要注意一下,不要寫錯了,文件的大致內容如下:

# mybatis的config文件位置配置
mybatis.config-location=classpath:mybatis/mybatis-config.xml
# 各個表的xml文件位置配置
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.type-aliases-package=com.neo.model# 數據庫連接信息配置,自行更換數據庫,用戶名和密碼
spring.datasource.url=jdbc:mysql://localhost:3306/mall?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8\&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver#springboot + mybatis設置將SQL語句打印到控制臺
logging.level.com.mall.MallWeb.mapper=debug

代碼編寫

入口環境配置Mapper掃描配置

????在入口函數添加Mapper掃描配置,這樣不必在每個Mapper上加上Mapper注解,大致如下:

package com.mall.MallWeb;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @author lw*/
@SpringBootApplication
@MapperScan("com.mall.MallWeb.mapper")
public class MallWebApplication {public static void main(String[] args) {SpringApplication.run(MallWebApplication.class, args);}}

編寫實體類

????在代碼目錄下創建model文件夾,用于存儲實體(數據庫表)。編輯實體類,大致如下:

ppackage com.mall.MallWeb.model;import java.io.Serializable;/*** @author lw*/
public class User implements Serializable {private Long id;private String name;private String password;private String phoneNumber;private Long money;public User(String name, String password, String phoneNumber) {this.name = name;this.password = password;this.phoneNumber = phoneNumber;this.money = 0L;}@Overridepublic String toString() {return id + "::" + name + "::" + password + "::" + phoneNumber + "::" + money;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}public Long getMoney() {return money;}public void setMoney(Long money) {this.money = money;}}

Mapper接口類

????新建Mapper文件夾,里面放Mapper相關的接口類。編寫Mapper接口類,大致內容如下,@Repository解決idea里面的bean使用錯誤

package com.mall.MallWeb.mapper;import com.mall.MallWeb.model.User;
import org.springframework.stereotype.Repository;import java.util.List;/*** @author lw*/
@Repository
public interface UserMapper {List<User> queryAll();User queryOne(Long id);void add(User user);void update(User user);
}

Mytatis配置文件mybatis-config.xml

????新建文件夾 resource/mybatis,下面新建:mybatis-config.xml 文件,寫入下面的內容:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><typeAliases><typeAlias alias="Integer" type="java.lang.Integer" /><typeAlias alias="Long" type="java.lang.Long" /><typeAlias alias="HashMap" type="java.util.HashMap" /><typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" /><typeAlias alias="ArrayList" type="java.util.ArrayList" /><typeAlias alias="LinkedList" type="java.util.LinkedList" /></typeAliases>
</configuration>

表users查詢配置文件User.xml

????新建文件夾 resouce/mybatis/mapper,新建文件:User.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.mall.MallWeb.mapper.UserMapper" ><resultMap id="BaseResultMap" type="com.mall.MallWeb.model.User" ><id column="id" property="id" jdbcType="BIGINT" /><result column="name" property="name" jdbcType="VARCHAR" /><result column="password" property="password" jdbcType="VARCHAR" /><result column="phoneNumber" property="phoneNumber" jdbcType="VARCHAR"/><result column="money" property="money" jdbcType="BIGINT" /></resultMap><sql id="Base_Column_List" >id, name, password, phoneNumber, money</sql><insert id="add" parameterType="com.mall.MallWeb.mapper.UserMapper" useGeneratedKeys="true" keyProperty="id">INSERT INTOusers(name, password, phoneNumber, money)VALUES(#{name}, #{password}, #{phoneNumber}, #{money})</insert><update id="update" parameterType="com.mall.MallWeb.model.User">UPDATEusersSET<trim suffixOverrides="," suffix="WHERE id = #{id}"><if test="name != null">name = #{name},</if><if test="password != null">password = #{password},</if><if test="phoneNumber != null">phoneNumber = #{phoneNumber},</if><if test="money != null">money = #{money},</if></trim></update><select id="queryAll" resultMap="BaseResultMap">SELECT<include refid="Base_Column_List" />FROM users</select><select id="queryOne" resultType="com.mall.MallWeb.model.User" parameterType="java.lang.Long">SELECT<include refid="Base_Column_List" />FROM usersWHERE id = #{id}</select></mapper>

測試文件UserMapperTest

????大致打代碼如下:

????在Junit5中沒有了RunWith,換成了ExtendWith。測試中使用了真實的數據庫,所有開啟了測試后的數據回滾,避免測試數據進入數據庫

package com.mall.MallWeb.mapper;import com.mall.MallWeb.model.User;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.transaction.annotation.Transactional;import java.util.List;@ExtendWith(SpringExtension.class)
@SpringBootTest
public class UserMapperTest {@Autowiredprivate UserMapper userMapper;@Test@Transactionalpublic void addUserTest() {User user = new User("testUser", "testPassword", "testPhone");userMapper.add(user);assert userMapper.queryAll().size() != 0;}@Testpublic void queryTest() {List<User> users = userMapper.queryAll();assert users.size() != 0;for (User user: users) {System.out.println(user.toString());}}@Test@Transactionalpublic void updateTest() {User user = new User("testUser", "testPassword", "testPhone");userMapper.add(user);System.out.println(user.toString());User newUser = userMapper.queryOne(user.getId());System.out.println(newUser.toString());newUser.setName("updateUser");System.out.println(newUser.toString());userMapper.update(newUser);System.out.println(newUser.toString());User queryUser = userMapper.queryOne(user.getId());assert queryUser.getName().equals("updateUser");}
}

controllers目錄下視圖文件:UserController.java

package com.mall.MallWeb.controllers;import com.mall.MallWeb.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.Map;/*** 用戶*/
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserMapper userMapper;@GetMapping("/users")public Map users() {Map response = new HashMap();response.put("status", "success");response.put("users", userMapper.queryAll());return response;}
}

啟動與測試

????現在開始運行程序,使用瀏覽器訪問鏈接:http://localhost:8080/user/users

????能看到有數據或者沒有數據都是成功的(下面的數據是提前插入的)

{"users": [{"id": 6,"name": "testUser","password": "testPasspword","phoneNumber": "testPhone","money": 0},{"id": 7,"name": "testUser","password": "testPasspword","phoneNumber": "testPhone","money": 0},{"id": 8,"name": "testUser","password": "testPasspword","phoneNumber": "testPhone","money": 0},{"id": 9,"name": "testUser","password": "testPasspword","phoneNumber": "testPhone","money": 0},{"id": 10,"name": "testUser","password": "testPassword","phoneNumber": "testPhone","money": 0},{"id": 11,"name": "testUser","password": "testPassword","phoneNumber": "testPhone","money": 0},{"id": 12,"name": "testUser","password": "testPassword","phoneNumber": "testPhone","money": 0}],"status": "success"
}

參考鏈接

  • Spring boot 啟動報錯-Reason Failed to determine a suitable driver class
  • java連接mysql失敗Path does not chain with any of the trust anchors
  • SpringBoot+Mybatis框架項目的單元測試和集成測試(下)
  • Spring Boot(六):如何優雅的使用 Mybatis
  • mybatis-spring-boot-test-autoconfigure
  • Idea inspects batis mapper bean wrong
  • Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required in spring mock mvc test for spring boot with mybatis
  • mybatis傳入多個參數
  • MyBatis多參數傳遞之Map方式示例——MyBatis學習筆記之十三
  • MyBatis多參數傳遞的四種方式
  • Mybatis 開啟控制臺打印sql語句

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/135592.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息