SpringBoot项目学习03之整合MyBatis操作数据库

1.准备工作

在操作数据库之前,我们需要创建数据库和建相关表。因此,需要保证已经安装了数据库,这里我就选择MySQL数据库。先使用连接工具连接MySQL数据库,创建数据库和表。
SQL脚本

CREATE DATABASE /*!32312 IF NOT EXISTS*/`springboot_bbs` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `springboot_bbs`;

DROP TABLE IF EXISTS `tb_user`;

CREATE TABLE `tb_user` (
  `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '登录名',
  `password` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '密码',
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

这里最好使用可视化工具建表,操作更加方便简洁,可以看到这里建了一个用户表。
在这里插入图片描述

2.使用jdbc操作数据库

2.1 添加依赖

在进行数据库连接前,首先将相关jar包依赖引入到项目中,Spring Boot针对JDBC 的使用提供了对应的Starter包:spring-boot-starter-jdbc,方便在Spring Boot生态中更好的使用JDBC,这里使用MySQL作为数据库,因此也需要引入 MySQL驱动包。
pom文件

        <!-- jdbc-starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- MySQL 驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

2.2 数据库配置信息

为了能够连接上数据库并进行操作,我们也需要对数据库的基本信息进行配置,比如数据库地址、帐号、密码等信息,这些配置依然是在 application.properties 文件中增加。有一点需要注意,在 Spring Boot 2 中,数据库驱动类推荐使用 com.mysql.cj.jdbc.Driver,而不是com.mysql.jdbc.Driver 类了。

# datasource config
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_bbs?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=12345678

2.3 测试连接

最后,我们编写一个测试类来测试一下目前能否获得与数据库的连接,在测试类 SpringbootBbsApplicationTests中添加datasourceTest()单元测试方法。

@SpringBootTest
class SpringbootBbsApplicationTests {
    // 注入数据源对象
    @Autowired
    private DataSource dataSource;
    @Test
    public void datasourceTest() throws SQLException{
        Connection connection = dataSource.getConnection();

        System.out.println(connection);
        if(connection != null){
            connection.close();
        }
    }
}

在这里插入图片描述
可以看到成功获取了数据库连接对象。在项目启动前,Spring Boot已经默认向IOC 容器中注册了一个类型为HikariDataSource的数据源对象,不然我们在使用 @Autowired进行数据源的引入时肯定会报错。

2.4 操作MySQL数据库

在正确配置数据源之后,可以直接在代码中使用JdbcTemplate对象进行数据库操作,接下来我们创建两个方法,一个是查询tb_user中的数据,另一个方法是根据传入的参数向tb_user表中新增数据。
JdbcController.java

@RestController
public class JdbcController {
    @Autowired
    JdbcTemplate jdbcTemplate;

    // 新增一条数据
    @GetMapping("/users/insert")
    public Object insert(String name, String password){
        if(StringUtils.isEmpty(name) || StringUtils.isEmpty(password)){
            return false;
        }
        jdbcTemplate.execute("insert into tb_user(`name`,`password`) value (\"" + name + "\",\"" + password + "\")");
        return true;
    }

    // 查询所有记录
    @GetMapping("/users/queryAll")
    public List<Map<String, Object>> queryAll(){
        List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from tb_user");
        return list;
    }
}

访问http://localhost:8080/bbs/users/insert?name=qwer&password=1234,测试插入方法。
在这里插入图片描述
在这里插入图片描述
可以看到插入成功了。
访问http://localhost:8080/bbs/users/queryAll,测试查询方法。
在这里插入图片描述

3.整合MyBatis框架操作数据库

3.1 添加依赖

如果要将MyBatis整合到当前项目中,首先我们需要将其依赖配置增加到pom.xml 文件中。一般选择稳定版依赖。

<!-- 引入 MyBatis 场景启动器,包含其自动配置类及 MyBatis 3 相关依赖 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.3</version>
</dependency>

3.2 配置Mybatis

Spring Boot整合MyBatis时几个比较需要注意的配置参数:

mybatis.config-location

  • 配置mybatis-config.xml路径,mybatis-config.xml中配置MyBatis基础属性,如果项目中配置了mybatis-config.xml文件需要设置该参数。

mybatis.mapper-locations

  • 配置 Mapper 文件对应的 XML 文件路径。

mybatis.type-aliases-package

  • 配置项目中实体类包路径
# MyBatis配置
# 这里只需要一个配置就可以了
# mybatis.config-location=classpath:mybatis-config.xml
mybatis.mapper-locations=classpath:mapper/*Dao.xml
# mybatis.type-aliases-package=com.pikacho.springbootbbs.entity

3.3 新建实体类和Mapper接口

在entity包下新建User类,将tb_user中的字段映射到该实体类中,在dao包中新建 UserDao接口,并定义增删改查四个接口。
User.java

@Data
public class User {
    private Integer id;
    private String name;
    private String password;
}

UserDao.java

@Mapper
public interface UserDao {

    List<User> findAllUsers();
    
    int insertUser(User User);

    int updUser(User User);
    
    int delUser(Integer id);
}

3.4 创建Mapper接口的映射文件

在resources/mapper目录下新建Mapper接口的映射文件UserDao.xml,之后进行映射文件的编写。

  • 1.定义映射文件与Mapper接口的对应关系,需要将UserDao.xml的与对应的 UserDao接口类之间的关系定义出来
<mapper namespace="com.pikacho.springbootbbs.dao.UserDao">
  • 2.配置表结构和实体类的对应关系
<resultMap type="com.pikacho.springbootbbs.entity.User" id="UserResult">
    <result property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="password" column="password"/>
 </resultMap>
  • 3.针对对应的接口方法,编写具体的SQL语句,最终的UserDao.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.pikacho.springbootbbs.dao.UserDao">
    <resultMap type="com.pikacho.springbootbbs.entity.User" id="UserResult">
        <result property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="password" column="password"/>
    </resultMap>
    <select id="findAllUsers" resultMap="UserResult">
        select id,name,password from tb_user
        order by id desc
    </select>
    <insert id="insertUser" parameterType="com.pikacho.springbootbbs.entity.User">
        insert into tb_user(name,password)
        values(#{name},#{password})
    </insert>
    <update id="updUser" parameterType="com.pikacho.springbootbbs.entity.User">
        update tb_user
        set
        name=#{name},password=#{password}
        where id=#{id}
    </update>
    <delete id="delUser" parameterType="int">
        delete from tb_user where id=#{id}
    </delete>
</mapper>

3.5 测试

在controller包下新建MyBatisController类,并新增 4 个方法分别接收对于tb_user 表的增删改查请求。

@RestController
public class MyBatisController {

    @Resource
    UserDao userDao;

    @GetMapping("/mybatis/users/queryAll")
    public List<User> queryAll(){
        return userDao.findAllUsers();
    }

    @GetMapping("/mybatis/users/insert")
    public Boolean insert(String name, String password){
        if (StringUtils.isEmpty(name) || StringUtils.isEmpty(password)) {
            return false;
        }
        User user = new User();
        user.setName(name);
        user.setPassword(password);
        return userDao.insertUser(user) > 0;
    }

    @GetMapping("/mybatis/users/update")
    public Boolean update(Integer id, String name, String password){
        if (id == null || id < 1 || StringUtils.isEmpty(name) || StringUtils.isEmpty(password)) {
            return false;
        }
        User user = new User();
        user.setId(id);
        user.setName(name);
        user.setPassword(password);

        return userDao.updUser(user) > 0;
    }
    @GetMapping("/mybatis/users/delete")
    public Boolean delete(Integer id){
        if(id == null || id < 1){
            return false;
        }
        return userDao.delUser(id) > 0;
    }
}

启动类增加Mapper扫描,在启动类中添加对Mapper包扫描@MapperScan,Spring Boot启动的时候会自动加载包路径下的Mapper 接口。

@MapperScan("/com.pikacho.springbootbbs.dao")
@SpringBootApplication
public class SpringbootBbsApplication {

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

分别测试四个方法:
http://localhost:8080/bbs/mybatis/users/insert?name=1234&password=1234
在这里插入图片描述
在这里插入图片描述
http://localhost:8080/bbs/mybatis/users/update?id=2&name=1234&password=qwer
在这里插入图片描述
在这里插入图片描述
http://localhost:8080/bbs/mybatis/users/queryAll
在这里插入图片描述
http://localhost:8080/bbs/mybatis/users/delete?id=2
在这里插入图片描述
在这里插入图片描述
至此,Spring Boot项目整合MyBatis框架的基本操作,就已经完成了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

picacho_pkq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值