Mybatis(三)CRUD通过注解+接口映射器方式
Mybatis(三)CRUD通过注解+接口映射器方式 在实际项目开发中用到的多
安装
如果使用 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="dao.CategoryDAO">
<!--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 dao;
import java.util.List;
import pojo.Category;
/**
* @author 86182
* @date: 2020年1月15日上午1:12:53
* @verion:1.0
* @description:mapper映射器
* 此类中的方法名、方法中的参数、返回值与Category.xml中一致
*/
public interface CategoryDAO {
public List<Category>list();
public Category one(int id);
int save(Category c);
int delete(int id);
int update(Category c);
}
测试数据
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 dao.CategoryDAO;
import pojo.Category;
/**
* @author 86182
* @date: 2020年1月15日上午1:17:35
* @verion:1.0
* @description:
*/
public class TestCase {
SqlSessionFactory sf;
SqlSession ss;
@Before
public void before() throws IOException {
// 读取mybatis-cfg.xml文件
String resource = "mybatis.cfg.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 初始化mybatis,创建SqlSessionFactory类的实例
sf = new SqlSessionFactoryBuilder().build(inputStream);
// 创建Session实例
ss = sf.openSession();
}
@After
public void after() {
// 事务的提交
ss.commit();
// 会话关闭
ss.close();
}
/*
* 新增数据
*/
@Test
public void save() {
// 获取mapper映射器
CategoryDAO dao = ss.getMapper(CategoryDAO.class);
Category c = new Category();
c.setName("分类3");
int save = dao.save(c);
System.out.println(save);
}
/*
* 查询指定的数据
*/
@Test
public void one() {
// 获取mapper映射器
CategoryDAO dao = ss.getMapper(CategoryDAO.class);
Category c = dao.one(3);
System.out.println(c.getName());
}
/*
* 修改数据
*/
@Test
public void update() {
// 获取mapper映射器
CategoryDAO dao = ss.getMapper(CategoryDAO.class);
Category c = dao.one(3);
c.setName("分类3-1");
int update = dao.update(c);
System.out.println(update);
}
/*
* 查询所有的数据
*/
@Test
public void list() {
// 获取mapper映射器
CategoryDAO dao = ss.getMapper(CategoryDAO.class);
List<Category> list = dao.list();
for (Category category : list) {
System.out.println(category.getName());
}
}
/*
* 删除指定数据
*/
@Test
public void delete() {
// 获取mapper映射器
CategoryDAO dao = ss.getMapper(CategoryDAO.class);
int count=dao.delete(3);
System.out.println(count);
}
}
原理
应用程序找Mybatis要数据
mybatis从数据库中找来数据
通过mybatis-cfg.xml 定位哪个数据库
通过dao.CategoryDAO找到Category.xml中namespace= dao.CategoryDAO
通过dao.CategoryDAO找到Category.xml中下的sql语句进行执行
dao.CategoryDAO的方法名对应Category.xml中select,update,insert,delete语句的id