栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java > SpringBoot

基于 SpringBoot2.0+优雅整合 SpringBoot+Mybatis

SpringBoot 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于 SpringBoot2.0+优雅整合 SpringBoot+Mybatis

(SpringBoot和其他常用技术的整合,可能是你遇到的讲解最详细的学习案例,力争新手也能看懂并且能够在看完之后独立实践。基于最新的 SpringBoot2.0+,是你学习SpringBoot 的最佳指南。) ,欢迎各位 Star。

SpringBoot 整合 Mybatis 有两种常用的方式,一种就是我们常见的 xml 的方式 ,还有一种是全注解的方式。我觉得这两者没有谁比谁好,在 SQL 语句不太长的情况下,我觉得全注解的方式一定是比较清晰简洁的。但是,复杂的 SQL 确实不太适合和代码写在一起。

下面就开始吧!

目录:

  • 一 开发前的准备
    • 1.1 环境参数
    • 1.2 创建工程
    • 1.3 创建数据库和 user 用户表
    • 1.4 配置 pom 文件中的相关依赖
    • 1.5 配置 application.properties
    • 1.6 创建用户类 Bean
  • 二 全注解的方式
    • 2.1 Dao 层开发
    • 2.2 service 层
    • 2.3 Controller 层
    • 2.4 启动类
    • 2.5 简单测试
  • 三 xml 的方式
    • 3.1 Dao 层的改动
    • 3.2 配置文件的改动

一 开发前的准备

1.1 环境参数
  • 开发工具:IDEA
  • 基础工具:Maven+JDK8
  • 所用技术:SpringBoot+Mybatis
  • 数据库:MySQL
  • SpringBoot版本:2.1.0

1.2 创建工程

创建一个基本的 SpringBoot 项目,我这里就不多说这方面问题了,具体可以参考下面这篇文章:

https://blog.csdn.net/qq_34337272/article/details/79563606

1.3 创建数据库和 user 用户表

我们的数据库很简单,只有 4 个字段:用户 id、姓名、年龄、余额,如下图所示:

添加了“余额money”字段是为了给大家简单的演示一下事务管理的方式。

建表语句:

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 文件中的相关依赖

由于要整合 springboot 和 mybatis 所以加入了artifactId 为 mybatis-spring-boot-starter 的依赖,由于使用了Mysql 数据库 所以加入了artifactId 为 mysql-connector-java 的依赖。

    
 
     org.springframework.boot
     spring-boot-starter-web
 
 
     org.mybatis.spring.boot
     mybatis-spring-boot-starter
     1.3.2
 
 
     mysql
     mysql-connector-java
     runtime
 
 
     org.springframework.boot
     spring-boot-starter-test
     test
 
    

1.5 配置 application.properties

由于我使用的是比较新的Mysql连接驱动,所以配置文件可能和之前有一点不同。

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+以上的需要指定时区 serverTimezone=GMT%2B8。另外我们之前使用配置 Mysql数据连接是一般是这样指定driver-class-name=com.mysql.jdbc.Driver,但是现在不可以必须为 否则控制台下面的异常:

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 被弃用了。新的驱动类是 com.mysql.cj.jdbc.Driver。驱动程序通过SPI自动注册,手动加载类通常是不必要。

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

1.6 创建用户类 Bean
public class User {
    private int id;
    private String name;
    private int age;
    private double money;
    ...
    此处省略getter、setter以及 toString方法
}

二 全注解的方式

先来看一下 全注解的方式,这种方式和后面提到的 xml 的方式的区别仅仅在于 一个将 sql 语句写在 java 代码中,一个写在 xml 配置文件中。全注方式解转换成 xml 方式仅需做一点点改变即可,我在后面会提到。

项目结构:

2.1 Dao 层开发

UserDao.java

@Mapper
public interface UserDao {
    
    @Select("SELECT * FROM user WHERe name = #{name}")
    User findUserByName(@Param("name") String name);

    
    @Select("SELECT * FROM user")
    List 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);

    
    @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);

    
    @Delete("DELETE from user WHERe id = #{id}")
    void deleteUser(@Param("id") int id);
}

2.2 service 层
@Service
public class UserService {
    @Autowired
    private UserDao userDao;


    
    public User selectUserByName(String name) {
 return userDao.findUserByName(name);
    }

    
    public List selectAllUser() {
 return userDao.findAllUser();
    }

    
    public void insertService() {
 userDao.insertUser("SnailClimb", 22, 3000.0);
 userDao.insertUser("Daisy", 19, 3000.0);
    }

    

    public void deleteService(int id) {
 userDao.deleteUser(id);
    }

    
    @Transactional
    public void changemoney() {
 userDao.updateUser("SnailClimb", 22, 2000.0, 3);
 // 模拟转账过程中可能遇到的意外状况
 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 testInsert() {
 userService.insertService();
 return userService.selectAllUser();
    }


    @RequestMapping("/changemoney")
    public List testchangemoney() {
 userService.changemoney();
 return userService.selectAllUser();
    }

    @RequestMapping("/delete")
    public String testDelete() {
 userService.deleteService(3);
 return "OK";
    }

}

2.4 启动类
//此注解表示SpringBoot启动类
@SpringBootApplication
// 此注解表示动态扫描DAO接口所在包,实际上不加下面这条语句也可以找到
@MapperScan("top.snailclimb.dao")
public class MainApplication {

    public static void main(String[] args) {
 SpringApplication.run(MainApplication.class, args);
    }

}

2.5 简单测试

上述代码经过测试都没问题,这里贴一下根据姓名查询的测试的结果。

三 xml 的方式

项目结构:

相比于注解的方式主要有以下几点改变,非常容易实现。

3.1 Dao 层的改动

我这里只演示一个根据姓名找人的方法。

UserDao.java

@Mapper
public interface UserDao {
    
    User findUserByName(String name);

}

UserMapper.xml






    


3.2 配置文件的改动

配置文件中加入下面这句话:

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

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号