MyBatis框架搭建及增刪改查操作

00潤物無聲00發表於2016-09-21

一.搭建好myBatis的環境

  1.引入jar包

    (1).mybatis-3.2.7jar核心jar

    (2).mysql核心jar

    (3).junit-4.9.jar

  2.建立mybatis全域性配置檔案SqlMapConfig.xm(名字自定義)    

    配置了資料來源、事務等mybatis執行環境,配置對映檔案(配置sql語句)

  3.mapper代理開發對映檔案User.xml

  4.目錄結構如下

    


二.增刪改查基本操作

  1.配置myBatis全域性配置檔案

<?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>
	<!-- 和spring整合後 environments配置將廢除-->
	<environments default="development">
		<environment id="development">
		<!-- 使用jdbc事務管理,事務的控制有mybatis-->
			<transactionManager type="JDBC" />
		<!-- 資料庫連線池,由mybatis管理-->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="fxq123" />
			</dataSource>
		</environment>
	</environments>
	
	<mappers>
			<mapper resource="sqlmap/User.xml"/>
	</mappers>

	
</configuration>

  

  2.配置User.xml對映,將sql語句封裝到mappedStatement物件中,進行增刪改查

<?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名稱空間,作用就是對sql進行分類化管理,理解sql隔離 注意:使用mapper程式碼方法開發,namespace有特殊重要的作用 -->
<mapper namespace="test">
	<!-- 在對映檔案中配置很多sql語句 -->
	<!-- 需求:通過id查詢使用者表的記錄 -->
	<!-- 通過select執行資料庫的查詢 -->
	<!-- id:標識對映檔案中的sql -->
	<!-- 將sql語句封裝到mappedStatement物件中,所以將id成為statement 的id -->

	<select id="findUserById" parameterType="int"
		resultType="cn.itcast.mybatis.po.User">
		select * from USER where id = #{id}
	</select>
	<!-- 自定義條件查詢使用者列表 -->
	<!-- resultType:指定就是單條記錄所對映的java物件型別 -->
	<select id="findUserByName" parameterType="java.lang.String"
		resultType="cn.itcast.mybatis.po.User">
		select * from USER where username like '%${value}%'
	</select>

	<!-- 新增使用者 parameterType:指定輸入引數型別是pojo(包括:使用者資訊) #{}中指定pojo的屬性名,接收到pojo物件的屬性值,mybatis通過OGNL獲取物件的屬性值; -->
	<insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
		<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
			SELECT
			LAST_INSERT_ID()
		</selectKey>
		insert into USER (id,username,birthday,sex,address)
		values(#{id},#{username},#{birthday},#{sex},#{address})
	</insert>

	<!-- 刪除 -->
	<delete id="deleteUser" parameterType="java.lang.Integer">
		delete from USER WHERE id
		= #{id}
	</delete>
	<!-- 更新 -->
	<update id="updateUser" parameterType="cn.itcast.mybatis.po.User">
		update USER set username =
		#{username},birthday=#{birthday},sex=#{sex},address=#{address} where
		id = #{id}
	</update>
</mapper>

  3.根據Mybatis框架結構在java程式碼中建立sqlSession 執行程式。

</pre></p><p><pre name="code" class="java">package cn.itcast.mybatis.first;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
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.Test;
import cn.itcast.mybatis.po.User;

/**
 * 入門程式 2016年9月21日14:46:51
 * 
 * @author fxq
 * 
 */
public class MybatisFirst {

	//獲得SqlSession
	public SqlSession getSqlSession() throws IOException {
		// mybastis配置檔案
		String resource = "SqlMapConfig.xml";
		// 得到配置檔案流
		InputStream impuStream = Resources.getResourceAsStream(resource);
		// 建立會話工廠
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
				.build(impuStream);
		// 通過工廠得到sqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		return sqlSession;
	}

	// 根據id查詢使用者資訊,得到一條記錄結果
	@Test
	public void findUserByIdTest() throws IOException {
		//獲得SqlSession
		SqlSession sqlSession=getSqlSession();
		// 通過sqlSession運算元據庫
		// 第一個引數:對映檔案中的statement的id,等於=namespace+"."+statement的id;
		// 第二個引數:指定和對映檔案所匹配的parameterType型別的引數
		// sqlSession.selectOne結果是與對映檔案中的所匹配的resultType型別的物件;
		User user = sqlSession.selectOne("test.findUserById", 1);
		System.out.println(user);
		// 釋放資源
		sqlSession.close();
	}

	/**
	 * 模糊查詢
	 * 
	 * @throws IOException
	 */
	@Test
	public void findUserbyNameTest() throws IOException {
		
		//獲得SqlSession
		SqlSession sqlSession=getSqlSession();
		// List中的user和對映檔案中resultType所指定的型別一直
		List<User> userList = sqlSession
				.selectList("test.findUserByName", "小明");
		System.out.println(userList);
		sqlSession.close();

	}

	/**
	 * 插入資料
	 * 
	 * @throws IOException
	 */
	@Test
	public void insertUserTest() throws IOException {
		//獲得SqlSession
		SqlSession sqlSession=getSqlSession();
		// 插入使用者物件
		// 新增使用者資訊
		User user = new User();
		user.setUsername("張小明");
		user.setBirthday(new Date());
		user.setSex("1");
		user.setAddress("河南鄭州");
		sqlSession.insert("test.insertUser", user);

		// 提交
		sqlSession.commit();
		System.out.println(user.getId());
		sqlSession.close();
	}

	/**
	 * 刪除使用者
	 * 
	 * @throws IOException
	 */
	@Test
	public void deleteUserTest() throws IOException {
		//獲得SqlSession
		SqlSession sqlSession=getSqlSession();
		sqlSession.delete("test.deleteUser", 31);
		// 提交
		sqlSession.commit();
		sqlSession.close();
	}

	/**
	 * 更新使用者
	 * 
	 * @throws IOException
	 */
	@Test
	public void updateUserTest() throws IOException {
		//獲得SqlSession
		SqlSession sqlSession=getSqlSession();
		User user = new User();
		user.setId(28);
		user.setBirthday(new Date());
		user.setUsername("範曉權");
		user.setAddress("河北省雞澤縣");
		user.setSex("2");

		sqlSession.update("test.updateUser", user);
		sqlSession.commit();
		sqlSession.close();
	}
}


三.總結:

  MyBatis 是支援普通 SQL查詢,儲存過程和高階對映的優秀持久層框架。MyBatis 消除了幾乎所有的JDBC程式碼和引數的手工設定以及結果集的檢索。MyBatis 使用簡單的 XML或註解用於配置和原始對映,將介面和 Java 的POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。



相關文章