本文目录
前言
- 博主有一定的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)
- 博主这边刚学习也是用的破解版的IDEA
- 安装方法可参考IntelliJ IDEA 2019.3.3 [Windows]安装 仅供学习测试用,开发请支持正版!
- 安装完毕后可能没有xml文件的格式模板,需要进行基础配置才能继续学习mybatis框架的开发
- 可参考IDEA创建xml配置,其中第五步名称可以改成XML更为直观!
MyBatis框架的相关知识原理
- 说了这么多,终于要到激动人心的框架学习了,这个框架是什么呢,又有什么用呢?
- 其实吧,MyBatis做为JAVA闻名于世的SSM三大框架之一,简单来说就是一个基于Java的持久层(数据访问层)框架,其功能主要是负责数据库的访问,以及实现更快捷地增删改查操作。
- MyBatis以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录
- 主要特点如下:简单易学???用多了感觉好像确实是这样,不过刚入门踩不玩的坑还挺多的
- 详情请见百度百科MyBatis
官方英文文档(mybatis-3.4.1.pdf)以及2017年的jar包集合网盘下载
- 官方英文文档百度网盘下载
链接: https://pan.baidu.com/s/1bqTLWmes2MeOGB47sysdKA 提取码: ty85
- 官方英文文档天翼云盘下载
https://cloud.189.cn/t/mqym22ZnQzyy(访问码:3smv)
- jar集合包百度网盘下载
链接: https://pan.baidu.com/s/1r-qfdPF1C1DW9uvwXYEDhA 提取码: rw24
- jar集合包天翼云盘下载
https://cloud.189.cn/t/mQfIzizuai6z(访问码:hnz2)
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即可生成
- 整体代码为
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;
}
}
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
<?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>
5.在src里新建测试类MyBatisTest.java
- 首先将src文件夹权限更改为Test Resources Root,测试文件源码的权限
MyBatisTest.java
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();
}
}
}
6.在conf里新建映射文件MyBatisMapper.xml
- 根据官方文档(mybatis-3.4.1.pdf)中2.1.5的位置有一个sql映射文件(EmployeeMapper.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.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>
7.在src里新建接口类MyBatisMapper.java
- 根据官方文档(mybatis-3.4.1.pdf)中的提示,说新方法是采用接口类进行接口式编程方法
package com.atguigu.mybatis.dao;
import com.atguigu.mybatis.bean.Employee;
public interface EmployeeMapper {
// 接口式编程有很多的好处,接口规定的方法拥有更强的类型检查,传Integer就不能传Double类型
// 接口本身就是一个抽象,抽出了规范
// 接口实现用mabatis
public Employee getEmpById(Integer id);
}
8.在conf里新建log4j.xml
- 将jar集合包里的log4j.xml复制到conf路径下
- 实现日志打印
<?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>
9.在测试类里右键test01()测试运行图
- 可以发现成功读取到了数据库内的信息。