1. 程式人生 > >MyBatis框架實現簡單增刪改查

MyBatis框架實現簡單增刪改查

MyBtatis 是一個支援普通SQL查詢,儲存過程和高階對映的優秀持久層框架 MyBatis使用簡單的XML或註解用於配置和原始對映,將介面和JAVA的P0J0s(普通的Java物件),對映成資料庫中 的記錄。 這個框架操作的是Dao層,方便我們訪問資料庫, 1.載入配置 2.SQL解析 3.SQl執行 4.結果對映 導包 以及建立配置
然後是在資料庫中建表,建立自己需要的表格以及實體類,配置這個xml檔案和資料庫建立連線,將檔案放在src下
<?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>
		<property name="jdbc.driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
		<property name="jdbc.url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
		<property name="jdbc.username" value="mybatis"/>
		<property name="jdbc.password" value="Jredu12345"/>
	</properties>
	<typeAliases>
		<!-- 解析類的別名 -->
		<!-- <typeAlias alias="U" type="com.jereh.entity.User"/> -->
		<!-- 掃描包下的所有類檔案,這個包下的所有類都是簡寫 -->
		<package name="com.jredu.entity"/>
	</typeAliases>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driverClassName}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<!-- 掃描包下的所有xml檔案,該包下的所有對映都會匹配 -->
		<package name="com.jredu.dao"/>
	</mappers>
</configuration>


編寫實體類和dao介面,
package com.jredu.dao;

import java.util.List;

import com.jredu.entity.Address;

public interface AddressDao {
	
	
	int insert(Address address);
	
	int delete(int id);
	
	int update(Address address);
	
	Address select(int id);
	
	List<Address> selectAll();
}
配置對映檔案,放在dao層下
<?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="com.jredu.dao.AddressDao">
	<!-- 關聯對應的方法 -->
	<insert id="insert" parameterType="Address">
		insert into address values(address_seq.nextval,#{province},#{city},#{area})
	</insert>
	<delete id="delete" parameterType="int">
		delete from address where id=#{id}
	</delete>
	<update id="update" parameterType="Address">
		update address set province=#{province},city=#{city},area=#{area} where id=#{id}
	</update>
	<select id="select" parameterType="int" resultType="Address">
		select * from address where id=#{id}
	</select>
	<select id="selectAll"  resultType="Address">
		select * from address
	</select>
</mapper> 

然後就是編寫測試類 測試類有三種不同的寫法
第一種最為複雜
public static void main(String[] args) {
		// TODO Auto-generated method stub
		//配置資訊地址
		String resource="mybatis-config.xml";
		//定義一個輸入流
		InputStream is=null;
		//從配置檔案當中讀取資訊
		is=Test.class.getClassLoader().getResourceAsStream(resource);
		//建立一個sql物件工廠
		SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
		//得到所有的sql物件
		SqlSession sqlSession=factory.openSession();
		//通過sqlsesion得到物件(通過getMapper方法把對應的對映檔案轉成具體實現)
		UserDao userDao=sqlSession.getMapper(AdressDao.class);
		//具體實現參考方法二
	}
方法二 是將方法先封裝好了,在拿出來使用,比較方便
package com.jredu.util;

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;

/**
 * sqlsesion物件工具類
 * @author Administrator
 *
 */
public class SqlSessionFactoryUtil {

	private static SqlSessionFactory factory;
	//檔名
	private final static String resource="mybatis-config.xml";
	
	private static SqlSessionFactory getFactory() {
		if(factory==null) {
			InputStream is=null;
			try {
				is=Resources.getResourceAsStream(resource);
				factory=new SqlSessionFactoryBuilder().build(is);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} finally{
				try {
					is.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		return factory;
	}
	/**
	 * 得到sqlsession物件
	 * @return
	 */
	public static SqlSession openSession() {
		return getFactory().openSession();
	}
}
具體實現
package com.jredu.test;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.jredu.dao.AddressDao;
import com.jredu.entity.Address;
import com.jredu.util.SqlSessionFactoryUtil;

public class TestAdress {
	
	public static void main(String[] args) {
		SqlSession session=SqlSessionFactoryUtil.openSession();
		AddressDao dao=session.getMapper(AddressDao.class);
//		Address a=new Address();
//		a.setProvince("山東");
//		a.setCity("煙臺");
//		a.setArea("zhifu");
//		int code=dao.insert(a);
//		if(code>0){
//			session.commit();
//			System.out.println("新增成功!");
//		}
//		int code=dao.delete(2);
//		if(code>0){
//			session.commit();
//			System.out.println("刪除成功");
//		}
//		Address a=new Address();
//		a.setProvince("山東");
//		a.setCity("煙臺");
//		a.setArea("萊山");
//		a.setId(3);
//		int code=dao.update(a);
//		if(code>0){
//			session.commit();
//			System.out.println("更新成功");
//		}
//		Address a=new Address();
//		a=dao.select(5);
//		System.out.println(a);
		List<Address> list =dao.selectAll();
		System.out.println(list);
	}
}
方法三 是用到了lig4j,編寫日誌,猶豫篇幅問題,放在下一篇 部落格。本篇部落格只是簡單丟擲一個例子。需要繼續瞭解MyBatis框架http://blog.csdn.net/zhaolimulin