【SpringBoot系列】六、SpringBoot 数据库操作(集成MyBatis)

Spring对持久化的支持,不单只支持JDBC,为各种支持的持久化技术都提供了简单的模板和回调:

ORM持久化技术模板类
JDBC(JdbcTemplate)org.springframework.jdbc.core.JdbcTemplate
Hibernate5.0org.springframework.orm.hibernate5.HibernateTemplate
JPAorg.springfrmaework.orm.jpa.JpaTemplate
IBatis(MyBatis)org.springframework.orm.ibatis.SqlMapClientTemplate

本章节主要讲解通过SpringBoot如何访问操作数据库,以下述三种方式来操作数据库:

  • JdbcTemplate
  • JPA
  • MyBatis

本文以简单的对数据库表的基本操作为例进行说明。

数据库使用MySQL数据库,新建t_user表。

CREATE TABLE `t_user` (
  `userid` varchar(10) NOT NULL,
  `username` varchar(255) DEFAULT NULL,
  `sex` varchar(2) DEFAULT NULL,
  `age` int(3) DEFAULT NULL,
  PRIMARY KEY (`userid`)
);

1、JdbcTemplate

      JdbcTemplate是Spring对JDBC的模板封装,提供了一套JDBC模板,能够让我们写持久层代码时减少冗余代码,简化JDBC代码,使代码更加简洁,有点像DBUtils。JdbcTemplate在实际开发中一般不会使用,通常都是使用MyBatis、Hibernate等更加成熟、优秀的数据持久层框架,这里只是对它的使用做一说明,知道如何用它就可以啦。

1.1 引入JdbcTemplate依赖包

在工程的pom.xml中,添加如下依赖包信息。

<!-- JdbcTemplate依赖包 -->
<dependency>
      	<groupId>org.springframework.boot</groupId>
       	<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

如果没有导入mysql依赖包,则需要添加mysql-connector-java。

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>

1.2 持久层(dao层)

    实现持久层dao完成数据的插入。

com.xcbeyond.springboot.dao.UserDao.java

package com.xcbeyond.springboot.dao;

import com.xcbeyond.springboot.model.User;

public interface UserDao {
	/**
	 * 插入User
	 * @param user
	 * @return
	 */
	public int insertUser(User user);
}

com.xcbeyond.springboot.dao.impl.UserDaoJdbcTemplateImpl.java

package com.xcbeyond.springboot.dao.impl;

import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;

import com.xcbeyond.springboot.dao.UserDao;
import com.xcbeyond.springboot.model.User;
/**
 * JdbcTemplate方式完成对t_user表的操作
 * @author xcbeyond
 * 2018年7月12日上午11:53:44
 */
//作用于持久层.用来表明该类是用来执行与数据库相关的操作(即dao对象),并支持自动处理数据库操作产生的异常
@Repository
public class UserDaoJdbcTemplateImpl implements UserDao {
	
	//自动导入依赖的bean
	@Autowired
	private NamedParameterJdbcTemplate jdbcTemplate;
	
	@Override
	public int insertUser(User user) {
		String sql = "INSERT INTO t_user (userid, username, sex, age) VALUES (:userid, :username, :sex, :age)";
		Map<String,Object> param = new HashMap<String,Object>();
		param.put("userid", user.getUserId());
		param.put("username", user.getUserName());
		param.put("sex", user.getSex());
		param.put("age", user.getAge());
		
		return jdbcTemplate.update(sql, param);
	}

}

1.3、控制层(Controller)

com.xcbeyond.springboot.controller.ControllerDemo.java

(完整代码请从文末github地址获取)

/**
 * 通过JdbcTemplate方式插入用户信息
* @return
*/
@RequestMapping("/insertUserByJdbcTemplate")
public String insertUserByJdbcTemplate() {
	User user = new User();
	user.setUserId("xcbeyond");
	user.setUserName("xcbeyond");
	user.setSex("F");
	user.setAge(18);
		
	int ret = userDao.insertUser(user);
	return String.valueOf(ret);
		
}

在浏览器中输入http://localhost:8888/demo/insertUserByJdbcTemplate,完成数据的插入。

2、JPA

    JPA(Java Persistence API)是java持久层API,一个简化对象关系映射来管理Java应用程序中关系数据库的规范,可以直接使用对象而不是使用SQL语句。在JPA中,我们可以通过实体类轻松地操作数据库中的表。

2.1、引入依赖包

    通过JPA的方式来实现数据库的操作,首先需要引入如下的依赖包。

<!-- JPA依赖包 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> 

2.2、ORM

在model中User类中增加Entiy的注解,并指定表名(如果不指定,则默认表名为类名user),然后需要指定ID及生成策略。

(这些都是JPA相关的知识,不清楚的可以详细查看JPA)

 

3、MyBatis

MyBatis方式是极力推荐的方式,操作简单,代码量少。

3.1引入依赖包

引入mybatis-spring-boot-starter依赖包。

<!-- MyBatis依赖包 -->
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.1.1</version>
</dependency>

3.2 mapper接口

     mapper接口中,定义对数据库的增、删、改、查具体操作,不用实现类。

/springboot/src/main/java/com/xcbeyond/springboot/mapper/UserMapper.java

package com.xcbeyond.springboot.mapper;

import com.xcbeyond.springboot.model.User;

/**
 * User数据访问层接口
 * @author xcbeyond
 * 2018年7月16日下午5:01:17
 */
public interface UserMapper {
	/**
	 * 通过userid查询
	 * @param userid
	 * @return
	 */
	public User queryUserByUserid(String userid);
}

3.3 配置mapper

      MyBatis一般可以通过XML或者注解的方式来指定操作数据库的SQL,建议使用XML方式。首先,我们需要配置mapper文件夹,即:/springboot/src/main/resources/mybatis/mapper/,并在application.properties中配置mapper路径。

#mybatis
#mybatis自身的一些配置,例如基本类型的别名
mybatis.config-location=classpath:mybatis/mybatis-config.xml
#指定mapper文件夹的位置
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

创建要操作表的mapper.xml SQL文件,即:/springboot/src/main/resources/mybatis/mapper/UserMapper.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.xcbeyond.springboot.mapper.UserMapper">
	<sql id="column">
		userid,username,sex,age
	</sql>

	<select id="queryUserByUserid" parameterType="string"
		resultType="com.xcbeyond.springboot.model.User">
		select
		<include refid="column"></include>
		from t_user
		where userid = #{userid}
	</select>
</mapper>

注:符合ByBatis的sql 配置,详细配置可查询ByBatis相关知识。

3.4 controller

com.xcbeyond.springboot.controller.ControllerDemo.java,追加queryUserByUserid方法,如下:

/**
* 通过userid查询
* @param userid
* @return
*/
@RequestMapping(value="/queryUserByUserid", method=RequestMethod.GET)
public String queryUserByUserid(@RequestParam("userid") String userid) {
	User user = userMapper.queryUserByUserid(userid);
	return user.toString();
	
}

3.5 测试

    启动SpringBoot项目后,在浏览器中输入http://localhost:8888/demo/queryUserByUserid?userid=xcbeyond,进行查询显示查询结果。

启动时,报如下错误:

***************************
APPLICATION FAILED TO START
***************************

Description:

A component required a bean of type 'com.xcbeyond.springboot.mapper.UserMapper' that could not be found.


Action:

Consider defining a bean of type 'com.xcbeyond.springboot.mapper.UserMapper' in your configuration.

这是因为在SpringBoot启动时,无法找到Mapper,导致无法被SpringBoot管理。可以采取如下几种方式来管理UserMapper接口。

方式一:使用@Mapper注解

为了让UserMapper能够让别的类进行引用,我们可以在UserMapper类上添加@Mapper注解:

package com.xcbeyond.springboot.mapper;

import com.xcbeyond.springboot.model.User;

/**
 * User数据访问层接口
 * @author xcbeyond
 * 2018年7月16日下午5:01:17
 */
@Mapper
public interface UserMapper {
	/**
	 * 通过userid查询
	 * @param userid
	 * @return
	 */
	public User queryUserByUserid(String userid);
}

直接在Mapper类上面添加注解@Mapper,这种方式要求每一个mapper类都需要添加此注解,比较麻烦。

方式二:使用@MapperScan注解

需在启动类中添加@MapperScan注解,指定要扫描的Mapper类的包的路径即可。

package com.xcbeyond.springboot;

import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * SpringBoot启动类
 * @author xcbeyond
 * 2018年7月2日下午5:41:45
 */
@SpringBootApplication
//指定要扫描的Mapper类的包的路径
@MapperScan("com.xcbeyond.springboot.mapper")
public class SpringbootApplication {
	private static Logger logger = LoggerFactory.getLogger(SpringbootApplication.class);
	
	public static void main(String[] args) {
		if(logger.isDebugEnabled()) {
			logger.debug("SpringBoot starting...");
		}
		SpringApplication.run(SpringbootApplication.class, args);
	}
}

总结:

    本章节主要讲述了在SpringBoot中如何操作数据库,其中JdbcTemplate和JPA只是说明在SpringBoot中可以这样操作数据库,但在实际项目中推荐使用MyBaits方式,这样会非常方便的。

 

项目源码:https://github.com/xcbeyond/micro-service/tree/master/springboot

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xcbeyond

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

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

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

打赏作者

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

抵扣说明:

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

余额充值