Mybatis
运用于持久层的优秀框架
几乎避免了所有的JDBC代码和手动设置参数以及获取结果集。
可以使用简单的XML或注解来配置和映射原生类型,接口和java的pojo为数据库记录
持久层
完成持久化工作的代码块集合。
层与层界限十分明显
数据持久化
-
持久化就是将程序的数据在持久状态和瞬时状态转化的过程
-
数据库,io文件持久化。
为什么要持久化
- 内存:断电即失
- 需要长时间保存
为什么需要 Mybatis
-
便捷,简单,简洁,快捷。
-
传统的JDBC代码太复杂并且繁琐。
-
sql与代码分离,减低耦合,提高可维护性
-
提供映射标签,支持对象与数据库的 orm 字段的关系映射
-
提供对象关系映射标签,支持对象关系组建维护
-
提供 xml 支持编写动态的 sql
第一个用idea搭建的maven工程的Mybatis程序(无限踩坑)
mysql 版本 8.0.19
maven 版本 3.6.3
idea版本 2019
jdk版本1.8
系统版本 Windows 10
版本不同所进行的操作可能会有很大的变化。
- 先看一下我的目录结构
- maven工程的的创建,打开idea。
- 项目内的配置,在src的pox.xml内导入相关依赖。
<dependencys>
<!--mysql驱动一定要和你的mysql版本接近-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
<!--mybatis版本-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--测试包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- 实现slf4j接口并整合,以下都是为了输出mybatis运行时的日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.10.0</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/Java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.* </include>
</includes>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
-
然后进入你的resources包中 创建mybatis的配置文件 mybatis_config.xml ,复制以下内容,按照实际情况修改数据库名,账号密码等。
<?xml version="1.0" encoding="UTF8" ?> <!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://数据库ip(localhost):3306/数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false"/> <property name="username" value="用户名"/> <property name="password" value="密码"/> </dataSource> </environment> </environments> </configuration>
-
然后继续在resources包内创建 日志相关的配置文件 log4j.properties 名字千万别搞错了,然后复制以下文件粘贴。
# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
- 继续完善包结构,创建以下包,和相关的class文件。
-
User 类中是你数据库的模型类。存放以下内容,模型类中变量名要和你数据库中列名相同。
package cn.zzzyuan.pojo;
public class User {
private Integer id;
private String name;
private String pwd;
public User() {
}
public User(Integer id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", Pwd='" + pwd + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String password) {
this.pwd = password;
}
}
- UseDao 中复制以下代码。
package cn.zzzyuan.dao;
import cn.zzzyuan.pojo.User;
import java.util.List;
public interface UserDao {
List<User> getUserList() ;
}
- MybatisUtils 中复制以下代码
package cn.zzzyuan.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;
/**
* @author 杂货店的阿猿
*/
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory = null;
private static InputStream inputStream = null;
static {
try {
String resource = "mybatis_config.xml";
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
- 然后在 resources 包中 创建 UserMapper.xml 配置文件,复制以下代码。
- namespace 中是你的 UserDao 文件地址
- select id 是用来查询的,id为你 UserDao 中的抽象方法,resultType 中 是返回的结果类型,选择你的 User 地址。
- 下方填写相关的查询语句
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.zzzyuan.dao.UserDao">
<select id="getUserList" resultType="cn.zzzyuan.pojo.User">
select * from mybatis.user
</select>
</mapper>
- 我们需要将 UserMapper.xml 文件在 mybatis 的配置文件中 声明一下,在 mybatis_config.xml 中加入一下语句。
<mappers>
<mapper resource="UserMapper.xml"></mapper>
</mappers>
- 然后在test.java 中创建相对应的测试包和测试类(如图),并且复制以下代码
package dao;
import cn.zzzyuan.dao.UserDao;
import cn.zzzyuan.pojo.User;
import cn.zzzyuan.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserDaoTest {
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();
for (User user:userList){
System.out.println(user.toString());
}
sqlSession.close();
}
}
-
运行一下测试类 ,完美输出,我们的第一个 mybatis 程序就完成了,相比与以前,一句JDBC代码都没了。