MyBatis通过XML配置
安装
如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
我的version版本是3.5.3
接着导入MySQL
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
导入单元测试Junit
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
maven项目中配置JDK1.8的插件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
在数据库中创建表
use test;
CREATE TABLE category_ (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(32) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
maven 项目结构图
数据库配置文件db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
username=root
password=root
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="db.properties"></properties>
<!-- 类型别名
自动扫描com.how2java.pojo下的类型,
使得在后续配置文件Category.xml中使用resultType的时候,可以直接使用Category,
而不必写全pojo.Category
-->
<typeAliases>
<package name="pojo"/>
</typeAliases>
<!-- 默认使用的环境 ID -->
<environments default="development">
<!--每个 environment 元素定义的环境 ID -->
<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>
<!-- 映射器(mappers)定义 SQL 映射语句了。告诉 MyBatis 到哪里去找到这些语句 -->
<mappers>
<!--映射文件的位置 -->
<mapper resource="pojo/Category.xml"/>
</mappers>
</configuration>
创建实体类Category
package pojo;
public class Category {
private int id;
private String name;
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;
}
}
SQL语句映射文件Category.xml
namespace 说明
对命名空间的一点说明
<?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-->
<mapper namespace="pojo">
<!--resultType返回数据类型,parameterType 参数类型-->
<!-- select查询语句-->
<select id="list" resultType="Category">
select * from category_
</select>
<select id="one" parameterType="int" resultType="Category">
select * from category_ where id=#{id}
</select>
<!-- insert插入语句-->
<insert id="save" parameterType="Category">
insert into category_ values(null,#{name})
</insert>
<!-- delete删除语句-->
<delete id="delete" parameterType="int">
delete from category_ where id=#{id}
</delete>
<!-- update更新语句-->
<update id="update" parameterType="Category">
update category_ set name=#{name} where id=#{id}
</update>
</mapper>
测试数据
package test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import pojo.Category;
public class TestCase {
SqlSessionFactory sf;
SqlSession ss;
@Before
public void before() throws IOException {
String resource="mybatis.cfg.xml";
//配置文件mybatis-config.xml,得到SqlSessionFactory
InputStream inputStream=Resources.getResourceAsStream(resource);
sf=new SqlSessionFactoryBuilder().build(inputStream);
//通过SqlSessionFactory获得SqlSession
ss=sf.openSession();
}
/*
*查询所有
*/
@Test
public void test() {
List<Category>list=ss.selectList("list");
for (Category category : list) {
System.out.println(category.getName());
}
}
/*
*新增数据
*/
@Test
public void save() {
Category c=new Category();
c.setName("category 1");
int count=ss.insert("save",c);
System.out.println(count);//返回新增的数据的个数
}
/*
*修改数据
*/
@Test
public void update(){
Category c=ss.selectOne("one", 1);
c.setName("分类1");
int count=ss.update("update", c);
System.out.println(count);//返回更新的数据的个数
}
/*
*删除数据
*/
@Test
public void delete(){
Category c=ss.selectOne("one", 1);
int count=ss.delete("delete",c);
System.out.println(count);//返回删除数据的个数
}
//SqlSession的关闭
@After
public void after() {
// 提交事务
ss.commit();
// 关闭Session
ss.close();
}
}
基本原理
应用程序找Mybatis要数据
mybatis从数据库中找来数据
通过mybatis-cfg.xml 定位哪个数据库
通过Category.xml执行对应的select,update,insert,delete语句
基于Category.xml把返回的数据库记录封装在Category对象中
返回数据