MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录,mybatis使用了ORM(Object Relational Mapping)思想,也就是对象关系模型,简单的说,就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现了操作数据库表
也就是说MyBatis就是用来代替JDBC的,由于MyBatis解决了JDBC比较死板的模式,将sql语句与java的逻辑代码分离,将sql写在了xml文件中,通过xml文件或者注解来调用数据库,方便灵活了很多,也高效了很多。
之前在网上搜索搭建MyBatis的博客,发现讲解的很草率,搭建完环境后有很多异常,对于初学者来说,直接复制xml配置文件和properties文件,而不知道替换哪些东西,导致最后执行很多操作确报异常,出不了结果。这篇博客是分享给大家,同时也为自己做一个记录,以保证用的时候可以快速的搭建起一个MyBatis环境。
循序渐进,先来看看快速简单的搭建
准备工作
首先需要导入mybatis的jar包和mysql连接驱动的jar包,这里已经上传到百度云盘:
链接:https://pan.baidu.com/s/1_f2gBpvR9eVKdFz3wboPeg
提取码:u50n
如果有Maven,直接引入依赖:
mybatis的jar包:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
数据库连接驱动jar包:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
既然要测试数据库,我们提前在数据库里面创建一些数据,建一个mybatis的数据库,里面存入一张表Student,插入三条数据即可。
//创建数据库
create database mybatis;
//创建表Student,分别创建了属性id,姓名,性别,email
crreate table Student(
Sid int primary key,
Sname varchar(20),
Ssex char(10),
Smail varchar(20))
//添加数据,随便插入三条数据
insert into Student values(1,'张三','男','33333');
insert into Student values(2,'李四','男','333332');
insert into Student values(3,'王红','男','11111');
建好后,就是这样一张表:
下来创建目录结构,为Student表创建一个类,因为数据库中映射出来的一条记录就是一个Student对象
对目录结构做简单说明:java是类和接口的根目录,resources是资源文件的根目录,写地址的时候都是从根目录下开始写。
创建Pojo类
pojo类就是数据库对应出来的实体类,提供一系列get/set方法
先写Student类,类的属性和数据库Student表的字段对应
public class Student {
private int Sid;
private String Sname;
private String Ssex;
private String Smail;
public Student(int sid, String sname, String ssex, String smail) {
Sid = sid;
Sname = sname;
Ssex = ssex;
Smail = smail;
}
public Student() {
}
public int getSid() {
return Sid;
}
public void setSid(int sid) {
Sid = sid;
}
public String getSname() {
return Sname;
}
public void setSname(String sname) {
Sname = sname;
}
public String getSsex() {
return Ssex;
}
public void setSsex(String ssex) {
Ssex = ssex;
}
public String getSmail() {
return Smail;
}
public void setSmail(String smail) {
Smail = smail;
}
@Override
public String toString() {
return "Student{" +
"Sid=" + Sid +
", Sname='" + Sname + '\'' +
", Ssex='" + Ssex + '\'' +
", Smail='" + Smail + '\'' +
'}';
}
}
映射接口
下面写映射接口StudnetMapper,在这里面定义sql功能的方法。
这里我们先来测试查询功能,所以只写一个查询方法
public interface StudentMapper {
public Student getById(int id);
}
配置文件
接下来是配置文件
先来看看mybaits.xml文件,创建方法是直接新建txt文件,在后面加上后缀名.xml就可以创建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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="StudentMapper.xml"/>
</mappers>
</configuration>
注意这段xml文件要替换的地方:
相信写过JDBC都应该懂1,2,3,4的替换,这四个参数在配置JDBC的时候也会进行配置。下面对这几个参数进行说明:
- 加载驱动,这里是对类型进行加载,如果用的mysql用的是8.几版本,那么驱动和我一样,如果是5.几,应该是 com.mysql.jdbc.Driver
- url:这个是固定写法,mybatis是数据库名,问号后面是为了解决字符编码问题和时区问题,所加的东西,如果有报错,可以加上,关于这个问题,我在JDBC的时候做了讲解:
JDBC讲解 - username:用户名
- passward: 密码
- 这个文件就是用来写sql的xml文件,文件放在resources资源根目录下,所以写的是相对路径。
StudentMapper映射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.tulun.dao.StudentMapper">
<select id="getById" resultType="com.tulun.bean.Student">
select * from Student where Sid = #{Sid}
</select>
</mapper>
要替换的地方如下:
- 这里写的是刚才定义功能的接口地址,从java文件开始写绝对路径
- id写的是方法名,这个sql要对应哪个方法。
- 返回值类型,sql执行完成后,返回的类型是什么
- sql语句,根据不同的功能写上sql语句,这里是根据id查询学生记录
连接测试
最后写mybatis进行连接,测试:
public class mybatis {
public static void main(String[] args) throws IOException {
//全局配置文件
String resource = "mybatis.xml";
//读取配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建sqlSesstionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//创建sqlSession
SqlSession sqlSession = factory.openSession();
//通过动态代理产生对象,获得映射
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
//查询id为1的学生,打印从数据库拿到的学生信息
Student student = mapper.getById(1);
System.out.println(student);
}
}
这里同样需要替换resource的路径,拿到配置文件后读取配置文件,创建会话,通过动态代理产生对象,从数据库映射得到Student对象,最后打印该对象,查看结果是否正确。
结果正确。
Log4j的配置
如果运行成功的话,为了以后更好的进行分析操作数据库的过程,所以需要去配置log4j打印日志。
在resources文件夹下创建log4j配置文件,文件名:log4j.properies
然后填入配置信息:
## debug 级别
log4j.rootLogger=DEBUG,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd-HH\:mm\:ss,SSS} [%t] [%c] [%p] - %m%n
log4j.logger.com.mybatis=DEBUG /
##输出sql 语句
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG</strong>
这样在运行的时候就会有过程出来。
这样,log4j就配置完成了。
这就完成了第一个MyBatis环境的简单搭建,如果有什么错误或者问题,在评论区指出,我会及时进行解决。