天天看点

基于Maven,MyBatis,MySQL的IDEA开发Java项目前言MySQLMavenMyBatis编写测试代码

基于Maven,MyBatis,MySQL的IDEA开发Java项目

  • 前言
  • MySQL
  • Maven
    • 1.Maven环境配置
    • 2.Maven仓库配置
    • 3. IDEA下Maven配置
    • 4.如何用Maven导入各种jar包
  • MyBatis
    • 1.进行mybatis核心配置
    • 2.创建mybatis核心工具类
  • 编写测试代码
    • 创建实体类
    • 创建dao层
    • 创建测试类

前言

本专栏是在MySQL数据库下,基于Maven项目管理工具,用MyBatis取代JDBC繁琐化操作,在IDEA编辑器下进行Java项目开发

MySQL

MySQL就是一个数据库,类似于微软的SQL Sever数据库服务。

对于MySQL的安装基本操作可以查看其他相关资源,这里放出本人之前写的MySQL基本命令行语法,之后的操作需要用到的时候可以进行查看。

请点击

MySQL命令行基本语法

用MySQL命令行创建一个数据库表,内容如下

基于Maven,MyBatis,MySQL的IDEA开发Java项目前言MySQLMavenMyBatis编写测试代码

Maven

Maven就是一个Java项目管理工具,之前使用eclipse编写代码时,需要繁琐的导入jar包,而Maven可以通过依赖集,自动下载jar包,只需要知道相关的你需要使用到的jar包即可。

1.Maven环境配置

Maven下载成功后,首先需要配置Maven相关环境变量,可自行百度百科.

2.Maven仓库配置

基于Maven,MyBatis,MySQL的IDEA开发Java项目前言MySQLMavenMyBatis编写测试代码
基于Maven,MyBatis,MySQL的IDEA开发Java项目前言MySQLMavenMyBatis编写测试代码

需要建一个本地仓库,里面用来存放Maven下载的各种jar包;

Maven文件夹下找到设置的XML,在里面的本地仓库路径文件填写你创建的本地仓库文件夹

3. IDEA下Maven配置

基于Maven,MyBatis,MySQL的IDEA开发Java项目前言MySQLMavenMyBatis编写测试代码

在IDEA设置里面,选择Maven版本,使用之前设置好的settings.xml,选择你创建好的本地仓库文件夹

4.如何用Maven导入各种jar包

1.创建你自己的基于maven的Java项目,注意组织名的编写规范

基于Maven,MyBatis,MySQL的IDEA开发Java项目前言MySQLMavenMyBatis编写测试代码

2.找到你自己已经创建好的基于maven的Java项目,在pom.xml下进行相关操作。

xml就是一个语言,不做任何事情,就是用来传输,存储数据
基于Maven,MyBatis,MySQL的IDEA开发Java项目前言MySQLMavenMyBatis编写测试代码

创建一个dependencies集,下面就可以写很多dependency,导入各种jar包,这里我们看到,导入了一个mybatis的依赖,用来简化数据库操作,还有mysql的连接驱动用来连接数据库,以及Junit测试。

如果你需要导入什么包,只需要进入https://www.mvnrepository.com/.

进行查找就行,找个下载最多的

<dependencies>
        <!---mybatis的依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!---mysql连接驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!---单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
           
基于Maven,MyBatis,MySQL的IDEA开发Java项目前言MySQLMavenMyBatis编写测试代码

之后在右侧选择maven,刷新一下,进行相关下载。

到这里,我们关于Maven的基本配置已经设置成功

MyBatis

MyBatis 是一款优秀的持久层框架。

它支持自定义 SQL、存储过程以及高级映射。

MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

什么是持久层???

Java中有Dao层(持久层),Service层(业务逻辑实现),Controller层(只负责接收用户请求并返回响应数据)

DAO层:

DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做原子操作,增删改查。

Service层:

Service层叫服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事物控制。

Controler层:

Controler负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。

1.进行mybatis核心配置

基于Maven,MyBatis,MySQL的IDEA开发Java项目前言MySQLMavenMyBatis编写测试代码

在resources下新建一个mybatis-config.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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ii?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="edu/hqu/mybatis/dao/UserMapper.xml"/>
    </mappers>
</configuration>
           

我们这里要更改你想要连接的数据库以及你之前mysql创建的账号和密码

<property name="url" value="jdbc:mysql://localhost:3306/ii?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
           
<mappers>
        <mapper resource="edu/hqu/mybatis/dao/UserMapper.xml"/>
    </mappers>
           

1.就是这里的ii改成别的你想要的数据库名,以及下面的username和password都改成你的账户密码,一般系统管理员都是root

2.mapper要和自己创建的mapper相关联

mybatis的核心配置完成以后就可以和数据库连接了

2.创建mybatis核心工具类

基于Maven,MyBatis,MySQL的IDEA开发Java项目前言MySQLMavenMyBatis编写测试代码
package edu.hqu.mybatis.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MybatisUtil {

        private static SqlSessionFactory sqlSessionFactory;
    // 获取sqlSession的工厂
        static {
            try {
                String resource = "mybatis-config.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            }catch (IOException e){
                e.printStackTrace();
            }
        }
//既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
 // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
        public static SqlSession getSqlSession(){
            return sqlSessionFactory.openSession();
        }
    }


           

需要拿到sqlSessionFactory,才能生产出执行sql的sqlSession

sqlSessionFactory是通过resources去读取配置文件加载成流,

然后在通过sqlSessionFactoryBuilder加载这个流然后构建成工厂

每次都去获取比较麻烦,所以我们一般封装成一个工具类

简而言之,在mybatis核心工具类里,首先要有sqlSessionFactory,之后要有sqlSession,在sqlSession里可以有SQL命令

编写测试代码

创建实体类

基于Maven,MyBatis,MySQL的IDEA开发Java项目前言MySQLMavenMyBatis编写测试代码
package edu.hqu.mybatis.pojo;

public class User {
    private int uid;
    private String uname;
    private String upassword;

    public User(int uid, String uname, String upassword) {
        this.uid = uid;
        this.uname = uname;
        this.upassword = upassword;
    }

    public User() {
}

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", uname='" + uname + '\'' +
                ", upassword='" + upassword + '\'' +
                '}';
    }

    public int getUid() {
        return uid;
    }

    public String getUname() {
        return uname;
    }

    public String getUpassword() {
        return upassword;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public void setUpassword(String upassword) {
        this.upassword = upassword;
    }
}


           

这里的实体类最好与数据库的相关属性一一对应

创建dao层

基于Maven,MyBatis,MySQL的IDEA开发Java项目前言MySQLMavenMyBatis编写测试代码

dao层里面写两个,一个是UserMapper接口,一个是UserMapper.xml,实际上就是xml里面写SQL语句,接口用来调用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="edu.hqu.mybatis.dao.UserMapper">
    <!--绑定一个对应的mapper接口,我们这里与UserMapper关联-->

    <!--全限定名-->
    <!--确定绝对路径-->
    <select id="getAllUsers" resultType="edu.hqu.mybatis.pojo.User">
        select * from user
    </select>
    <select id="getUserById" parameterType="int" resultType="edu.hqu.mybatis.pojo.User">
        select * from user where uid=#{uid}
    </select>
</mapper>

           
package edu.hqu.mybatis.dao;

import edu.hqu.mybatis.pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> getAllUsers();
    User getUserById(int uid);
}
           

parameterType="int"表示SQL语句是有参的,无参就不用加,

resultType="edu.hqu.mybatis.pojo.User"是指你的实体类返回类型在哪

List getAllUsers();表示返回结果是泛型,因为是alluser,都是user类型

User getUserById(int uid);表示有参返回user类型

创建测试类

基于Maven,MyBatis,MySQL的IDEA开发Java项目前言MySQLMavenMyBatis编写测试代码
package edu.hqu.mybatis.dao;

import edu.hqu.mybatis.pojo.User;
import edu.hqu.mybatis.utils.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserMapperTest {
    @Test
    public void testGetAllUsers() {
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> allUsers = mapper.getAllUsers();
        for (User allUser : allUsers) {
            System.out.println(allUser);
        }
    }
    @Test
    public void testGetUserById(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User userById = mapper.getUserById(2);
        System.out.println(userById);

    }
}

           

我们创建两个测试类,用来分别测试之前写的GetAllUsers方法和GetUserById方法

**SqlSession sqlSession = MybatisUtil.getSqlSession();

UserMapper mapper = sqlSession.getMapper(UserMapper.class);**就是生成一个sqlSession和UserMapper相互关联,这两句在测试时候都要写。

之后是具体的测试方法实现,

List allUsers = mapper.getAllUsers();

for (User allUser : allUsers) {

System.out.println(allUser);

}

User userById = mapper.getUserById(2);

System.out.println(userById);

基于Maven,MyBatis,MySQL的IDEA开发Java项目前言MySQLMavenMyBatis编写测试代码
基于Maven,MyBatis,MySQL的IDEA开发Java项目前言MySQLMavenMyBatis编写测试代码