(一)mybatis 基本查詢、新增、修改、刪除

  • 6715
  • 0

本文目的

  • 配置mybatis設定檔
  • 示範基本查詢、新增、修改、刪除操作

一、前置操作,配置pom.xml,下載必要jar包

pom.xml檔案內容

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.25</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-api</artifactId>
			<version>2.11.1</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.6</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.12</version>
		</dependency>

說明:

前兩個為log配置,其實非必要,純粹為個人習慣。

第三個為mybatis,必需下載

第四個為mysql驅動程式,如果使用mysql必需下載。

二、配置mybatis-config.xml

檔名:mybatis.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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 數據庫連接,由mybatis管理-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/zjh?useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=UTC" />
                <property name="username" value="root" />
                <property name="password" value="xxxxx" />
            </dataSource>
        </environment>
    </environments>
	<!-- tb_userinfo 資料表配置 -->
    <mappers>
    	<mapper resource="config/tb_userinfoMapper.xml"/>
    </mappers>
</configuration>

說明:

<property name="driver" value="com.mysql.jdbc.Driver" />

呼叫mysql的驅動,就是剛剛下載的mysql-connector-java

<property name="url" value="jdbc:mysql://localhost:3306/zjh?useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=UTC" />

資料庫連線參數

localhost:3306  :連線本機資料庫,port為3306

zjh   :是資料庫名稱

useUnicode=true&amp;characterEncoding=utf-8   :是為了防止傳中文出現亂碼

serverTimezone=UTC   :因為我們下載的mysql-connector-java為最新的8.0.12版,必需加上時區才不會拋錯。

<property name="username" value="root" />
<property name="password" value="xxxxxx" />

賬號跟密碼。

    <mappers>
        <mapper resource="config/tb_userinfoMapper.xml"/>
    </mappers>

mapper設定檔,因為我創了一個資料表,叫做tb_userinfo,所以設定的名字取名為tb_userinfoMapper.xml,比較好認。具體細節下一小節說明。

三.配置Mapper.xml

主要需要檔案有三個

  • pojo,對應資料表的檔案
  • Mapper.xml 設定sql的語法
  • Interface,設定資料庫的配合資料庫語法

在配置檔案前,我們先創建資料表,裡面只有三個欄位id、username、age。

create table `tb_userinfo`(
    `id` char(2) COLLATE utf8_unicode_ci NOT NULL,
    `userName` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL,
    `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

第一個步驟,根據資料表開始創建POJO。

檔名:TB_UserInfo.java

package mybatis.pojo;

public class TB_UserInfo {
	private String id;
	private String userName;
	private int age;
	public String getId() {
		return id;
	}
	
	public void setId(String id) {
		this.id = id;
	}
	
	public String getUserName() {
		return userName;
	}
	
	public void setUserName(String userName) {
		this.userName = userName;
	}
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
}

第二個步驟,我們開始創建Mapper.xml

檔名:tb_userinfoMapper.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="mybatis.sqlmap.TB_UserInfoMapper">
	<select id="select1" parameterType="string" resultType="mybatis.pojo.TB_UserInfo">
		SELECT * FROM tb_userinfo WHERE id=#{id}
	</select>

	<insert id="insert1" parameterType="mybatis.pojo.TB_UserInfo">
		insert into tb_userinfo(id,userName,age)values(#{id},#{userName},#{age});
	</insert>

	<update id="update1" parameterType="mybatis.pojo.TB_UserInfo">
		update tb_userinfo set userName = #{userName} WHERE id=#{id}
	</update>

	<delete id="delete1" parameterType="string">
		delete FROM tb_userinfo WHERE id=#{value}
	</delete>
</mapper>

第三個步驟,我們開始創建Interface

檔名:TB_UserInfoMapper.java

package mybatis.sqlmap;

import mybatis.pojo.TB_UserInfo;

public interface TB_UserInfoMapper{
	public TB_UserInfo select1(String id);
	public int insert1(TB_UserInfo tb_userinfo);
	public int delete1(String id);
	public int update1(TB_UserInfo tb_userinfo);
}

四、建立資料庫連線

建立mybatis連線,主要需要的是下面三個class。

  • SqlSessionFactoryBuilder:讀取設定檔,並創建SqlSessionFactory,創建完SqlSessionFactory,它就沒用途了。
  • SqlSessionFactory:工廠,當我們要對資料庫連線的時候,就需要使用它來創建SqlSession
  • SqlSession:執行資料庫語法,除查詢、新增、修改、刪除外,包含commit和rollback都交由他控制。

下面為創建SqlSessionFactoryBuilder創建SqlSessionFactory的語法

private static SqlSessionFactory sqlSessionFactory = null;

static {
   String resource = "config/mybatis-config.xml";
   InputStream inputStream = Resources.getResourceAsStream(resource);
   sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}

五、執行查詢、新增、修改、刪除操作

查詢語法

	/**
	 * 查詢語法
	 */
	public void selectSqlSession() {
		SqlSession sqlSession = null;
		try {
			sqlSession = sqlSessionFactory.openSession();
			TB_UserInfoMapper tb_userinfoMapper = sqlSession.getMapper(TB_UserInfoMapper.class);
			TB_UserInfo tb_UserInfo = tb_userinfoMapper.select1("A1");
			System.out.println(tb_UserInfo.getUserName());
		}catch(Exception e ) {
			e.printStackTrace();
		}finally {
			if(sqlSession != null) {
				sqlSession.close();
				sqlSession = null;
			}
		}
	}

新增語法

	/**
	 * 插入語法
	 */
	public void insertSqlSession() {
		SqlSession sqlSession = null;
		try {
			sqlSession = sqlSessionFactory.openSession();
			TB_UserInfoMapper tb_userinfoMapper = sqlSession.getMapper(TB_UserInfoMapper.class);
			TB_UserInfo tb_userinfo = new TB_UserInfo();
			tb_userinfo.setId("A2");
			tb_userinfo.setAge(36);
			tb_userinfo.setUserName("小米");
			tb_userinfoMapper.insert1(tb_userinfo);
			sqlSession.commit();
		}catch(Exception e ) {
			sqlSession.rollback();
			e.printStackTrace();
		}finally {
			if(sqlSession != null) {
				sqlSession.close();
				sqlSession = null;
			}
		}
	}

修改語法

	/**
	 * 更新語法
	 */
	public void updateSqlSession() {
		SqlSession sqlSession = null;
		try {
			sqlSession = sqlSessionFactory.openSession();
			TB_UserInfoMapper tb_userinfoMapper = sqlSession.getMapper(TB_UserInfoMapper.class);
			TB_UserInfo tb_userinfo = new TB_UserInfo();
			tb_userinfo.setId("A2");
			tb_userinfo.setUserName("小明");
			tb_userinfoMapper.update1(tb_userinfo);
			sqlSession.commit();
		}catch(Exception e ) {
			sqlSession.rollback();
			e.printStackTrace();
		}finally {
			if(sqlSession != null) {
				sqlSession.close();
				sqlSession = null;
			}
		}
	}

刪除語法

	/**
	 * 刪除語法
	 */
	public void deleteSqlSession() {
		SqlSession sqlSession = null;
		try {
			sqlSession = sqlSessionFactory.openSession();
			TB_UserInfoMapper tb_userinfoMapper = sqlSession.getMapper(TB_UserInfoMapper.class);
			tb_userinfoMapper.delete1("A2");
			sqlSession.commit();
		}catch(Exception e ) {
			sqlSession.rollback();
			e.printStackTrace();
		}finally {
			if(sqlSession != null) {
				sqlSession.close();
				sqlSession = null;
			}
		}
	}

以上就是我們使用mybatis進行最簡單的查詢、新增、修改、刪除最簡單的範例。

 

最後,我們在附上最後一直程式完整的程式碼跟以及專案目錄。

專案目錄

mybatisTest.java

package testmybatis;

import java.io.IOException;
import java.io.InputStream;

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.slf4j.Logger;
import org.slf4j.LoggerFactory;

import mybatis.pojo.TB_UserInfo;
import mybatis.sqlmap.TB_UserInfoMapper;

public class MybatisTest {
	private static Logger log = LoggerFactory.getLogger(MybatisTest.class);
	private static SqlSessionFactory sqlSessionFactory = null;
	
	static {
		try {
			if(sqlSessionFactory == null) {
				synchronized (MybatisTest.class) {
					if(sqlSessionFactory == null) {
						String resource = "config/mybatis-config.xml";
						InputStream inputStream = Resources.getResourceAsStream(resource);
						sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
					}
				}
			}
		} catch (IOException e) {
			log.error(e.getMessage());
		}
	}
	
	/**
	 * 查詢語法
	 */
	public void selectSqlSession() {
		SqlSession sqlSession = null;
		try {
			sqlSession = sqlSessionFactory.openSession();
			TB_UserInfoMapper tb_userinfoMapper = sqlSession.getMapper(TB_UserInfoMapper.class);
			TB_UserInfo tb_UserInfo = tb_userinfoMapper.select1("A1");
			System.out.println(tb_UserInfo.getUserName());
		}catch(Exception e ) {
			e.printStackTrace();
		}finally {
			if(sqlSession != null) {
				sqlSession.close();
				sqlSession = null;
			}
		}
	}
	
	/**
	 * 插入語法
	 */
	public void insertSqlSession() {
		SqlSession sqlSession = null;
		try {
			sqlSession = sqlSessionFactory.openSession();
			TB_UserInfoMapper tb_userinfoMapper = sqlSession.getMapper(TB_UserInfoMapper.class);
			TB_UserInfo tb_userinfo = new TB_UserInfo();
			tb_userinfo.setId("A2");
			tb_userinfo.setAge(36);
			tb_userinfo.setUserName("小米");
			tb_userinfoMapper.insert1(tb_userinfo);
			sqlSession.commit();
		}catch(Exception e ) {
			sqlSession.rollback();
			e.printStackTrace();
		}finally {
			if(sqlSession != null) {
				sqlSession.close();
				sqlSession = null;
			}
		}
	}
	
	/**
	 * 更新語法
	 */
	public void updateSqlSession() {
		SqlSession sqlSession = null;
		try {
			sqlSession = sqlSessionFactory.openSession();
			TB_UserInfoMapper tb_userinfoMapper = sqlSession.getMapper(TB_UserInfoMapper.class);
			TB_UserInfo tb_userinfo = new TB_UserInfo();
			tb_userinfo.setId("A2");
			tb_userinfo.setUserName("小明");
			tb_userinfoMapper.update1(tb_userinfo);
			sqlSession.commit();
		}catch(Exception e ) {
			sqlSession.rollback();
			e.printStackTrace();
		}finally {
			if(sqlSession != null) {
				sqlSession.close();
				sqlSession = null;
			}
		}
	}
	
	/**
	 * 刪除語法
	 */
	public void deleteSqlSession() {
		SqlSession sqlSession = null;
		try {
			sqlSession = sqlSessionFactory.openSession();
			TB_UserInfoMapper tb_userinfoMapper = sqlSession.getMapper(TB_UserInfoMapper.class);
			tb_userinfoMapper.delete1("A2");
			sqlSession.commit();
		}catch(Exception e ) {
			sqlSession.rollback();
			e.printStackTrace();
		}finally {
			if(sqlSession != null) {
				sqlSession.close();
				sqlSession = null;
			}
		}
	}
	
	public static void main(String[] args) {
		try {
			MybatisTest mabatisTest = new MybatisTest();
			mabatisTest.selectSqlSession();
			mabatisTest.insertSqlSession();
			mabatisTest.updateSqlSession();
			mabatisTest.deleteSqlSession();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

 

 

 

 


因為很多文章是過往自己搜集的資料、圖片,如有侵權疑慮請告知,將立即下架刪除。