框架Mybatis入门(基于原生接口的XML版本),对数据库进行简单的增删改查操作
Posted 念奕玥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了框架Mybatis入门(基于原生接口的XML版本),对数据库进行简单的增删改查操作相关的知识,希望对你有一定的参考价值。
Mybatis是?
MyBatis本是Apache的一个开源项目iBatis。是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
MyBatis 支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
即MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架
在不使用框架的情况下,如果要开发一个Web应用程序,就必须要使用传统的JDBC代码来操作数据库,除了需要自己提供 SQL 外,还必须操作 Connection、Statment、ResultSet等,而且为了访问不同的表,不同字段的数据,需要些很多雷同模板化的代码。
优点:
使用MyBatis 框架之后,只需要提供 SQL 语句就可以,其余的诸如:建立连接、操作Statment、ResultSet,处理 JDBC 相关异常等等都可以交给 MyBatis 去处理,关注点可以集中在 SQL 语句增删改查这些操作层面上,并且 MyBatis 支持使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,即普通的 Java对象)映射成数据库中的记录。
MyBatis 的使用:
MyBatis 的使用分为三个版本:
- 基于原生接口的XML版本。
- 基于Mapper接口的XML版本。
- 基于Java 注解版本。
一般推荐基于 Mapper 接口和基于 Java 注解的方式,这两种方式在实际开发中更加常用。
入门实例
利用mybatis对数据库进行操作(基于原生接口的XML版本)
具体步骤:
1、利用Navicat Premium新建一个数据表,并插入一些数据
2、新建maven项目。
3、准备属性文件。
resource文件可以自己新建,内部的properties文件也可自己新建。
内容可以直接粘贴复制。
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>ExerMybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>ExerMybatis 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>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- 日志处理 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<build>
<finalName>ExerMybatis</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>
</build>
</project>
db.properties文件内容:
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/exercise?serverTimezone=GMT%2B8
jdbc.user=root
jdbc.password=1996mysqlyue
用的mysql是8.0版本的,所以driver中加了cj,若是低于8.0版本,则可以直接写成com.mysql.jdbc.Driver
mybatis-config.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="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!--连接数据库的四个基本信息-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--指定映射配置文件的位置,映射配置文件指的是每个业务独立的配置文件,这里指的就是对学生信息进行的一系列业务操作-->
<mapper resource="mapper/stuMapper.xml"/>
</mappers>
</configuration>
其中,dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象源。后面的mappers中的内容可以写完相应的代码后再在加到配置文件里
log4j.properties文件(用于输出日志)内容:
log4j.rootLogger=DEBUG,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache=INFO
4、学生的JavaBean类
与数据库中数据表内容相对应。
public class Student {
private int id;
private String stuName;
private Integer age;
//此处省略了对应的get、set、toString方法。
}
4、SQL映射文件
在resources文件里新建文件夹mapper,此目录下新建对应的StuMapper.xml文件。用来写对学生信息进行操作的sql语句。
<?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属性:命名空间,用来设定当前Mapper配置文件的唯一标识,将来在Java程序中通过namespace属性的值来定位到这个配置文件 -->
<!-- namespace属性值:名字可随便取,但推荐以相对应的Mapper接口的全类名,例如com.gy.mapper
.StudentMapper -->
<mapper namespace="com.gy.mapper.StuMapper">
<!-- 查询所有学生的信息-->
<select id="selectAllStu" resultType="com.gy.entity.Student">
select * from stuinfo;
</select>
<!-- 通过id来查询一个学生-->
<select id="selectStuById" parameterType="int"
resultType="com.gy.entity.Student">
select * from stuinfo where id=#{id};
</select>
<!-- 模糊查询,根据stuName字段查询用户-->
<select id="selectStuByName" parameterType="string"
resultType="com.gy.entity.Student">
select * from stuinfo where stuName like '%${value}%';
</select>
<!-- 添加学生-->
<insert id="insertStu" parameterType="com.gy.entity.Student">
insert into stuinfo(stuName,age) values (#{stuName},#{age});
</insert>
<!-- 根据Id更新学生信息 -->
<update id="updateStu" parameterType="com.gy.entity.Student">
update stuinfo set stuName = #{stuName},age=#{age} where id = #{id};
</update>
<!-- 根据Id删除学生 -->
<delete id="deleteStu" parameterType="int">
delete from stuinfo where id = #{id}
</delete>
</mapper>
5、测试是否可以对数据表进行相应的操作。
新建test文件,及对应的test类。
public class StudentTest {
SqlSession sqlSession = null;
@Before
public void getSqlSession() {
//加载 mybatis 全局配置文件
InputStream is = StudentTest.class.getClassLoader().getResourceAsStream(
"mybatis-config.xml");
//创建 SqlSessionFactory 对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//根据 sqlSessionFactory 产生 session
sqlSession = sqlSessionFactory.openSession();
}
//查询所有用户数据
@Test
public void testSelectAllUser() {
/**
* statement字符串由 StuMapper.xml文件中的两个部分构成(namespace + id)
* <mapper namespace="com.gy.mapper.StuMapper">中 namespace 的值
* <select id="selectAllUser" > 中的 id 值
* 这样Mybatis才能定位到对应的SQL
*/
String statement = "com.gy.mapper.StuMapper.selectAllStu";
//用集合来接收返回结果(因为有多条数据)
List<Student> StuList = sqlSession.selectList(statement);
System.out.println("查询所有学生信息");
for (Student stu : StuList) {
System.out.println(stu);
}
sqlSession.close();
}
//根据Id查询一个学生数据
@Test
public void testSelectUserById() {
String statement = "com.gy.mapper.StuMapper.selectStuById";
Student stu = sqlSession.selectOne(statement, 1);
System.out.println("根据Id查询一个学生数据"+stu);
sqlSession.close();
}
//模糊查询:根据stuinfo表的stuName字段
@Test
public void testSelectUserByName() {
String statement = "com.gy.mapper.StuMapper.selectStuByName";
List<Student> listUser = sqlSession.selectList(statement, "on");
System.out.println("模糊查询");
for (Student stu : listUser) {
System.out.println(stu);
}
sqlSession.close();
}
//添加一个学生数据
@Test
public void testInsertUser() {
String statement = "com.gy.mapper.StuMapper.insertStu";
Student stu = new Student();
stu.setAge(10);
stu.setStuName("huahua");
int i = sqlSession.insert(statement, stu);
System.out.println( (i>0)? "添加成功!":"添加失败!");
//提交插入的数据
sqlSession.commit();
sqlSession.close();
}
//根据Id修改学生数据
@Test
public void testUpdateUser(){
//如果设置的 id不存在,那么数据库没有数据更改
String statement = "com.gy.mapper.StuMapper.updateStu";
Student stu = new Student();
stu.setStuName("baibai");
stu.setId(2);
stu.setAge(29);
int i = sqlSession.update(statement, stu);
System.out.println( (i>0)? "修改成功!":"修改失败!");
//提交数据
sqlSession.commit();
sqlSession.close();
}
//根据Id删除学生数据
@Test
public void testDeleteUser(){
String statement = "com.gy.mapper.StuMapper.deleteStu";
int i = sqlSession.delete(statement, 4);
System.out.println( (i>0)? "删除成功!":"删除失败!");
sqlSession.commit();
sqlSession.close();
}
}
6、操作结果:
修改后的数据表:
以上是关于框架Mybatis入门(基于原生接口的XML版本),对数据库进行简单的增删改查操作的主要内容,如果未能解决你的问题,请参考以下文章