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框架的基本操作,就已经完成了。