1、MyBatis原理图
其中,对象就是所谓的封装的实体类;映射就是要对数据库进行相关操作的代码对应到数据库中,避免了平时编写调用数据库的一些“又臭又长”的代码;数据库不言而喻。
2、创建Java工程,并且创建相应的包
本次创建的是Maven项目。所有包如下:
3、导入MyBatis所需的jar包
如果创建的是Maven项目的话,可以在pom.xml中配置如下:
<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>com.MyBatisTest</groupId>
<artifactId>MyBatisTest</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>MyBatisTest</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- 添加Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- 添加Mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- Gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
<!--commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
<!-- log4j-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
</project>
4、添加MyBatis的配置文件(mybatis.cfg.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>
<!-- 加载属性文件 -->
<properties resource="database.properties"></properties>
<typeAliases>
<package name="com.MyBatisTest.Bean"/>
</typeAliases>
<!-- 配置mybatis运行环境 -->
<environments default="cybatis">
<environment id="cybatis">
<!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 -->
<!-- UNPOOLED 表示不支持数据源连接池 -->
<!-- JNDI 表示支持外部数据源连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${driverClassName}" />
<property name="url" value="${url}" />
<property name="username" value="${user}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 映射文件路径配置 -->
<mappers>
<!-- 告知映射文件方式1,一个一个的配置
<mapper resource="com/cy/mybatis/mapper/UserMapper.xml"/>-->
<!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件 -->
<package name="com/MyBatisTest/Mapper"/>
</mappers>
</configuration>
5、创建实体类(本文中为Student.java)
package com.MyBatisTest.Bean;
public class Student {
private int ID;
private String Name;
private int Age;
public Student() {}
public Student(int ID,String Name,int Age) {
this.ID=ID;
this.Name=Name;
this.Age=Age;
}
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public int getAge() {
return Age;
}
public void setAge(int age) {
Age = age;
}
}
6、创建数据库增删改查方法接口(StidentMapper.java)
package com.MyBatisTest.Mapper;
import java.util.List;
import java.util.Map;
import com.MyBatisTest.Bean.Student;
public interface StudentMapper {
/**
* 插入信息
*/
public int insertStudent(Student Student) throws Exception;
/**
* 更新信息1
*/
public int updateStudent (Student Student,int id) throws Exception;
/**
* 更新信息2
*/
public int updateStudent2 (Student student) throws Exception;
/**
* 更新信息3
*/
public int updateStudent3 (Map map) throws Exception;
/**
*删除信息
*/
public int deleteStudent(int id) throws Exception;
/**
* 按条件选择信息
*/
public Student selectStudentById(int id) throws Exception;
/**
* 显示所有信息
*/
public List<Student> selectAllStudent() throws Exception;
}
7、编写MyBatis的映射文件(StudentMapper.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!-- 不写会报错 -->
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.MyBatisTest.Mapper.StudentMapper">
<!-- 添加用户 -->
<insert id="insertStudent" useGeneratedKeys="true" keyProperty="id">
insert into student(Name,Age) values(#{Name},#{Age})
</insert>
<!-- 修改用户 -->
<update id="updateStudent2" >
update student set
Name = #{Name},
Age = #{Age}
where ID = #{id}
</update>
<!-- 修改用户 -->
<update id="updateStudent3" parameterType="hashmap">
update student set
Name = #{Name},
Age = #{Age}
where ID = #{id}
</update>
<!-- 删除用户 -->
<delete id="deleteStudent">
delete from student whereID = #{id}
</delete>
<!-- 查询所有用户 -->
<select id="selectAllStudent" resultType="Student" >
select * from student
</select>
<!-- 根据ID查询用户 -->
<select id="selectStudentById" parameterType="int" resultType="Student">
select * from student where ID=#{id}
</select>
</mapper>
8、当以上所有文件都创建完成时,可以用JUint来进行单元测试运行
package com.MyBatisTest.MyBatisTest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.MyBatisTest.Bean.Student;
import com.MyBatisTest.Mapper.StudentMapper;
import com.MyBatisTest.utils.DBTools;
public class MyBatisTest {
@Test
public void test01() {
SqlSession session=DBTools.getSession();
StudentMapper mapper=session.getMapper(StudentMapper.class);
Student stu=new Student();
stu.setName("testman0409");
stu.setAge(999);
try {
mapper.insertStudent(stu);
session.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void test02() {
SqlSession session=DBTools.getSession();
StudentMapper mapper=session.getMapper(StudentMapper.class);
try {
List<Student> list=mapper.selectAllStudent();
System.out.println(list.size());
for (Student student : list) {
System.out.println(student.getName());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void test03() {
SqlSession session=DBTools.getSession();
StudentMapper mapper=session.getMapper(StudentMapper.class);
try {
Student student=mapper.selectStudentById(1);
System.out.println(student.getName());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void test04() {
SqlSession session=DBTools.getSession();
StudentMapper mapper=session.getMapper(StudentMapper.class);
try {
Student stu=new Student();
stu.setID(1);
stu.setName("testman0409");
stu.setAge(999);
int result=mapper.updateStudent2(stu);
System.out.println(result);
session.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void test05() {
SqlSession session=DBTools.getSession();
StudentMapper mapper=session.getMapper(StudentMapper.class);
try {
Map stu=new HashMap();
stu.put("id", 9);
stu.put("uname", "lisi_new2");
int result=mapper.updateStudent3(stu);
System.out.println(result);
session.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void test06() {
SqlSession session=DBTools.getSession();
StudentMapper mapper=session.getMapper(StudentMapper.class);
try {
int result=mapper.deleteStudent(29);
System.out.println(result);
session.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
当运行test03方法时,结果如下:
9、附:本次数据库的Student表设计
总结
以上所述就是MyBatis框架的入门知识,通过MyBatis框架可以完全替换JDBC,使得编码变的更加的简洁。而且MyBatis还是“半自动”的,可以直接编写所需要的SQL语句,让使用更加的灵活。