Mybatis层
介绍
持久层
数据持久化:
持久化就是将程序的数据在持久状态和瞬时状态转化的过程。
内存:断电即失
数据库(jdbc),io文件持久化
生活:冷藏,罐头
为什么需要持久化
有一些对象,不能让他丢掉。
内存太贵了
持久层就是完成持久化工作的代码块,层界限非常明显。
第一个Mybatis程序
思路:搭建环境->导入Mybatis->编写代码->测试
参考文档:mybatis – MyBatis 3 | 简介 注意:特别重要,以下步骤均参考该文档。
搭建环境
1.搭建数据库,使用navicat构造数据库和测试表
2.新建项目
新建一个普通的maven项目;
删除src目录
1)导入maven依赖:
xml
<!--导入依赖-->
<dependencies>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
2)创建一个新模块module
编写mybatis核心配置文件mybatis-config.xml
//mybatis-config.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">
<!--默认的事物管理(不止JDBC)-->
<transactionManager type="JDBC"/>
<!--dataSource type=默认的事数据源-->
<dataSource type="POOLED">
<!-- 数据库的驱动(8.0版本以下的)-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- 数据库的连接路径(和JDBC的差不多)-->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT"/>
<!-- 数据库的账户-->
<property name="username" value="root"/>
<!-- 数据库的密码-->
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--接口的配置文件注册 -->
<mappers>
<mapper class="com.dao.UserMapper"/>
</mappers>
</configuration>
在此之前需要先连接数据库。
注意:连接数据库中URL后面加上?serverTimezone=GMT,如下图中表示连接数据库成功。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TylqUlPH-1624940257503)(C:\Users\ZYH.LAPTOP-32L7159T\AppData\Roaming\Typora\typora-user-images\image-20210629120030349.png)]
编写mybatis工具类,在module中main里面创建包com.dao/com.pojo/com.utils。
首先我们在pojo层中定义数据库参数(此处参数应该与我们在navicat中的参数保持一致,)、声明构造方法(无参以及包含参数的),同时声明各个参数的getter和setter方法。**特别注意:**均可使用快捷键ALT+INSERT。
package com.pojo;
public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
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 getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
接下来我们在dao层定义一个接口UseMapper,接口中给出查询数据库所有和查询某个成员的方法的定义。
package com.dao;
import com.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserMapper {
List<User> getUserList();
User getByID(@Param("id") int id);
}
同时在dao层创建一个文件,命名为:UseMapper.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">
<!-- namespace=绑定一个对应的Dao/Mapper接口 -->
<mapper namespace="com.dao.UserMapper">
<!-- id=要实现的接口名字(必须和接口一模一样,不然会报错) resultType=返回的类型(实体类) parameterType=接口的定义的类型(传参的时候常用)-->
<!-- 查询语句 -->
<!-- 查询所有 -->
<select id="getUserList" resultType="com.pojo.User">
<!-- sql语句 -->
select * from mybatis.user;
</select>
<select id="getByID" resultType="com.pojo.User" parameterType="int">
select * from mybatis.user where id= #{id};
</select>
</mapper>
接下来就是创建工具类了,主要是mybatis的核心思想就是这个SqlSessionFactory。
首先我们将SqlSessionFactory sqlSessionFactory的作用域提升,进行初始化加载。方法为:
public static SqlSessionFactory sqlSessionFactory;
接下来我们直接将参考文档中的东西。将工具类进行封装:
package com.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;
//mybatis工具类,不用变,配置成功,通吃mybatis,除非换数据库
public class MybatisUtils {
public static SqlSessionFactory sqlSessionFactory;
//初始化加载
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//连接openSession(true);当为true时不用手动提交事物
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true);
}
}
上述操作完成后,mybatis的准备工作就完成了,接下来我们就只需要进行测试了。
写测试文件时,我们注意规范操作,与咋们写在main中的层次结构保持一致,在module中test里面创建包com.dao/com.pojo/com.utils。
我们测试dao层数据,具体代码为:
package com.dao;
import com.pojo.User;
import com.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserMapperTest {
@Test //查询全部
public void getAllUser(){
//第一步获取SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//获取接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用接口中的的方法
List<User> userList = mapper.getUserList();
//输出
for (User user : userList) {
System.out.println(user);
}
//关闭
sqlSession.close();
}
@Test
public void getByID(){
//第一步获取SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//获取接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User byID = mapper.getByID(1);
System.out.println(byID);
sqlSession.close();
}
}
测试输出为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9waY7KoJ-1624940257512)(C:\Users\ZYH.LAPTOP-32L7159T\AppData\Roaming\Typora\typora-user-images\image-20210629121438530.png)]
与我们数据库中的表内容一模一样,此时我们的第一个mybatis程序就成功了。
中途运行肯定会出现很多问题,我当时也调了很久,后面发现是我们连接数据库的URL写错了,遇到问题,多问百度,yes!!!