一、案例要求:
本案例要求根据员工表在数据库中创建一个employee表,并利用mybatis知识完成一个员工管理系统,该系统需要实现以下几个功能:
根据id查询员工信息
新增员工信息
根据id修改员工信息
根据id删除员工信息
二、项目搭建
创建建一个名称为mybatisdemo的项目,并在项目中引入 MySQL 驱动包、 JUnit 测试包、MyBatis 的核心包等相关依赖、创建数据库连接信息配置文件、创建 MyBatis 的核心配置文件。
核心配置文件(pom.xml)
<?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>mybatisdemo1</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- mybatis驱动-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<!-- 单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
</dependencies>
<!-- Maven plugins配置不可少 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-archetype-plugin</artifactId>
<version>3.2.1</version>
</plugin>
</plugins>
</build>
chetype来快速创建项目的基本结构。您可以根据需要自定义和调整生成的项目结构和配置。-->
</project>
三、项目实现
1、数据准备:
在mydb数据库中创建employee表,并在employee表中插入几条数据。
use mydb;
create table employee(
id int primary key auto_increment,
name varchar(20) not null,
age int not null,
position varchar(20) );
insert into employee(id,name,age,position) values
(null,'张三',20,'员工'),
(null,'李四',18, '员工'),
(null,'王五',35,'经理');
2、创建持久化类Employee
并在类中声明id(编号)、name(姓名)、age(年龄)和position(职位)属性,以及属性对应的getter/setter方法。
package org.example;
public class Employee {
private Integer id; private String name;
private Integer age;
private String position;
public Integer getId(int id) {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", position='" + position + '\'' +
'}';
}
}
//创建持久化类Employee,并在类中声明id(编号)、name(姓名)、age(年龄)和position(职位)属性,以及属性对应的getter/setter方法。
3、编写映射文件:
创建映射文件textEmployee.xml,该文件主要用于实现SQL语句和Java对象之间的映射
<?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="org.example.textEmployee">
<!-- 查询员工信息 -->
<select id="findById" parameterType="Integer" resultType="Employee">
select * from employee where id = #{id}
</select>
<!-- 插入员工信息 -->
<insert id="save" parameterType="Employee">
insert into employee(id, name, age, position) values(#{id}, #{name}, #{age}, #{position})
</insert>
<!-- 更新员工信息 -->
<update id="updateEmployeeById" parameterType="Employee">
UPDATE employee SET name=#{name}, age=#{age}, position=#{position} WHERE id=#{id}
</update>
<!-- 删除员工信息 -->
<delete id="deleteEmployeeById" parameterType="Integer">
delete from employee where id = #{id}
</delete>
</mapper>
4.修改mybatis-config.xml核心配置文件:
在mybatis-config.xml映射文件的<mappers>元素下添加textEmployee.xml映射文件路径的配置,用于将textEmployee.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>
<!-- 引入外部db.properties -->
<properties resource="db.properties"></properties>
<settings>
<!-- 开启全局缓存,可有可无,百利无害-->
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
<!-- 别名映射扫描(别名不区分大小写注意重复定义的覆盖)-->
<typeAliases>
<!-- 定义单个别名 -->
<!-- type对应实体类的全路径,alias对应实体类的别名 -->
<typeAlias type="org.example.Employee" alias="Employee" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}" />
<property name="url" value="${mysql.url}" />
<property name="username" value="${mysql.username}" />
<property name="password" value="${mysql.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org.example/textEmployee.xml"/>
<!-- 此处mapper配置的目的是将mapper.xml映射交给mybatis-->
</mappers>
<!-- 没用 <mappers>-->
<!-- <package name="org.example.mapper.Main1"/>-->
<!-- </mappers>-->
</configuration>
<!-- MyBatis 的核心配置文件-->
<!--以上为MyBatis配置文件,可作为模板-->
外部db.properties
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.username=root
mysql.password=root
mysql.url=jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC&characterEncoding=utf8
5、编写MyBatisUtils工具类 :
创建MyBatisUtils工具类,该类用于封装读取配置文件信息的代码。
package util;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.Reader;
import static org.apache.ibatis.io.Resources.getResourceAsReader;
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory = null;
static { try {
// 使用MyBatis提供的Resources类加载MyBatis的配置文件
Reader reader = getResourceAsReader("mybatis-config.xml");
// 构建SqlSessionFactory工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) { e.printStackTrace();}}
public static SqlSession getSession() {//获取SqlSession对象的静态方法
return sqlSessionFactory.openSession();}
}
//创建MyBatisUtils工具类,该类用于封装读取配置文件信息的代码。
6、编写封装接口类
package org.example;
/**
* 接口式开发
* 创建接口
* 1、方法名称保证和映射文件的sql语句的statmentId一致
* ctrl+shift+t,鼠标悬停接口名,创建接口测试类
*/
public interface textEmployee {
// 查
public org.example.Employee findById(int id);
// 改
public void save(Employee employee);
// 增
public void updateEmployeeById(Employee employee);
// 删
public void deleteEmployeeById(int Id);
}
7、编写测试类
在项目创建textEmployeeTest测试类中进行程序测试。
(1) 在textEmployeeTest测试类中添加findByIdTest()方法,用于根据id查询员工信息。
(2)在textEmployeeTest测试类中添加save()方法,用于插入员工信息。
(3)在textEmployeeTest测试类中添加updateEmployeeTest()方法,用于更新员工信息。
(4)在textEmployeeTest测试类中添加deleteEmployeeTest()方法,用于删除员工信息。
package org.example;
import junit.framework.TestCase;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import util.MyBatisUtils;
public class textEmployeeTest extends TestCase {
Employee employee=null;
textEmployee textEmployeeeMployee =null;
SqlSession sqlSession=null;
// 获取接口动态代理对象
@Before
public void setUp() throws Exception {
sqlSession = MyBatisUtils.getSession();
textEmployeeeMployee = sqlSession.getMapper(textEmployee.class);
}
//测试查看员工信息
public void testFindById() {
// 需要查看的员工id
int id1=4;
// 执行sql
employee=textEmployeeeMployee.findById(id1);
System.out.println(employee);
// 释放资源
sqlSession.commit();
sqlSession.close();
}
// 测试插入员工信息,注意id在数据库中设置了自增所以不需要插入
public void testSave() {
employee=new Employee();
employee.setName("李想");
employee.setPosition("员工");
employee.setAge(20);
// 执行sql
textEmployeeeMployee.save(employee);
System.out.println("成功插入");
// 释放资源
sqlSession.commit();
sqlSession.close();
}
//测试更新员工信息
public void testUpdateEmployeeById() {
employee=new Employee();
// 需要更新的员工id
int id2 =4;
employee.setId(id2);
employee.setName("张俊");
employee.setPosition("员工");
employee.setAge(18);
// 执行sql
textEmployeeeMployee.updateEmployeeById(employee);
System.out.println("成功更新id:"+employee.getId(id2));
// 释放资源
sqlSession.commit();
sqlSession.close();
}
//测试删除员工信息
public void testDeleteEmployeeById() {
// 需要删除的员工id
int id3=1;
// 执行sql
textEmployeeeMployee.deleteEmployeeById(id3);
System.out.println("成功删除");
// 释放资源
sqlSession.commit();
sqlSession.close();
}
}
//编写4个测试类
四、项目结果
1.项目结构:
2.测试结果:
成功实现项目要求!!!
五、总结
本项目主要对MyBatis的核心配置进行了复习。包含以下知识点:
1、了解MyBatis中的三个重要核心对象SqlSessionFactoryBuilder、SqlSessionFactory和SqlSession的作用;
2、实现了核心配置文件中的元素及其使用;
3、分析映射文件中的几个主要元素。
4、了解MyBatis中三个核心对象的作用,
5、熟悉核心配置文件中常用元素的使用,
6、掌握映射文件中常用元素的使用。