SpringBoot整合mybatis


這兩天學習了一下SpringBoot的相關內容,記錄一下

1.創建一個SpringBoot項目后,引入依賴(其中lombok插件需要自己安裝)

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.jt.1902</groupId>
   <artifactId>springboot-mybatis</artifactId>
   <version>0.0.1-SNAPSHOT</version>

   <properties>
      <java.version>1.8</java.version>
   </properties>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.1.3.RELEASE</version>
      <relativePath />
   </parent>

   <dependencies>
<dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>

<!--添加屬性注入依賴 -->
<dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-configuration-processor</artifactId>
         <optional>true</optional>
      </dependency>

<!--引入插件lombok 自動的set/get/構造方法插件 -->
<dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
      </dependency>

<!--支持熱部署 -->
<dependency>
         <groupId>org.springframework</groupId>
         <artifactId>springloaded</artifactId>
         <version>1.2.8.RELEASE</version>
      </dependency>

<dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-devtools</artifactId>
      </dependency>

<!--引入數據庫驅動 -->
<dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <scope>runtime</scope>
      </dependency>

<!--引入druid數據源 -->
<dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid</artifactId>
         <version>1.1.12</version>
      </dependency>


      <!--spring整合mybatis-plus -->
<dependency>
         <groupId>com.baomidou</groupId>
         <artifactId>mybatis-plus-boot-starter</artifactId>
         <version>3.0.6</version>
      </dependency>
   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
      </plugins>
   </build>
</project>

 

2.創建如下結構文件

 

(1)表的結構:

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  `sex` char(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `cc`(`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 56 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

SET FOREIGN_KEY_CHECKS = 1;
View Code

 

 (2)編寫實體類com.jt.pojo.User

@Accessors 注解用來配置lombok如何產生和顯示getters和setters的方法。

chain表示生成的方法名是setxx() getxx()的樣子

@Data //set/get/toString
@Accessors(chain = true) //鏈式加載
@NoArgsConstructor //無參構造
@AllArgsConstructor //有參構造
@TableName("user") //對象與數據表完成映射
public class User implements Serializable{
@TableId(type=IdType.AUTO) //主鍵自動
private Integer id;
//@TableField("name")
private String name;
//@TableId("age")
private Integer age;
private String sex;
}

(3)編寫接口com.jt.mapper.UserMapper

該接口繼承自mybatisplus的BaseMapper接口

public interface UserMapper 
extends BaseMapper<User>{
   
//查詢全部的user表中的數據
List<User> findAll();

/**
    * 規定: Mybatis中要求數據傳參必須是單值
* 方案:
    *     0.本身就是單值               id
    *     1.利用對象將數據封裝    id age name
    *     2.將數據封裝為map集合.  @Param("key")int id
    *     3.將數據封裝為array/list
    * @param user
* @return
*/
@Insert("insert into user values(null,#{name},#{age},#{sex})")
int insertUser(User user);
   
//實現用戶修改 age=18的 名稱改為xxx
@Update("update user set name=#{name} where age=#{age}")
int updateUser(User user);

}

 

 

(4)編寫在resources文件中創建mybatis/mapper/UserMapper.xml文件

namespace與接口對應,id與方法名對應

 
        
<?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.jt.mapper.UserMapper">

<select id="findAll" resultType="com.jt.pojo.User">
select * from user
</select>
   
<!-- <insert id="insertUser">
      insert into user values(null,#{name},#{age},#{sex})
   </insert> -->
   
   <!-- <update id="updateUser">
      update user set name=#{name} where age=#{age}
   </update> --> 
</mapper>

(5)編寫接口com,jt.service.UserService

public interface UserService {

List<User> findAll();

int insertUser(User user);
   
int updateUser(User user);
}

(6)編寫實現類com.jt.service.UserServiceImpl

在實現類里利用@AutoWired注解進行自動裝配,而不是在接口上

@Service
public class UserServiceImpl implements UserService{

@Autowired
private UserMapper userMapper;

@Override
public List<User> findAll() {
      
return userMapper.findAll();
   }

@Override
public int insertUser(User user) {
      
return userMapper.insertUser(user);
   }

@Override
public int updateUser(User user) {
      
return userMapper.updateUser(user);
   }
}

 

 

(7)編寫API接口com.jt.Controller.UserController

@RestController注解相當於@ResponseBody + @Controller合在一起的作用

@RestController
public class UserController {
   
@Autowired
private UserService userService;
//用戶通過localhost:8090/findAll獲取用戶數據
@RequestMapping("/findAll")
public List<User> findAll(){
      
return userService.findAll();
   }
//用戶新增
public int insertUser(User user) {
      
return userService.insertUser(user);
   }
   
   
public int updateUser(User user) {
      
return userService.updateUser(user);
   }

 

 

(8)在啟動類中加入對接口的掃描

@SpringBootApplication
//為mapper接口創建代理對象
@MapperScan("com.jt.mapper")
public class SpringBootRun {
   
public static void main(String[] args) {
      
SpringApplication.run(SpringBootRun.class, args);
   }
}

 

3.配置文件

在resources中創建application.yml文件,並編寫配置

 
        
server:
port: 8090
servlet:
context-path: /

#引入數據源配置
spring:
datasource:
#引入druid數據源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

#mybatis-plush配置
mybatis-plus:
#配置別名包
type-aliases-package: com.jt.pojo
  #配置mapper映射
mapper-locations: classpath:/mybatis/mappers/*.xml
  #開啟駝峰映射
configuration:
map-underscore-to-camel-case: true
    
#添加日志輸出
logging:
level:
com.jt.mapper: debug 
 
        

 

 

4.啟動並測試

(1)測試UserMapper接口

 
        
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestCRUD {
   
@Autowired    //從容器中取值
private UserController userController;
   
@Test
public void insertUser() {
User user = new User();
user.setName("小橘子").setSex("女").setAge(18);
userController.insertUser(user);
System.out.println("入庫成功!!!!!");
   }
   
//測試修改
@Test
public void testUpdate() {
User user = new User();
user.setAge(18).setName("哈利波特!!!");
userController.updateUser(user);
   }
}
 
        

 

 

 

 

 (2測試MybatisPlus

 
        
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestMybatisPlus {
@Resource
private UserMapper userMapper;
   
@Test
public void insert() {
User user = new User();
user.setName("mybatisplus");
user.setAge(19);
user.setSex("男");
int rows = userMapper.insert(user);
System.out.println("影響行數:"+rows);
   }
   
/**查詢用戶列表信息
      將對象中不為null的屬性當做where條件
      條件:age=18 
關鍵字說明:
      = eq,> gt,< lt,ge >=,le <=  
   */
@Test
public void testFind() {
//1.方式1.使用對象封裝
//User user = new User();
      //user.setAge(18);
      
      //2.直接使用字段賦值
QueryWrapper<User> queryWrapper 
= new QueryWrapper<User>();
//測試等於
//queryWrapper.eq("age",18);
      //測試大於
queryWrapper.ge("age",18);
List<User> userList = 
userMapper.selectList(queryWrapper);
System.out.println(userList);
   }
   
/**
    * 3.數據更新 將年齡為18歲的用戶改19歲
* entity:需要修改數據的值
* updateWrapper 條件構造器 充當where條件
*/
@Test
public void testUpdate() {
User user = new User();
user.setAge(19);
UpdateWrapper<User> updateWrapper = 
new UpdateWrapper<>();
updateWrapper.eq("age", 18);
userMapper.update(user, updateWrapper);
   }
   
//刪除name字段為null的數據
@Test
public void deleteUser() {
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.isNull("name");
userMapper.delete(queryWrapper);
   }
}
 
        

 

 

 

 

 

 

@Data //set/get/toString
@Accessors(chain = true) //鏈式加載
@NoArgsConstructor    //無參構造
@AllArgsConstructor //有參構造
@TableName("user")    //對象與數據表完成映射
public class User implements Serializable{
    @TableId(type=IdType.AUTO)    //主鍵自動
    private Integer id;
    //@TableField("name")
    private String name;
    //@TableId("age")
    private Integer age;
    private String sex;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM