久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

mybatis學(xué)習(xí)總結(jié)-mybatis初體驗(yàn)

從開始工作到現(xiàn)在,用到的ORM框架都是Hibernate,聽說過ibatis,但是一直為看過具體的用法。

創(chuàng)新互聯(lián)公司主營(yíng)鷹潭網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,App定制開發(fā),鷹潭h5成都小程序開發(fā)搭建,鷹潭網(wǎng)站營(yíng)銷推廣歡迎鷹潭等地區(qū)企業(yè)咨詢

前段時(shí)間面試的時(shí)候,發(fā)現(xiàn)好幾個(gè)公司都問會(huì)不會(huì)ibatis,所以最近幾天對(duì)其進(jìn)行了一下學(xué)習(xí),然后在我的博客里總結(jié)一下

  這篇總結(jié)是對(duì)ibatis的入門,說明一些ibatis的基本應(yīng)用,還有平時(shí)我們可以用ibatis來干什么。


iBATIS一詞來源于“internet”和“abatis”的組合,是一個(gè)由Clinton Begin在2002年發(fā)起的開放源代碼項(xiàng)目。于2010年6月16號(hào)被谷歌托管,改名為MyBatis。是一個(gè)基于SQL映射支持Java和·NET的持久層框架。

以上內(nèi)容來源于百度百科。因?yàn)閕batis已經(jīng)改名為mybatis,后面我就統(tǒng)一叫mybatis


和hibernate一樣,mybatis是一個(gè)ORM框架,對(duì)我們的數(shù)據(jù)庫(kù)操作進(jìn)行了封裝,提高了開發(fā)效率。

通過學(xué)習(xí)我了解到:mybatis只是一個(gè)半自動(dòng)化的ORM實(shí)現(xiàn),需要我們自己寫sql,而不像hibernate那樣,直接定義好實(shí)體與數(shù)據(jù)表的映射就行。


下面我們來通過示例,進(jìn)行mybatis的初體驗(yàn)


1.獲取mybatis

跟其他開源框架一樣,我們需要下載對(duì)應(yīng)的jar包后才能使用

2.準(zhǔn)備工作

1)打開我的eclipse,創(chuàng)建一個(gè)java web項(xiàng)目。我這里取名叫mybatis

2)解壓下載好的mybatis-3.2.7.zip,找到里面的mybatis-3.2.7.jar,加入build path中

3)可能還需要的jar包,在lib目錄下:asm-3.3.1.jar、cglib-2.2.2.jar,一并加到build path中,如果過程中還需要其他jar包,再另行加入

4)因?yàn)閙ybatis是ORM框架,所以少不了數(shù)據(jù)庫(kù),我這里用的是Oracle 10g,添加oracle驅(qū)動(dòng)到build path


3.準(zhǔn)備數(shù)據(jù)

還是因?yàn)橐胢ybatis,我準(zhǔn)備了幾張表,表里插入數(shù)據(jù)

create table t_user (id number(10) primary key,name varchar2(100),org_id number(10));insert into t_user (id,name,org_id) values (1,'張三',1);insert into t_user (id,name,org_id) values (2,'李四',1);insert into t_user (id,name,org_id) values (3,'王五',2);insert into t_user (id,name,org_id) values (4,'趙六',2);insert into t_user (id,name,org_id) values (5,'錢七',3);create table t_role (id number(10) primary key,name varchar2(100));insert into t_role (id,name) values (1,'總裁');insert into t_role (id,name) values (2,'副總裁');insert into t_role (id,name) values (3,'總經(jīng)理');insert into t_role (id,name) values (4,'項(xiàng)目經(jīng)理');create table t_user_role(user_id number(10),role_id number(10));insert into t_user_role(user_id,role_id) values(1,1);insert into t_user_role(user_id,role_id) values(2,2);insert into t_user_role(user_id,role_id) values(3,3);insert into t_user_role(user_id,role_id) values(4,4);insert into t_user_role(user_id,role_id) values(5,4);create table t_org(id number(10) primary key,name varchar2(100));insert into t_org(id,name) values(1,'無線處');insert into t_org(id,name) values(2,'有線處');insert into t_org(id,name) values(3,'通用處');


4.mybatis最簡(jiǎn)單實(shí)例

下面來完成一個(gè)mybatis最簡(jiǎn)單的實(shí)例

  hibernate有一個(gè)核心配置叫hibernate.cfg.xml,而mybatis的核心配置名稱我這里取名叫mybatis-config.xml

來完成一個(gè)最基本的mybatis-config.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>  
    <!-- 對(duì)事務(wù)的管理和連接池的配置 -->  
    <environments default="development">  
        <environment id="development">  
            <transactionManager type="JDBC" />  
            <dataSource type="POOLED">  
                <property name="driver" value="oracle.jdbc.driver.OracleDriver" />  
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />  
                <property name="username" value="ibatis" />  
                <property name="password" value="ibatis" />  
            </dataSource>  
        </environment>  
    </environments>  
      
    <!-- mapping 文件路徑配置 -->  
    <mappers>  
        <mapper resource="com/yu/res/UserMapper.xml" />  
    </mappers>  </configuration>

  environments元素下配置了事務(wù)的管理、連接池的設(shè)定,

mappers元素下,配置了我們的映射文件路徑。

從核心配置中我們看到需要配置一個(gè)映射文件,在配置映射文件之前,根據(jù)我們建的表,來創(chuàng)建對(duì)應(yīng)的pojo模型

User.java

package com.yu.model;public class User {
	private Long id;
	private String name;
	
	private Org org;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Org getOrg() {
		return org;
	}
	public void setOrg(Org org) {
		this.org = org;
	}
	
	}

Org.java

package com.yu.model;import java.util.ArrayList;import java.util.List;public class Org {
	private Long id;
	private String name;
	
	private List<User> users = new ArrayList<User>();
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<User> getUsers() {
		return users;
	}
	public void setUsers(List<User> users) {
		this.users = users;
	}
	}

Role.java

package com.yu.model;public class Role {
	private Long id;
	private String name;
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}}

配置UserMapper.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="UserMapper">  
    <select id="queryUser" resultType="com.yu.model.User">  
        select * from t_user
    </select>    
    <select id="findUserById" resultType="com.yu.model.User" parameterType="long">  
        select * from t_user where id = #{id}
    </select>    
    <select id="findUserByName" resultType="com.yu.model.User" parameterType="java.lang.String">  
        select * from t_user where name like '%'||#{name}||'%'
    </select>    
    <insert id="addUser">    	insert into t_user(id,name) values(#{id},#{name})
    </insert>    
    <update id="updateUser" parameterType="com.yu.model.User">    	update t_user set name = #{name} where id = ${id}
    </update>    
    <delete id="deleteUser" parameterType="java.lang.Long">    	delete t_user where id = #{id}
    </delete></mapper>

從配置中可以看到,我們配置了常用的增、刪、改、查、條件查、模糊查等操作。


5.讓mybatis運(yùn)行起來

將主要的配置配好以后,我們就來看看,怎么用我們的java程序來對(duì)mybatis進(jìn)行操作。

首先回顧一下hibernate中操作數(shù)據(jù)庫(kù)的流程:

1)讀取配置

2)獲取SessionFactory(重量級(jí),只有一個(gè))

3)獲取session

4)開啟事務(wù)

5)進(jìn)行CRUD操作

6)提交事務(wù)

7)關(guān)閉session


在我們的mybatis中,也有類似的步驟:

1)獲取SqlSessionFactory

2)獲取SqlSession

3)進(jìn)行CURD操作

4)提交事務(wù)

5)關(guān)閉SqlSession


首先我們來看怎么獲取SqlSessionFactory
每 一 個(gè) MyBatis 的 應(yīng) 用 程 序 都 以 一 個(gè) SqlSessionFactory 對(duì) 象 的 實(shí) 例 為 核 心 。 SqlSessionFactory 對(duì) 象 的 實(shí) 例 可 以 通 過 SqlSessionFactoryBuilder 對(duì) 象 來 獲 得 。 SqlSessionFactoryBuilder 對(duì)象可以從 XML 配置文件,或從 Configuration 類的習(xí)慣準(zhǔn)備的實(shí) 例中構(gòu)建 SqlSessionFactory 對(duì)象。

引用自官方文檔的一句話。說明獲取SqlSessionFactory有兩種方式,第一種為通過我們的核心配置XML,第二種為通過Configuration類


通過核心配置XML方式

Reader reader = Resources.getResourceAsReader("ibatis-config.xml");SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);

通過Configuration方式(其實(shí)就是將XML配置轉(zhuǎn)化為對(duì)應(yīng)的對(duì)象)

DataSource dataSource = ...TransactionFactory transactionFactory = new JdbcTransactionFactory();Environment environment = new Environment("development", transactionFactory, dataSource);Configuration configuration = new Configuration(environment);configuration.addMapper(BlogMapper.class);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
獲取SqlSession
SqlSession sqlSession = factory.openSession();
工具類添加

因?yàn)槲覀兊南到y(tǒng)里只以一個(gè)SqlSessionFactory對(duì)象為核心,所以可以通過一個(gè)工具類來獲取SqlSessionFactory、SqlSession。方便程序操作。

package com.yu.util;import java.io.IOException;import java.io.Reader;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;/**
 * mybatis工具類
 * @author yu
 *
 */public class SqlSessionFactoryUtil {
	private static String XML_PATH = "mybatis-config.xml";
	private static SqlSessionFactory factory;
	
	static{
		Reader r = null;
		try {
			r = Resources.getResourceAsReader(XML_PATH);
			factory = new SqlSessionFactoryBuilder().build(r);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 獲取應(yīng)用中的SqlSessionFactory
	 * @return SqlSessionFactory
	 */
	public static SqlSessionFactory getSqlSessionFactory(){
		return factory;
	}
	
	/**
	 * 獲取應(yīng)用中的SqlSession
	 * @return SqlSession
	 */
	public static SqlSession getSqlSession(){
		return factory.openSession();
	}
	
	/**
	 * 關(guān)閉SqlSession
	 * @param session
	 */
	public static void closeSqlSession(SqlSession session){
		if(session != null){
			session.close();
		}
	}}
測(cè)試代碼

前面一大堆鋪墊,現(xiàn)在終于可以運(yùn)行了,我寫了個(gè)測(cè)試類,用JUnit的方式,來對(duì)mybatis的CRUD操作進(jìn)行測(cè)試。

package com.yu.test;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.junit.After;import org.junit.Before;import org.junit.Test;import com.yu.model.User;import com.yu.util.SqlSessionFactoryUtil;public class MyTest {
	
	public SqlSession session;
	
	@Before
	public void getSqlSession(){
		session = SqlSessionFactoryUtil.getSqlSession();
	}
	
	@After
	public void closeSqlSession(){
		SqlSessionFactoryUtil.closeSqlSession(session);
	}
	
	@Test
	public void queryUser(){
		List<User> users = session.selectList("UserMapper.queryUser");
		for(User u : users){
			System.out.println(u.getId()+" "+u.getName());
		}
	}
	
	@Test
	public void findUserById(){
		Long id = 1L;
		User user = session.selectOne("UserMapper.findUserById",id);
		if(user!=null){
			System.out.println(user.getId()+" "+user.getName());
		}
	}
	
	@Test
	public void findUserByName(){
		String name = "an";
		List<User> users = session.selectList("UserMapper.findUserByName",name);
		for(User u : users){
			System.out.println(u.getId()+" "+u.getName());
		}
	}
	
	@Test
	public void addUser(){
		User user = new User();
		user.setId(10L);
		user.setName("王麻子");
		session.insert("UserMapper.addUser", user);
		session.commit();
	}
	
	@Test
	public void updateUser(){
		User user = new User();
		user.setId(10L);
		user.setName("王麻子111");
		session.insert("UserMapper.updateUser", user);
		session.commit();
	}
	
	@Test
	public void deleteUser(){
		Long id = 10L;
		session.delete("UserMapper.deleteUser",id);
		session.commit();
	}}

執(zhí)行完以后,可以通過查看數(shù)據(jù)庫(kù)的方式來驗(yàn)證數(shù)據(jù)是否正確。


6.其他問題

上述示例,從核心配置文件,到映射文件,到獲取SqlSessionFactory,到獲取SqlSession,到j(luò)ava API操作,再到測(cè)試驗(yàn)證,完成了對(duì)Mybatis的基本操作。

當(dāng)然這只是最基本的用法。

比如這里的核心配置可已配置返回類型的簡(jiǎn)稱

比如這里的映射文件中resultType的設(shè)置

比如這里的java操作,還可以改為通過Mapper接口的操作

比如這里的映射配置,還可以改為在Mapper接口中通過注解的方式實(shí)現(xiàn)

再比如mybatis的動(dòng)態(tài)sql、類型轉(zhuǎn)換、攔截器等等

源碼來源:×××/technology

網(wǎng)站名稱:mybatis學(xué)習(xí)總結(jié)-mybatis初體驗(yàn)
網(wǎng)站地址:http://sd-ha.com/article44/jgspee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)標(biāo)簽優(yōu)化、、品牌網(wǎng)站制作、品牌網(wǎng)站建設(shè)、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司