博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis学习总结(一)——MyBatis入门学习
阅读量:5089 次
发布时间:2019-06-13

本文共 5426 字,大约阅读时间需要 18 分钟。

一、MyBatis 简介

MyBatis是一个支持普通SQL查询存储过程高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

 

二、mybatis + mysql 创建项目

 

1、创建测试项目,普通java项目或者是JavaWeb项目都可以,

  添加相应的jar包 我用的是mybatis-3.4.5.jar 和 mysql-connector-java-5.1.6.jar 

    (本来用的是 mysql-connector-java-6.0.6.jar  出现问题,后面会系统分析)

  如下图所示:

 

2、创建数据库和表,针对MySQL数据库

  SQL脚本如下:

create database mybatis;use mybatis;CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), job VARCHAR(20),hdate DATE,deptno INT);INSERT INTO users(NAME, job, hdate, deptno) VALUES('maoyl', 15, 'c++', now());INSERT INTO users(NAME, job, hdate, deptno) VALUES('spring', 15, 'python', now());

 

3、添加Mybatis的配置文件conf.xml (请忽略注解)

 

4、实体类User类的代码如下:

package com.myl.entity;import java.util.Date;/** *  * @author myl * @date      2018年4月20日   上午7:15:04 *  */public class User {    private int id;    private String name;    private String job;    private Date hdate;    private int deptno;        public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getJob() {        return job;    }    public void setJob(String job) {        this.job = job;    }    public Date getHdate() {        return hdate;    }    public void setHdate(Date hdate) {        this.hdate = hdate;    }    public int getDeptno() {        return deptno;    }    public void setDeptno(int deptno) {        this.deptno = deptno;    }        @Override    public String toString() {        return "User [id=" + id + ", name=" + name + ", job=" + job + ", hdate=" + hdate + ", deptno=" + deptno + "]";    }     }

 

5、定义操作users表的sql映射文件userMapper.xml

  创建一个me.myl.mapping包,专门用于存放sql映射文件,在包中创建一个userMapper.xml文件,如下图所示:

 

4、在mybatisConf.xml文件中注册userMapper.xml文件 (改名字随意定)

 

 6、测试

package com.myl;import java.io.IOException;import java.io.Reader;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 com.myl.entity.User;/** *  * @author myl * @date      2018年4月20日   上午7:18:09 * 测试 */public class Test {    public static void main(String[] args) throws IOException {        String conf = "mybatisConf.xml";        Reader reader = Resources.getResourceAsReader(conf);        SqlSessionFactoryBuilder ssfbuild = new SqlSessionFactoryBuilder();        SqlSessionFactory ssf = ssfbuild.build(reader);        SqlSession session = ssf.openSession();        System.out.println(session);        User user;        user = session.selectOne("getUser",1);                System.out.println(user);            }}

 

执行结果如下:

 

 

遇到问题及解决方案

1、mysql-connector包使用了新的驱动

'com.mysql.jdbc.Driver'驱动类被弃用了,新的驱动类是'com.mysql.cj.jdbc.Driver'。 

这个驱动会通过SPI的方式自动加载,通常不需要人工手动加载。

解决方法1:jdbc.driver的属性值从com.mysql.jdbc.Driver换为com.mysql.cj.jdbc.Driver

解决方法2:在代码中去掉Class.forName(driver);,因为驱动会自动加载。

 2、另一个警告

WARN: Establishing SSL connection without server’s identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn’t set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to ‘false’. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

说明:

不推荐不使用服务器身份验证来建立SSL连接。 

如果未明确设置,MySQL 5.5.45+, 5.6.26+ and 5.7.6+版本默认要求建立SSL连接。 
为了符合当前不使用SSL连接的应用程序,verifyServerCertificate属性设置为’false’。 
如果你不需要使用SSL连接,你需要通过设置useSSL=false来显式禁用SSL连接。 
如果你需要用SSL连接,就要为服务器证书验证提供信任库,并设置useSSL=true。

SSL – Secure Sockets Layer(安全套接层)

解决方法

  关于SSL连接的Warning

  再在URL后面添加一个属性useSSL,并设置为false

  jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT&useSSL=false

3.连接的URL中需要增加时区信息

The server time zone value ‘�й���׼ʱ��’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

服务器的时区值’�й���׼ʱ��’ (就是乱码,可能因为没有设置一个值)不能被识别,或者该值代表了多个时区。 

如果你想获得时区支持的功能,你需要用一个更具体的值来设置服务器或JDBC驱动(通过serverTimezone 属性设置)。

解决方法:

2.连接的URL中需要增加时区信息

  增加serverTimezone属性并设置时区值,测试UTC(世界标准时间)和GMT(格林威治时间)都可以。

  jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT

转载于:https://www.cnblogs.com/maoyali/p/8887975.html

你可能感兴趣的文章
Android可拖动缩放视频悬浮窗
查看>>
from PyQt4.QtGui import * 提示 ImportError: DLL load failed: %1 is not a valid Win32 application.
查看>>
[C++]关于头文件中的防卫式声明
查看>>
130242014034-林伟领-第2次实验
查看>>
JSPatch常见问题解答
查看>>
“error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载)
查看>>
[恢]hdu 2097
查看>>
网页ppt
查看>>
初解,Scala语言中基于Actor的并发编程的机制,并展示了在Spark中基于Scala语言的Actor而产生的消息驱动框架Akka的使用,...
查看>>
整合三个框架遇到问题以及解决办法
查看>>
MySQl注入笔记
查看>>
iOS组件化开发一本地环境配置(一)
查看>>
GO学习笔记 - 数据类型转换
查看>>
XCode - App installation failed (A valid provisioning profile for this executable was not found)
查看>>
1031苹果分级
查看>>
《Windows程序设计(第5版 珍藏版)》配书光盘
查看>>
Python
查看>>
QQ浏览器X5内核问题汇总
查看>>
面向对象(二)
查看>>
使用路径和几何笔
查看>>