Mybatis应用的搭建流程
1. 创建一个maven项目
2. 添加Mybatis,MySQL驱动,junit依赖
3. 构建
4. 在src/main/resources添加一个mybatis-config.xml
5. 编写实体类,放在entity,实体类是跟我们数据库表对应的类
6. 编写映射,mapper包中,定一个mapper映射接口
7. 编写映射,src/main/resources/mapper 定义mapper.xml
8. 创建SqlSessionFactory工厂类,使用SqlSessionFactory工厂类打开SqlSession进行操作。
1. 创建一个maven项目
maven工程的创建在前边的博客已经总结过:https://blog.csdn.net/qq_35402412/article/details/80774955
创建一个空的maven项目后如下:
2. 添加依赖
IDEA为我们自动生成了pom.xml文件,我需要在里面添加相应的依赖,
Mybatis依赖、MySQL依赖、junit依赖
3. 构建
其他plugin信息不再赘述完整的pom.xml文件如下:(pom文件的配置基本都一样,我们以后可以粘贴复制之,根据自己的情况做依赖添加或修改)
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>com.chang</groupId>
<artifactId>mybatis-test-03</artifactId>
<version>1.0.0</version>
<properties>
<java>1.8</java>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<encoding>UTF-8</encoding>
<source>${java}</source>
<target>${java}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.mybatis.demo.Demo</mainClass>
<addExtensions>true</addExtensions>
<classpathPrefix>lib</classpathPrefix>
</manifest>
<manifestEntries>
<Implementation-Title>${project.name}</Implementation-Title>
<Implementation-Version>${project.version}</Implementation-Version>
<Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
4. 在src/main/resources添加一个mybatis-config.xml
我们要使用Mybatis,就是要和数据库打交道,所以我们把之间通过JDBC链接的方式,放到mybatis-config.xml中,内容如下:
5. 编写实体类,放在entity,实体类是跟我们数据库表对应的类
在Mybatis中,我们通过一个类和一个数据库表对应连接,在memo数据库中,memoGroup表(id, name , created_time, modify_time)所对应的实体类如下:
MemoGroup.java
package com.chang.entity;
import java.util.Date;
public class MemoGroup {
private Integer id;
private String name;
private Date createdTime;
private Date modifyTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getCratedDate(Date date) {
return createdTime;
}
public void setCratedDate(Date cratedDate) {
this.createdTime = cratedDate;
}
public Date getModifyDate() {
return modifyTime;
}
public void setModifyDate(Date modifyDate) {
this.modifyTime = modifyDate;
}
@Override
public String toString() {
return "memoGroup{" +
"id=" + id +
", name='" + name + '\'' +
", createdTime=" + createdTime +
", modifyTime=" + modifyTime +
'}';
}
}
6. 编写映射,mapper包中,定一个mapper映射接口
实体类我们写好了,接下来我们需要一些方法来操作实体类与数据库的交互,我们创建一个MemoGroupMapper接口:
MemoGroupMapper.java
package com.chang.mapper;
import com.chang.entity.MemoGroup;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* Author:
* Created: 2018/6/24
*/
public interface MemoGroupMapper {
/**
* 查询所有便签组
*
* @return
*/
List<MemoGroup> queryAll();
/**
* 插入一个便签组
*
* @param memoGroup
* @return
*/
int insetMemoGroup(MemoGroup memoGroup);
/**
* 修改便签组的名称
*
* @param id
* @param name
* @return
*/
int updateMemoGroup(@Param("id") int id, @Param("name") String name);
/**
* 根据Id删除便签组
*
* @param id
* @return
*/
int deleteMemoGroup(int id);
}
7. 编写映射,src/main/resources/mapper 定义mapper.xml
接口我们写好了,但是我们不需要自己写实现类,我们通过一个xml文件,通过映射的方式来实现抽象方法,在main/resources下创建一个mapper目录,用于存放我们的映射文件MemoGroupMapper.xml
MemoGroupMapper.xml
<?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="com.chang.mapper.MemoGroupMapper">
<resultMap id="memoGroup" type="com.chang.entity.MemoGroup">
<id property="id" column="id" javaType="int" jdbcType="INTEGER"/>
<result property="name" column="name" javaType="string" jdbcType="VARCHAR"/>
<result property="createdTime" column="created_time" javaType="date" jdbcType="TIMESTAMP"/>
<result property="modifyTime" column="modify_time" javaType="date"
jdbcType="TIMESTAMP"/>
</resultMap>
<select id="queryAll" resultMap="memoGroup">
select
id,
name,
created_time,
modify_time
from memo_group
</select>
<insert id="insetMemoGroup" parameterType="com.chang.entity.MemoGroup">
insert into memo_group (name, created_time) values (#{name}, #{createdTime})
</insert>
<update id="updateMemoGroup">
update memo_group
set name = #{name}
where id = #{id}
</update>
<delete id="deleteMemoGroup">
delete from memo_group
where id = #{id}
</delete>
</mapper>
8. 创建SqlSessionFactory工厂类,使用SqlSessionFactory工厂类打开SqlSession进行操作。
基本映射我们已经写完了,接下来我们要通过一个名为的SqlSession类来实现数据库的操作,首先创建一个测试类,在test/java下创建包com.chang,创建一个MemoGroupMapperTest测试类
MemoGroupMapperTest.java
package com.chang;
import com.chang.entity.MemoGroup;
import com.chang.mapper.MemoGroupMapper;
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.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.Date;
import java.util.List;
public class MemoGroupMapperTest {
public static SqlSessionFactory sqlSessionFactory;
@Before
public void beforeTest(){
SqlSessionFactoryBuilder sqlSessionFactoryBuilder =
new SqlSessionFactoryBuilder();
try{
sqlSessionFactory = sqlSessionFactoryBuilder.build(
Resources.getResourceAsStream("mybatis-config.xml"));
} catch (IOException e) {
e.printStackTrace();
}
}
@AfterClass
public static void setAfter() {
sqlSessionFactory = null;
}
@Test
public void testQueryAll(){
SqlSession sqlSession = null;
try{
sqlSession = sqlSessionFactory.openSession();
MemoGroupMapper memoGroupMapper = sqlSession.getMapper(MemoGroupMapper.class);
List<MemoGroup> list = memoGroupMapper.queryAll();
Iterator<MemoGroup> iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}finally {
if(sqlSession!=null){
sqlSession.close();
}
}
}
@Test
public void testInsetMemoGroup(){
SqlSession sqlSession = null;
try{
MemoGroup memoGroup = new MemoGroup();
memoGroup.setName("DD");
memoGroup.setCratedDate(new Date());
sqlSession = sqlSessionFactory.openSession();
MemoGroupMapper memoGroupMapper = sqlSession.getMapper(MemoGroupMapper.class);
int effect = memoGroupMapper.insetMemoGroup(memoGroup);
Assert.assertEquals(1,effect);
sqlSession.commit();
}finally {
if(sqlSession!=null){
sqlSession.close();
}
}
}
@Test
public void testUpdateMemoGroup(){
SqlSession sqlSession = null;
try{
sqlSession = sqlSessionFactory.openSession();
MemoGroupMapper memoGroupMapper = sqlSession.getMapper(MemoGroupMapper.class);
int effect = memoGroupMapper.updateMemoGroup(5,"CC");
Assert.assertEquals(1,effect);
sqlSession.commit();
}finally {
if(sqlSession!=null){
sqlSession.close();
}
}
}
@Test
public void testDeleteMemoGroup(){
SqlSession sqlSession = null;
try{
sqlSession = sqlSessionFactory.openSession();
MemoGroupMapper memoGroupMapper = sqlSession.getMapper(MemoGroupMapper.class);
int effect = memoGroupMapper.deleteMemoGroup(7);
Assert.assertEquals(1,effect);
sqlSession.commit();
}finally {
if(sqlSession!=null){
sqlSession.close();
}
}
}
}
做一个查询测试:
============================================================================
到此,我们一个简单的Mybatis项目终于构建完成。