SpringBoot中利用MyBatis進(jìn)行數(shù)據(jù)操作的示例
本例所用環(huán)境:
- SpringBoot
- MySQL
- MyBatis
- jdk1.8
- Maven
首先我們先創(chuàng)建一個(gè)SpringBoot 項(xiàng)目。

數(shù)據(jù)庫連接配置
##數(shù)據(jù)庫連接配置(部署到哪臺(tái),對(duì)應(yīng)的ip需修改) spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis?connectTimeout=1000&useSSL=false&useUnicode=true&characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=root spring.datasource.driver=com.mysql.jdbc.Driver
數(shù)據(jù)庫中的數(shù)據(jù)

環(huán)境配好之后,下面分別介紹一下通過注解或者通過xml映射的形式這兩種方法來使用MyBatis。
通過xml映射的形式
測(cè)試Bean
package com.example.demo.model;
public class User {
private int id;
private String name;
private String sex;
private int age;
public User() {
}
public User(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public User(int id, String name, String sex, int age) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
XML形式的具體操作
將mapper定義為接口,只定義方法。具體的實(shí)現(xiàn)在同名的xml文件中。
package com.example.demo.mapper;
import com.example.demo.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface UserMapper {
User getByName(@Param("name") String name);
boolean insert(User user);
boolean update(@Param("name") String name, @Param("sex") String sex, @Param("age") int age);
void delete(@Param("name") String name);
}
<?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.demo.mapper.UserMapper">
<select id="getByName" resultType="com.example.demo.model.User" parameterType="java.lang.String">
SELECT * FROM tb_user WHERE name = #{name}
</select>
<insert id="insert" parameterType="com.example.demo.model.User" useGeneratedKeys="true">
INSERT INTO tb_user(name, sex, age) VALUES(#{name}, #{sex}, #{age})
</insert>
<update id="update" parameterType="com.example.demo.model.User">
UPDATE tb_user SET sex=#{sex}, age=#{age} WHERE name=#{name}
</update>
<delete id="delete" parameterType="java.lang.String">
DELETE FROM tb_user WHERE name = #{name}
</delete>
</mapper>
兩個(gè)文件通過mapper.xml文件中的 namespace 形成映射。
一般情況下,我們用到的資源文件(各種xml,properites,xsd文件等)都放在src/main/resources下面(springboot回到對(duì)應(yīng)的位置加載文件),利用maven打包時(shí),maven能把這些資源文件打包到相應(yīng)的jar或者war里。但是,有的時(shí)候我們習(xí)慣把它和Mapper.java放一起,都在src/main/java下面,這樣利用maven打包時(shí),就需要修改pom.xml文件,來把mapper.xml文件一起打包進(jìn)jar或者war里了,否則,這些文件不會(huì)被打包的。(maven認(rèn)為src/main/java只是java的源代碼路徑)。
所以說,如果要將mapper.java和mapper.xml文件放在同一個(gè)位置,就需要在pom文件中指定xml文件的加載位置。

<build> <resources> <!-- maven項(xiàng)目中src源代碼下的xml等資源文件編譯進(jìn)classes文件夾, 注意:如果沒有這個(gè),它會(huì)自動(dòng)搜索resources下是否有mapper.xml文件, 如果沒有就會(huì)報(bào)org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): ... --> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <!--將resources目錄下的配置文件編譯進(jìn)classes文件 --> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>
如果mapper.java和mapper.xml文件是分開放置的,則不需要以上配置。

Service服務(wù)
package com.example.demo.service;
import com.example.demo.model.User;
public interface UserService {
User getUserByName(String name);
boolean addUser(User user);
boolean updateUser(String name, String sex, int age);
void deleteUser(String name);
}
Service服務(wù)的實(shí)現(xiàn)類
package com.example.demo.service.impl;
import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService{
@Autowired
UserMapper userMapper;
@Override
public User getUserByName(String name) {
User user = userMapper.getByName(name);
if (null != user){
return user;
}
return null;
}
@Override
public boolean addUser(User user) {
return userMapper.insert(user);
}
@Override
public boolean updateUser(String name, String sex, int age) {
return userMapper.update(name, sex, age);
}
@Override
public void deleteUser(String name) {
userMapper.delete(name);
}
}
測(cè)試接口
package com.example.demo.controller;
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
UserService userService;
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String index(){
User user = userService.getUserByName("gyl");
return user.getName()+"--"+user.getSex()+"--"+user.getAge();
}
}
如果一切順利,即將輸入localhost:8080/index 你將看到如下內(nèi)容

通過注解的方式
package com.example.demo.mapper;
import com.example.demo.model.User;
import org.apache.ibatis.annotations.*;
@Mapper
public interface UserMapper {
@Select("select * from TB_USER where NAME = #{name}")
User getByName(@Param("name") String name);
@Insert("insert into TB_USER(NAME, SEX, AGE) values(#{name}, #{sex}, #{age})")
boolean insert(User user);
@Update("update TB_USER set SEX=#{sex}, AGE=#{age} where NAME=#{name}")
boolean update(@Param("name") String name, @Param("sex") String sex, @Param("age") int age);
@Delete("delete from TB_USER where NAME = #{name}")
void delete(@Param("name") String name);
}
如果一切順利,即將輸入localhost:8080/index 你將看到如下內(nèi)容

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Spring boot Mybatis 整合(完整版)
- Spring Boot集成MyBatis實(shí)現(xiàn)通用Mapper的配置及使用
- Spring Boot基礎(chǔ)入門之基于注解的Mybatis
- 創(chuàng)建SpringBoot工程并集成Mybatis的方法
- springboot+springmvc+mybatis項(xiàng)目整合
- springboot集成mybatisplus的方法
- Spring Boot 整合mybatis 使用多數(shù)據(jù)源的實(shí)現(xiàn)方法
- 深入理解SpringBoot中關(guān)于Mybatis使用方法
- SpringBoot整合Mybatis使用Druid數(shù)據(jù)庫連接池
相關(guān)文章
Spring File Storage文件的對(duì)象存儲(chǔ)框架基本使用小結(jié)
在開發(fā)過程當(dāng)中,會(huì)使用到存文檔、圖片、視頻、音頻等等,這些都會(huì)涉及存儲(chǔ)的問題,文件可以直接存服務(wù)器,但需要考慮帶寬和存儲(chǔ)空間,另外一種方式就是使用云存儲(chǔ),這篇文章主要介紹了Spring File Storage文件的對(duì)象存儲(chǔ)框架基本使用小結(jié),需要的朋友可以參考下2024-08-08
springboot+mybaties項(xiàng)目中掃描不到@mapper注解的解決方法
本文主要介紹了springboot+mybaties項(xiàng)目中掃描不到@mapper注解的解決方法,該報(bào)錯(cuò)表明掃描不到Mapper層,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05
Spring?Boot集成LiteFlow規(guī)則引擎的詳細(xì)過程
本文詳細(xì)介紹了如何在Spring?Boot應(yīng)用程序中集成LiteFlow規(guī)則引擎,并探討如何使用LiteFlow庫來實(shí)現(xiàn)業(yè)務(wù)流程的規(guī)則處理,將通過具體的示例來展示如何在Spring?Boot應(yīng)用程序中配置和使用LiteFlow規(guī)則引擎,以提高系統(tǒng)的靈活性和可維護(hù)性,感興趣的朋友跟隨小編一起看看吧2024-07-07
SpringBoot2.0集成MQTT消息推送功能實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot2.0集成MQTT消息推送功能實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Java?Collection接口中的常用方法總結(jié)
這篇文章將大概用代碼案例簡(jiǎn)單總結(jié)一下?Collection?接口中的一些方法,我們會(huì)以他的實(shí)現(xiàn)類?Arraylist?為例創(chuàng)建對(duì)象??煲黄饋砜纯窗?/div> 2022-12-12
java數(shù)據(jù)結(jié)構(gòu)與算法之桶排序?qū)崿F(xiàn)方法詳解
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)與算法之桶排序?qū)崿F(xiàn)方法,結(jié)合具體實(shí)例形式詳細(xì)分析了桶排序的概念、原理、實(shí)現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下2017-05-05最新評(píng)論

