一、第一个mybatis程序
1.1 搭建环境
① 创建一个maven的父项目
② 删除src
③ 配置maven父项目的配置文件(mysql、mybatis)
配置代码如下:
注意配置静态文件的配置
<?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">
<parent>
<artifactId>MybitsDemo</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.jzq</groupId>
<artifactId>Demo01</artifactId>
<packaging>war</packaging>
<name>Demo01 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>Demo01</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
<resources>
<resource>
<!-- 设定主资源目录 -->
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
1.2 创建maven子项目,练习Mybatis
① 配置mybatis的核心配置文件xml
& amp;是 &的转义
⭐每个mapper.xml都需要在Mybatis核心配置文件中注册!
<?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 是mybatis的核心配置文件-->
<configuration>
<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://ip:3306/mybatis?userSSL=true&useUnicode=true&charaterEncoding=UTF-8"/>
<property name="username" value="xxxxxxxxxx"/>
<property name="password" value="xxxxxxxxx"/>
</dataSource>
</environment>
</environments>
<!-- 每个mapper.xml都需要在Mybatis核心配置文件中注册!-->
<mappers>
<mapper resource="com/jzq/dao/user/UserMapper.xml"/>
</mappers>
</configuration>
② 从 XML 中构建 SqlSessionFactory
创建一个工具类
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。
package com.jzq.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
public class MybatisUtils {
// 从 XML 中构建 SqlSessionFactory
// 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
}
③ 从 SqlSessionFactory 中获取 SqlSession
// 既然 有了 SqlSesstionFactory, 顾名思义,我们就可以从中获得SqlSession的实例了
// SqlSession 完全包含了面向数据库执行SQL命令所需的所有方法.
在上面的②中的工具类里编写如下代码
public static SqlSession getSqlSession() {
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
1.3 编写代码
① 实体类
package com.jzq.pojo;
public class User {
private String user_id;
private String username;
private String password;
private String phone;
private String head_img;
public User(){}
public User(String user_id, String username, String password, String phone, String head_img) {
this.user_id = user_id;
this.username = username;
this.password = password;
this.phone = phone;
this.head_img = head_img;
}
public String getUser_id() {
return user_id;
}
public void setUser_id(String user_id) {
this.user_id = user_id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getHead_img() {
return head_img;
}
public void setHead_img(String head_img) {
this.head_img = head_img;
}
@Override
public String toString() {
return "User{" +
"user_id='" + user_id + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
", phone='" + phone + '\'' +
", head_img='" + head_img + '\'' +
'}';
}
}
② Dao接口
package com.jzq.dao.user;
import com.jzq.pojo.User;
import java.util.List;
public interface UserMapper {
List<User> getUserList();
}
③接口实现层
这里通过xml实现
⭐ namespace是接口层
⭐ 里面对应了很多sql操作的标签,id指的是接口内的方法,resultType是该方法的返回类型
<?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.jzq.dao.user.UserMapper">
<!-- id对应的namespace内的某个方法 -->
<!-- resultType对应了返回结果类型 -->
<select id="getUserList" resultType="com.jzq.pojo.User">
select * from mybatis.user
</select>
</mapper>
1.4 测试第一个mybatis程序
⭐获取SqlSession对象
存储这个接口中的方法
执行某个实现的方法
⭐关闭SqlSession对象
该程序中捕获异常的结构最终目的只为finally内的可以保证所有数据库资源都能被正确地关闭。
package dao.user;
import com.jzq.dao.user.UserMapper;
import com.jzq.pojo.User;
import com.jzq.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 sqlSession = MybatisUtils.getSqlSession();
try {
// 方式一: getMapper
// userDao 存储了所有这个接口中的方法
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 我们通过实现其中声明的一个方法getUserList(这个方法与一个UserMapper.xml绑定)
List<User> userList = userMapper.getUserList();
// 方式二 (通过这种方式也可以执行,但是官方不推荐)
// List<User> userList = sqlSession.selectList("com.jzq.dao.user.UserDao.getUserList");
for (User user:userList
) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭SqlSession
sqlSession.close();
}
}
}