Spring Boot web开发(六) 数据访问整合MyBatis

目录

1. JDBC

1.1 添加依赖

1.2 编写JavaBean

1.3 配置数据源

1.4 修改接口层

2. 整合MyBatis

2.1 添加依赖

2.2 添加service层

2.3 添加dao层

2.4 修改controller层


本节还是采用之前文章中的项目,可以加我QQ或者评论邮箱,我把项目打包给你们哦。

1. JDBC

1.1 添加依赖

首先需要在pom文件中添加需要的依赖,数据库连接器和用于访问数据库用到的jdbc依赖:我已经写好了,这里将pom里面的内容进行替换就好了。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.7.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.chtw</groupId>
	<artifactId>spring-boot-02</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>spring-boot-02</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
            <scope>runtime</scope>
        </dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>

        
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

1.2 编写JavaBean

我这里简单实现以下登录操作,判断用户和密码都正确的时候,登录成功。

package com.chtw.entity;

/**
 * @author CHTW
 * @date 2019-10-18-9:44
 */
public class User {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

1.3 配置数据源

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://127.0.0.1:3306/test2
    driver‐class‐name: com.mysql.jdbc.Driver

这里说明一下:如果我们指定了schema,那么在类路径下放一个sql文件的话,在我们启动项目的时候就会帮我们执行这些sql语句,(initialization-mode: always这个是springboot2.0以后必须要加上的,不加的话不能执行)比如:

在我们启动的时候就会帮我们创建user这张表。

user.sql内容如下:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;


INSERT INTO `user` VALUES (1, 'admin', '123456');

SET FOREIGN_KEY_CHECKS = 1;

1.4 修改接口层

    @RequestMapping("/login")
    public String login(HttpServletRequest request, HttpSession session,Model model,User user){
        //设置sql语句需要传入的参数
        List<Object> params = new ArrayList<Object>();
        params.add(user.getUsername());
        params.add(user.getPassword());
        //springboot自动配置了JdbcTemplate操作数据库
        //BeanPropertyRowMapper将数据库查询结果转换为Java类对象。
        List<User> luser = jdbcTemplate.query("select * from user where username=? and password=?",params.toArray(),new BeanPropertyRowMapper<User>(User.class));
        if(luser.size()>0){
            session.setAttribute("loginUser",user.getUsername());
            return "redirect:/main.html";
        }else{
            model.addAttribute("msg","用户或密码错误!");
            return "login";
        }
    }

这样一个简单的登录操作就完成了。

2. 整合MyBatis

mybatis是比较流行的框架,而且它还可以采用mybatis逆向技术去直接生成Javabean、mapper映射文件,以及dao层代码(数据访问层,对某个表的增删改查)。SpringBoot对mybatis也有很好的支持。

2.1 添加依赖

在pom.xml文件中添加mybatis依赖

<dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.1.0</version>
</dependency>

2.2 添加service层

package com.chtw.service;

import com.chtw.entity.User;
import com.chtw.mapper.HelloMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author CHTW
 * @date 2019-10-18-9:41
 */
@Service
public class HelloService {

    @Autowired
    private HelloMapper helloMapper;

    /**
     * 获取所有用户信息
     * @return
     */
    public List<User> getAll(){
        return helloMapper.getAll();
    }

    /**
     * 验证登录函数
     * @param user
     * @return
     */
    public List<User> Login(User user){
        return helloMapper.Login(user);
    }
}

2.3 添加dao层

下面采用的是使用注解进行数据库操作,也可以写一个mapper.xml文件来写我们访问数据库的sql。

注解方式如下:

package com.chtw.mapper;

import com.chtw.entity.User;
//import org.apache.ibatis.annotations.Mapper;
//import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;

import java.util.List;

/**
 * @author CHTW
 * @date 2019-10-18-9:42
 */
@Mapper
public interface HelloMapper {

    @Select("select * from user")
    public List<User> getAll();

    @Select("select * from user where username=#{username} and password=#{password}")
    List<User> Login(User user);
}

使用mapper.xml映射文件的方式如下(推荐使用):

在类路径文件夹下创建一个mybaits文件夹,用于存放mapper映射文件:

在application.yml配置文件中指定一下mapper扫描路径:

mybatis:
  # 指定全局配置文件位置
  config-location: classpath:mybatis/mybatis-config.xml
  # 指定sql映射文件位置
  mapper-locations: classpath:mybatis/*Mapper.xml

新建一个mybatis-config.xml(mybaits自己的配置文件)

<?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="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

在创建user表的映射文件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.chtw.mapper.HelloMapper" >

    <!-- 保证user表的字段和javabean的属性能够一一对应 -->
    <resultMap id="user" type="com.chtw.entity.User">
        <id column="id" property="id" javaType="INTEGER"/>
        <result column="username" property="username" jdbcType="VARCHAR" />
        <result column="password" property="password" jdbcType="VARCHAR" />
    </resultMap>

    <select id="getAll" resultMap="user">
        SELECT * FROM `user`
    </select>

    <select id="Login" resultMap="user">
        SELECT * FROM `user` WHERE username=#{username} AND password=#{password}
    </select>
</mapper>

将dao成的注释去掉:

2.4 修改controller层

将登录接口改一下就好了

    @RequestMapping("/login")
    public String login(HttpServletRequest request, HttpSession session,Model model,User user){
        //设置sql语句需要传入的参数
        List<Object> params = new ArrayList<Object>();
        params.add(user.getUsername());
        params.add(user.getPassword());
        //springboot自动配置了JdbcTemplate操作数据库
        //BeanPropertyRowMapper将数据库查询结果转换为Java类对象。
        //List<User> luser = jdbcTemplate.query("select * from user where username=? and password=?",params.toArray(),new BeanPropertyRowMapper<User>(User.class));
        List<User> luser = helloService.Login(user);
        if(luser.size()>0){
            session.setAttribute("loginUser",user.getUsername());
            return "redirect:/main.html";
        }else{
            model.addAttribute("msg","用户或密码错误!");
            return "login";
        }
    }

本节类容到此结束

本人联系方式2329095893,欢迎各位进行学习讨论

欢迎关注熊熊出没ING公众号,不定时跟新Java、python、信息安全等相关知识哦。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值