Mybatis学习笔记(一) 安装与使用
Mybaits是什么?
它是一款优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数和获取结果集的工作。
什么是数据持久化
持久化就是程序的数据由瞬时状态转化为持久状态的过程;
内存:断电则失,属于瞬时状态
数据库,io文件:属于持久状态
第一个程序
- 创建数据库
- 创建maven项目
- 导入依赖
- 创建配置文件
- 创建工具类
- 创建实体映射类
- 创建接口类
- 创建Mapper配置文件
- 建立映射
- 创建测试类
创建数据库
使用ideal自带的数据库管理工具,注意下方serverTimezone的设置
整个项目的文件组织结构
创建maven项目
- 删除src目录
- 在父pom配置依赖,子模块就不需要再配置依赖了
导入依赖
- 注意<build>选项是为了让maven项目可以找到我们的mapper.xml,否则maven默认只会到resource目录下找资源文件
- 父pom内容如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>mybaitsLearning</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>mybaits01</module>
</modules>
<build>
<resources>
<resource>
<directory> src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory> src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
<dependencies>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!-- mybaits -->
<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>
</project>
创建配置文件
<?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>
<!--you can set different environment-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--数据库驱动 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!--连接地址,注意需要保持选项否则中文会乱码 -->
<property name="url" value="jdbc:mysql://localhost:3306/mybait?useUnicode=true&characterEncoding=UTF-8"/>
<!--用户名 -->
<property name="username" value="root"/>
<!--密码-->
<property name="password" value="asdf1234ASDF."/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/hjc/mapper/UserMapper.xml"/>
</mappers>
</configuration>
创建工具类
数据库连接通过工厂方法创建,没必要每次创建,因此通过工具类获取
public class MyBatisUtils { private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>(); private static SqlSessionFactory sqlSessionFactory; static{ try { Reader reader = Resources.getResourceAsReader("mybatis.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } private MyBatisUtils() {} public static SqlSession getSqlSession(){ SqlSession sqlSession = threadLocal.get(); if(sqlSession == null){ sqlSession = sqlSessionFactory.openSession(); threadLocal.set(sqlSession); } return sqlSession; } public static void closeSqlSession(){ SqlSession sqlSession = threadLocal.get(); if(sqlSession != null){ sqlSession.close(); threadLocal.remove(); } } }
创建实体映射类
- 包括有参和无参构造器
- set/get方法
package com.hjc.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 + '\'' +
'}';
}
}
创建接口类
package com.hjc.mapper;
import com.hjc.POJO.User;
import java.util.List;
public interface UserMapper {
public List<User> getUserList();
}
创建Mapper.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.hjc.mapper.UserMapper">
<!-- 对应的方法-->
<select id="getUserList" resultType="com.hjc.POJO.User">
select * from mybait.user
</select>
</mapper>
建立映射
在总配置文件下添加,总配置文件的内容上面已给出全部
<mappers>
<mapper resource="com/hjc/mapper/UserMapper.xml"/>
</mappers>
创建测试类
package com.hjc.mapper;
import com.hjc.util.MybaitsUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
public class UserMapperTest {
@Test
public void test(){
SqlSession session =
MyBatisUtils.getSqlSession()
UserMapper mapper = session.getMapper(UserMapper.class); mapper.getUserList().stream().forEach(i->{System.out.println(i);}); } }
可能存在问题
认真检查上述配置,以下问题都可解决
- 配置文件没有注册
- 绑定接口错误
- 方法名错误
- 返回类型错误
- maven生成target,资源找不到