【Mybatis】接口式编程连接mysql数据库

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

  • 博主有一定的java基础知识,原本是由于最近的项目开发,需要使用安卓开发连接mysql数据库,于是被迫需要跳着学此框架
  • 主要写了博主遇到的一些问题和解决方法,前人踩坑,后人乘凉唉。
  • 若写的不好请勿吐槽。。

安装mysql数据库

  • 用mysql数据库,肯定要先安装mysql数据库
  • 安装完成后,使用管理员权限打开cmd

  • 打开以后输入net start mysql 回车后开始出现启动mysql服务的提示,如若没有请重新安装mysql
  • 修改mysql连接用户密码,默认好像是一串很长的英文字符串,自行修改,马上需要用到
  • 可参考如何修改mysql密码
  • mysql服务开启后即可关闭,直到下一次关机之前这个服务都会一直开着。

安装Navicat Premium 15来便捷管理mysql

  • 博主这边主要使用了破解版的Navicat Premium 15(以下简称为NP15)来方便管理数据库
  • 具体破解教程可参考NP15安装。仅供学习测试用,开发请支持正版!
  • 打开NP15,新建数据库连接,随便起个名博主这里用test,简单明了

  • 创建完进行连接,可以看到右边显示了连接的基本属性,mysql数据库端口号默认为3306。

  • 接着肯定要创建mysql数据库

  • 博主命名新数据库为mybatis

  • 再接着自然是要打开我们得mybatis数据库去创建表和设计表了

  • 设计表时将id设置为主键,便于后续操作

安装IDEA(号称最强大的IDE)

MyBatis框架的相关知识原理

  • 说了这么多,终于要到激动人心的框架学习了,这个框架是什么呢,又有什么用呢?
  • 其实吧,MyBatis做为JAVA闻名于世的SSM三大框架之一,简单来说就是一个基于Java的持久层(数据访问层)框架,其功能主要是负责数据库的访问,以及实现更快捷地增删改查操作。
  • MyBatis以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录
  • 主要特点如下:简单易学???用多了感觉好像确实是这样,不过刚入门踩不玩的坑还挺多的

  • 详情请见百度百科MyBatis

官方英文文档(mybatis-3.4.1.pdf)以及2017年的jar包集合网盘下载

  • 官方英文文档百度网盘下载

链接: pan.baidu.com/s/1bqTLWmes… 提取码: ty85

  • 官方英文文档天翼云盘下载

cloud.189.cn/t/mqym22ZnQ…

  • jar集合包百度网盘下载

链接: pan.baidu.com/s/1r-qfdPF1… 提取码: rw24

  • jar集合包天翼云盘下载

cloud.189.cn/t/mQfIzizua…

IntelliJ IDEA中各种文件夹标记的区别(test sources、resources、test resources)

  • 网上可查

打开IDEA配置JAVA项目

1.新建项目,选择JAVAEE

  • 继续next,项目名可以也起为test,点击下方finish

  • 就会生成一个基本上只有基础配置的项目

2.在src中编写JAVA类Employee.java

  • 新建命名,主要先用.class后缀的java文件

  • 类名定义为Employee
  • 其中只是定义了4个私有成员变量,其他的方法用IDE直接生成即可

  • 按住ctrl全部选中点击OK即可生成

  • 整体代码为
<pre class="prettyprint hljs java">package com.atguigu.mybatis.bean;

public class Employee {

    private Integer id;
    private String last_name;
    private String email;
    private String gender;

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", last_name='" + last_name + '\'' +
                ", email='" + email + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

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

    public String getLast_name() {
        return last_name;
    }

    public void setLast_name(String last_name) {
        this.last_name = last_name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
}</pre>

3.在src中新建lib文件夹来配置驱动

  • 用来存放jar包

  • 将前面的jar集合包打开,找到下图这三个jar包复制进去
  • 原本只需要后2个包,这里导入log包是为了打印日志方便我们初学者查看数据库是否成功连接并导出信息
  • 同时将lib文件夹权限更改为Test Resoures Root,否则可能因权限不够无法读取到驱动文件

  • 导入jar包后选中3个,右键点击add as library,接着弹出提示点击OK即可配置好,导入项目环境之中,相当于eclipse中的build path

4.新建conf文件夹存放mybatis-config.xml

  • 首先按前面更改文件夹权限将conf也进行更改

  • 没学过xml语法会产生的大坑,必须要在xml文件中&需要用转义符&替换才可以

  • 后期使用properties文件,引入外部配置文件可避免这个问题

  • 根据官方文档(mybatis-3.4.1.pdf)中2.1.2的位置有一个xml映射文件需要我们进行更改

  • 由于博主这里用的是mysql8.0以上的最新版,连接方式也不同以往旧版本,这里需要进行修改

  • 这里数据库密码为123456

<pre class="prettyprint hljs 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">

                <!--
                    Mysql使用jdbc连接数据库
                 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config)中-->
    <mappers>
        <mapper resource="EmployeeMapper.xml"/>
    </mappers>
</configuration></pre>

5.在src里新建测试类MyBatisTest.java

  • 首先将src文件夹权限更改为Test Resources Root,测试文件源码的权限

MyBatisTest.java
<pre class="prettyprint hljs swift">package com.atguigu.mybatis.test;

import com.atguigu.mybatis.bean.Employee;
import com.atguigu.mybatis.dao.EmployeeMapper;
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 org.junit.jupiter.api.Test;

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

/**
 *  1、接口式编程
 *      原生:     Dao     ====>> DaoImapl
 *      mybatis    Mapper ====>> xxMapper.xml
 *
 *  2、SqlSession代表和数据库的一次会话,用完必须关闭
 *  3.SqlSession和connection一样都是非线程安全的,每次使用都应该去获取新的对象
 *      不能写成员变量,多线程中会产生资源竞争,可能产生误关闭
 *  4、mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。
 *      将接口和xml进行绑定
 *      EmoplyeeMapper empMapper = sqlSession.getMapper(EmployeeMapper.class);
 *  5、两个重要的配置文件:
 *          mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等...系统运行环境信息
 *          sql映射文件:保存了每一个sql语句映射信息。
 *                      将sql抽取出来。
 */

public class MyBatisTest {

    public SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(inputStream);
    }

    /**
     * 1.根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象
     *          有数据源一些运行环境信息
     * 2.sql影射文件,配置了每一个sql,以及sql的封装规则等。
     * 3.将sql映射文件注册在全局配置文件中
     * 4.写代码:
     *          1)、根据全局配置文件得到SqlSessionFactory;
     *          2)、使用sqlSession工厂,获取到sqlSession对象,并使用他来实现增删改查
     *              一个sqlSession就是代表和数据库的一次会话,用完关闭
     *          3)、使用sql的唯一标志来告诉MyBatis执行哪个sql,sql都是存放在sql映射文件中的。
     * @throws IOException
     */
    @Test
    public void test() throws IOException {

        //2.获取sqlSessionFactory实例,能直接执行已经映射的sql语句
        //SQL的唯一标识:statement – Unique identifier matching the statement to use.
        //执行sql要用的参数:parameter – A parameter object to pass to the statement.
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession openSession = sqlSessionFactory.openSession();
        try{
        //org.atguigu.mybatis.EmployeeMapper.selectEmp
        //EmployeeMapper.xml中的namespace和id
        Employee employee = openSession.selectOne("com.atguigu.mybatis.EmployeeMapper.selectEmp",1);
        System.out.println(employee);
        }finally{
            //始终要关
            openSession.close();
        }
    }

    @Test
    public void test01() throws IOException{
        //1、获取sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        //2、获取sqlSession对象
        SqlSession openSession = sqlSessionFactory.openSession();

        try {
            //3、获取接口的实现类对象
            //  会为接口自动的创建一个代理对象,代理对象取执行增删改查

            EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
            Employee employee = mapper.getEmpById(1);
            //System.out.println(mapper.getClass());        //查mapper的类型为代理对象
            System.out.println(employee);
        }finally {
            openSession.close();
        }
    }
}</pre>

6.在conf里新建映射文件MyBatisMapper.xml

  • 根据官方文档(mybatis-3.4.1.pdf)中2.1.5的位置有一个sql映射文件(EmployeeMapper.xml)
<pre class="prettyprint hljs dust"><?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.atguigu.mybatis.dao.EmployeeMapper">
    <!--
    namespace:名称空间;指定为接口的全类名,实现配置文件和接口的动态绑定
    id:唯一标识
    resultType:返回值类型
    #{id}:从传递过来的参数中取出id值

    EmployeeMapper中的方法和id绑定
     public Employee getEmpById(Integer id);

     select标签是接口EmployeeMapper中getEmpById方法的实现
    -->

    <select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee">
        select * from tbl_employee where id = #{id} </select>
</mapper></pre>

7.在src里新建接口类MyBatisMapper.java

  • 根据官方文档(mybatis-3.4.1.pdf)中的提示,说新方法是采用接口类进行接口式编程方法

<pre class="prettyprint hljs java">package com.atguigu.mybatis.dao;

import com.atguigu.mybatis.bean.Employee;

public interface EmployeeMapper {

    //  接口式编程有很多的好处,接口规定的方法拥有更强的类型检查,传Integer就不能传Double类型
    //  接口本身就是一个抽象,抽出了规范
    //  接口实现用mabatis
    public Employee getEmpById(Integer id);

}</pre>

8.在conf里新建log4j.xml

  • 将jar集合包里的log4j.xml复制到conf路径下
  • 实现日志打印
<pre class="prettyprint hljs dust"><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

 <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
   <param name="Encoding" value="UTF-8" />
   <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" />
   </layout>
 </appender>
 <logger name="java.sql">
   <level value="debug" />
 </logger>
 <logger name="org.apache.ibatis">
   <level value="info" />
 </logger>
 <root>
   <level value="debug" />
   <appender-ref ref="STDOUT" />
 </root>
</log4j:configuration></pre>

9.在测试类里右键test01()测试运行图

  • 可以发现成功读取到了数据库内的信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值