eclipse+maven+springBoot(三)[连接数据库,整合Mybatis,实现数据存储读取]

一、前言

这是基于第一部分的demo接着写的,即bootWeb项目,请知悉。
第一部分已经实现了简单的springBoot项目,访问jsp页面。
现准备整合mybatis,以实现与数据库的交互。
这里选用的数据库是mySql。

二、准备工作

1、mySql数据库

请自行下载好mySql数据库,并创建记录下用户名密码。
或者已知其他机器有可连接的mysql数据库。

2、确认mySql服务是否启动

右键“我的电脑/计算机”,选择 管理
在这里插入图片描述
找到服务下的MySQL服务,确保是已经启动着的。
如果没有启动,需要右键-启动。
在这里插入图片描述
3、连接数据库新建表与数据

我这里是用SQLyog连接的MySql数据库,当然也可以用别的。
如果连接不上,可能是MySql服务没启动成功。
新建表user,字段userId,userName,userPassword。
在这里插入图片描述
然后随便插入几条数据。
在这里插入图片描述

三、配置mybatis

  1. 我这里是配置mybatis连接mySql数据库,用的也是spring的数据库连接池(你也可以用c3p0或者其他的)。
    第一部分的pom.xml基础上,新增mybatis和mySql的依赖。然后等待maven自动更新。
    我本地是8.0版本的mySql,所以引入了8的jar。
		<!-- mySql 支持 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.12</version>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>
  1. 在src/main/resources资源目录下新建文件夹mybatis,新建文件mybatis.xml。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

	<!-- 开启二级缓存 -->
	<settings> 
    	<setting name="cacheEnabled" value="true"/>  
	</settings> 

</configuration>
  1. 我选择的是application.yml作为配置文件,在application.yml中简单进行数据库连接配置和mybatis映射配置。
    配置的是自己或者已知的mySql数据库的地址,用户名和密码。

    8.0版本的mySql要加后面的这些东西。(
    ?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false&rewriteBatchedStatements=true

server:
  port: 8080
  
mybatis: 
  config-location: "classpath:mybatis/mybatis.cfg.xml"        # mybatis配置文件所在路径
  mapper-locations: "classpath:mybatis/mapper/**/*.xml"       # mapper映射文件
  type-aliases-package: com.jzj.controller.entity             # 别名类所在包
  
spring:
  application: 
    name: bootWeb                                              #微服务的名字
  datasource: 
    driver-class-name: com.mysql.cj.jdbc.Driver                # mysql驱动包
    url: jdbc:mysql://localhost:3306/home?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false&rewriteBatchedStatements=true                   # 数据库名称
    username: root                                             # 数据库用户名
    password: 123456                                           # 密码
  mvc:
    view:
      prefix: /WEB-INF/jsp/                                   # 视图解析前缀
      suffix: .jsp                                            # 视图解析后缀

这里先启动下项目,保证不报错。

四、代码编写

我们先把每种类型的文件分类建包,除了第一部分的controller,增加entity,service,impl,dao,mapper文件夹。我的目录结构如下:
在这里插入图片描述
自己的目录结构和配置里的目录、代码里的目录一定要保持一致。

1、在entity文件夹下新建User.java

右键entity文件夹,new-Class,填入User,然后Finish。

package com.jzj.entity;
public class User {
	private int userId;
	private String userName;
	private String userPassword;
	
	public User() {
		super();
	}

	public User(int userId, String userName, String userPassword) {
		super();
		this.userId = userId;
		this.userName = userName;
		this.userPassword = userPassword;
	}

	public int getuserId() {
		return userId;
	}

	public void setUserId(int userId) {
		this.userId = userId;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getUserPassword() {
		return userPassword;
	}

	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}

	@Override
	public String toString() {
		return "User [userId=" + userId + ", userName=" + userName + ", userPassword=" + userPassword + "]";
	}
	
}

2、在dao文件夹下UserDao.java

右键dao文件夹,new-Interface,填入UserDao,然后Finish。不要漏了@Mapper注解
在这里插入图片描述

package com.jzj.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.jzj.entity.User;

@Mapper
public interface UserDao {

	/**
	 * 新增用户
	 * @param user
	 * @return
	 */
	public boolean addUser(User user);
	
	/**
	 * 单个查询
	 * @param id
	 * @return
	 */
	public User getUser(int id);
	
	/**
	 * 查询全部
	 * @return
	 */
	public List<User> getUsers();
}

3、在mapper文件夹下新建UserMapper.xml

右键mapper文件夹,new-Other,选择File,填入UserMapper.xml,然后Finish。

<?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.jzj.dao.UserDao">

    <select id="getUser" resultType="com.jzj.entity.User" parameterType="int">
        select * from user where userId=#{id}
    </select>
    
    <select id="getUsers" resultType="com.jzj.entity.User">
    	select * from user
    </select>
    
    <insert id="addUser" parameterType="com.jzj.entity.User">
    	insert into user(userId, userName, userPassword) values(#{userId}, #{userName}, #{userPassword})
    </insert>
    
</mapper>

4、在service文件夹下新建UserService.java

右键service文件夹,new-Interface,填入UserService,然后Finish。

package com.jzj.service;
import java.util.List;
import com.jzj.entity.User;
public interface UserService {
	
	public boolean addUser(User user);
	
	public User getUser(int id);
	
	public List<User> getUsers();
}

5、在service文件夹下的impl文件夹下新建UserServiceImpl.java,用以继承UserService,并重写方法

不要漏了@Service注解

通过@Autowired注解注入刚才写的UserDao,以便调用SQL方法。

package com.jzj.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.jzj.dao.UserDao;
import com.jzj.entity.User;
import com.jzj.service.UserService;

@Service
public class UserServiceImpl implements UserService {

	@Autowired
	private UserDao userDao;
	
	@Override
	public boolean addUser(User user) {
		boolean flag;
		flag = userDao.addUser(user);
		return flag;
	}

	@Override
	public User getUser(int id) {
		User user = userDao.getUser(id);
		return user;
	}

	@Override
	public List<User> getUsers() {
		List<User> users = userDao.getUsers();
		return users;
	}

}

6、在controller文件夹下新建UserController.java。

这里用rest风格的controller,可以看做@Controller注解和@ResponseBody注解的合并,即返回具体数据。

通过@Autowired注解注入UserService,并调用其中的方法。

package com.jzj.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.jzj.entity.User;
import com.jzj.service.UserService;

@RestController
public class UserController {

	@Autowired
	private UserService service;
	
	/**
	 * 新增用户
	 * @param user
	 * @return
	 */
	@RequestMapping(value="/add", method=RequestMethod.POST)
	public boolean addUser(@RequestBody User user){
		boolean flag = service.addUser(user);
		return flag;
	}
	
	/**
	 * 单个查询
	 * @param id
	 * @return
	 */
	@RequestMapping(value="/get/{id}", method=RequestMethod.GET)
	public User getUser(@PathVariable("id") int id){
		User user = service.getUser(id);
		return user;
	}
	
	/**
	 * 查询全部
	 * @return
	 */
	@RequestMapping(value="/getUser/list", method=RequestMethod.GET)
	public List<User> getUsers(){
		List<User> users = service.getUsers();
		return users;
	}
}

7、将App.java这个启动类上的@ComponentScan配置扫描的报文改为上一级,以便扫描所有注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

@EnableAutoConfiguration
@ComponentScan(value = { "com.jzj" })
public class App {
	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}
}

或者使用@SpringBootApplication注解来启动

package com.jzj;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
 
@SpringBootApplication
public class App {
	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}
}

右键App.java,Run As - Java Application,访问http://localhost:8080/getUser/list,成功获得数据库中的数据。
在这里插入图片描述
好了。完!

最后文件目录是这样的
在这里插入图片描述

四、代码提交

没配置git或者svn的,就不用做了。

右键项目,Team - Commit
在这里插入图片描述
填写提交信息,然后Commit。注意选择全部文件。
在这里插入图片描述
右键项目,Team - Remote - Push,推送到远程。
在这里插入图片描述
推送远程成功。
在这里插入图片描述
——————————————————分割线————————————————————

  • Invalid bound statement (not found)错误的可能原因

    • 检查xml文件所在package名称是否和Mapper interface所在的包名
    • mapper的namespace写的不对!!!注意修改。
    • UserDao的方法在UserDao.xml中没有,然后执行UserDao的方法会报此
    • UserDao的方法返回值是List,而select元素没有正确配置ResultMap,或者只配置ResultType!
    • 如果你确认没有以上问题,请任意修改下对应的xml文件,并重新保存.问题解决
    • 看下mapper的XML配置路径是否正确
  • Could not create connection to database server.

    • 检查jar包版本与安装的mySql版本是否一致。比如我安装的是8.0.12的mySql。

——————————————————分割线————————————————————

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值