文章目录
mybatis
介绍
是我自己的学习笔记,也是值得分享的学习过程,希望可以帮助大家也帮助自己
1. 什么是mybatis
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
2. 第一个mybatis程序
2.1 搭建数据库
CREATE TABLE `wuyuetest` (
`id` INT ( 11 ) NOT NULL PRIMARY KEY,
`name` VARCHAR ( 20 ) DEFAULT NULL,
`pwd` VARCHAR ( 20 ) DEFAULT NULL
)
INSERT into `wuyuetest` VALUES
(1,'zhangsan','123456'),
(2,'lisi','123456'),
(3,'wangwu','123456')
新建一个普通的maven项目,然后删除src目录
然后倒入依赖
2.2 maven 构建mybatis
使用 Maven 来构建项目,则需将下面的相关依赖代码置于 pom.xml 文件中
//使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:
<dependencies>
<!--mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</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.3 创建一个模块
2.3.1新建一个module
这样之后我们就会发现这个新建的为大项目的子项目,之前在xml配置过的依赖不需要再次配置
2.3.2 编写mybatis的核心配置文件
在新建的项目下面的resources下新建mybatis-config.xml文件,然后将官网给出的配置代码copy上去,XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)
<?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="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
//核心配置文件中注册mapper
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
要注意的是里面的配置内容要改成自己相关的,值得一提的是URL不知道怎么找到的小伙伴可以看下面这一张图,点击这个可以连接上你需要的数据库,连接成功后就可以看到自己想要的URL啦,也是填写的标准格式。
2.4 创建mybatis的工具类
创建这个类的主要作用一是把mybatis必需的资源加载进来,第二步是创建一个能执行sql的对象
package com.yue.unils;
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 javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
public class MybatisUtils {
private InputStream inputStream;
private static SqlSessionFactory sqlSessionFactory;
{
try {
//使用mybatis第一步,获取所需资源:sqlSessionFactory对象
String resource = "mybatis-config.xml";
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//有了sqlSessionFactory对象,就可以从中获得实例了
//SqlSession中完全包含了执行SQL的方法
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
上述都完成之后,就已经是连接上了数据库
2.5 编写代码
2.5.1 实体类
补充一个我自己的知识盲点:
pojo:Plain Old Java Object”“简单java对象
vo是指值对象或者View对象(Value Object、View Object)。View Object。
PO是指持久对象(persistant object持久对象)。
新建package,命名为pojo;
然后在里面新建User类,和最开始设计数据库时候的字段记得保持一致
package com.yue.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 + '\'' +
'}';
}
}
2.5.2 接口Dao
玩转xml:<能看到xml所有的选项?一时不知如何称呼
UserDao接口:
操作数据库的对象,等价于UserMapper
public interface UserDao {
List<User> getUserList();
}
2.5.3 接口实现类
UserMapper.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接口 这里绑定了上面的UseDao-->
<mapper namespace="com.yue.dao.UserDao">
<!-- 写sql语句,比jdbc更简洁 id = UseDao里面的方法名-->
<select id="getUserList" resultType="com.yue.pojo.User">
select * from User
</select>
</mapper>
utils测试
标准的测试在test创建相同目录
UserDaoTest代码
public class UserDaoTest {
@Test
public void test(){
//第一步 获得SqlSession对象,在mybatisUtils里已经写好了方法,直接调用
//MybatisUtils.getSqlSession()获得实例化对象->getMapper->
// UserDao去UserDao里面找具体的sql执行
SqlSession sqlSession = MybatisUtils.getSqlSession();
//执行sql,从sqlSession里面获取mapper(UserDao)方式一:getMapper
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
//关闭sqlSession
sqlSession.close();
}
}
可能会遇到的问题:
如果遇到了初始化失败或者找不到对应的xml,可以尝试在maven中加入以下代码
防止资源导出失败。
在maven的xml里,加入以下代码可以防止出现初始化失败、资源导出失败等情况
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
运行成功!!
小总结
新建maven项目,在maven中配置mysql、mybatis等,连接数据库
根据官网文档构建MybatisUtils和mybatis-config.xml获得可实例化sqlSession
写实体类(User)、类接口UserDao及其配置文件UserMapper.xml并绑定起来
写测试接口UserDaoTestMybatisUtils.getSqlSession()获得实例化对象->getMapper->UserDao去UserDao里面找具体的sql执行