国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

MyBatis入門初體驗(yàn)之使用大全(2)

2019-11-26 14:02:40
字體:
供稿:網(wǎng)友

MyBatis簡(jiǎn)介

MyBatis 本是apache的一個(gè)開源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code,并且改名為MyBatis 。2013年11月遷移到Github。
iBATIS一詞來源于“internet”和“abatis”的組合,是一個(gè)基于Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)

1.所需jar包

這里單獨(dú)討論MyBatis的使用,只需要放入mybatis-x.x.x.jar包即可。

如果使用maven構(gòu)建項(xiàng)目,則需要在pom.xml的dependency中放入如下配置:

<dependency><groupid>org.mybatis</groupid>mybatis</artifactid><version>3.2.2</version></dependency>

公司目前用的3.2.2的,可以根據(jù)自己的jar包放入版本號(hào)。

如果你是與相應(yīng)的框架一起集成,則需要放入集成包,比如,我們公司用mybatis與spring集成,

則還需要加入mybatis-spring-xxx.jar包,根據(jù)實(shí)際情況決定。當(dāng)然了,數(shù)據(jù)庫(kù)驅(qū)動(dòng)jar包也是少不了的。

2.從XML中構(gòu)建SqlSessionFactory

每個(gè)基于 MyBatis 的應(yīng)用都是以一個(gè) SqlSessionFactory 的實(shí)例為中心的。

SqlSessionFactory 的實(shí)例可以通過 SqlSessionFactoryBuilder 獲得。

而 SqlSessionFactoryBuilder 則可以從 XML 配置文件或一個(gè)預(yù)先定制的 Configuration 的實(shí)例構(gòu)建出 SqlSessionFactory 的實(shí)例。

從 XML 文件中構(gòu)建 SqlSessionFactory 的實(shí)例非常簡(jiǎn)單,建議使用類路徑下的資源文件進(jìn)行配置。

但是也可以使用任意的輸入流(InputStream)實(shí)例,包括字符串形式的文件路徑或者 file:// 的 URL 形式的文件路徑來配置。

MyBatis 包含一個(gè)名叫 Resources 的工具類,它包含一些實(shí)用方法,可使從 classpath 或其他位置加載資源文件更加容易。

例如:

String resource = "mybatis-config.xml";InputStream is = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

XML 配置文件(configuration XML)中包含了對(duì) MyBatis 系統(tǒng)的核心設(shè)置,包含獲取數(shù)據(jù)庫(kù)連接實(shí)例的數(shù)據(jù)源(DataSource)

和決定事務(wù)范圍和控制方式的事務(wù)管理器(TransactionManager)。配置文件詳細(xì)往后再說。

例如:

<!--?xml version="1.0" encoding="UTF-8" ?--><configuration><environments default="development"><environment id="development"><transactionmanager type="JDBC"><datasource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"><property name="url" value="jdbc:mysql://192.168.200.12:3306/test_mybatis"><property name="username" value="root"><property name="password" value="root123"></property></property></property></property></datasource></transactionmanager></environment></environments><mappers><!-- 注冊(cè)UserMainMapper.xml文件,UserMainMapper.xml位于com.lanhuigu.mybatis.map這個(gè)包下,所以resource寫成com/lanhuigu/mybatis/map/UserMainMapper.xml--><mapper resource="com/lanhuigu/mybatis/map/UserMainMapper.xml"></mapper></mappers></configuration>

environment 元素體中包含了事務(wù)管理和連接池的配置。mappers 元素則是包含一組 mapper 映射器(這些 mapper 的 XML 文件包含了 SQL 代碼和映射定義信息)。

3.從SqlSessionFactory中獲取SqlSession

既然有了 SqlSessionFactory ,我們就可以從中獲得 SqlSession 的實(shí)例。SqlSession 完全包含了面向數(shù)據(jù)庫(kù)執(zhí)行 SQL 命令所需的所有方法。

你可以通過 SqlSession 實(shí)例來直接執(zhí)行已映射的 SQL 語(yǔ)句。例如:

SqlSessionFactory sqlSessionFactory = null;// XML構(gòu)建SqlSessionFactory工廠實(shí)例SqlSession session = null;// 從SqlSessionFactory工廠實(shí)例中獲取SqlSession對(duì)象try {String resource = "mybatis-config.xml";InputStream is = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);session = sqlSessionFactory.openSession();User user = session.selectOne("com.lanhuigu.mybatis.map.UserMainMapper.queryUserMainById", 1);System.out.println(user.getUsername());} finally {session.close();}

用這種方式執(zhí)行映射沒什么問題,我們也可以用一種更加簡(jiǎn)潔的方式執(zhí)行映射。
使用對(duì)于給定語(yǔ)句能夠合理描述參數(shù)和返回值的接口(比如說UserMainMapper.class),

你現(xiàn)在不但可以執(zhí)行更清晰和類型安全的代碼,而且還不用擔(dān)心易錯(cuò)的字符串字面值以及強(qiáng)制類型轉(zhuǎn)換。例如:

SqlSession session = sqlSessionFactory.openSession();UserMainMapper userMainMapper = session.getMapper(UserMainMapper.class);User user = userMainMapper .queryUserMainById(1);

4.實(shí)例

光看不練容易迷糊,看看實(shí)例,在回去讀文檔,或許效果會(huì)更好。

準(zhǔn)備jar包:

mybatis-3.2.2.jar(mybatis)

mysql-connector-java-5.1.21.jar(數(shù)據(jù)庫(kù)驅(qū)動(dòng))

junit-4.4.jar(測(cè)試,不想用這個(gè)junit,用main方法測(cè)試也行)

項(xiàng)目結(jié)構(gòu):

數(shù)據(jù)庫(kù):

CREATE TABLE `t_user_main` (`f_id` int(11) NOT NULL,`f_username` varchar(20) DEFAULT NULL,`f_age` int(3) DEFAULT NULL,PRIMARY KEY (`f_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;INSERT INTO t_user_main VALUES(1,'testMyBatis',25);

mybatis的xml配置--mybatis-config.xml:

<!--?xml version="1.0" encoding="UTF-8" ?--><configuration><environments default="development"><environment id="development"><transactionmanager type="JDBC"><datasource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"><property name="url" value="jdbc:mysql://192.168.200.12:3306/test_mybatis"><property name="username" value="root"><property name="password" value="root123"></property></property></property></property></datasource></transactionmanager></environment></environments><mappers><!-- 注冊(cè)UserMainMapper.xml文件,UserMainMapper.xml位于com.lanhuigu.mybatis.map這個(gè)包下,所以resource寫成com/lanhuigu/mybatis/map/UserMainMapper.xml--><mapper resource="com/lanhuigu/mybatis/map/UserMainMapper.xml"></mapper></mappers></configuration>

User.java:

package com.lanhuigu.mybatis.entity;import java.io.Serializable;public class User implements Serializable{private static final long serialVersionUID = -3412068097348759984L;private Integer id;private String username;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}

UserMainMapper.xml:

   

<!--?xml version="1.0" encoding="UTF-8" ?--> <!-- 為這個(gè)mapper指定一個(gè)唯一的namespace,namespace的值習(xí)慣上設(shè)置成包名+去掉sql映射文件后綴的文件名,這樣就能夠保證namespace的值是唯一的,例如namespace="com.lanhuigu.mybatis.map.UserMainMapper"就是com.lanhuigu.mybatis.map(包名)+UserMainMapper(UserMainMapper.xml文件去除后綴)--><mapper namespace="com.lanhuigu.mybatis.map.UserMainMapper"> <!-- 在select標(biāo)簽中編寫查詢的SQL語(yǔ)句, 設(shè)置select標(biāo)簽的id屬性為queryUserMainById,id屬性值必須是唯一的,不能夠重復(fù)使用parameterType屬性指明查詢時(shí)使用的參數(shù)類型,resultType屬性指明查詢返回的結(jié)果集類型resultType="com.lanhuigu.mybatis.entity.User"就表示將查詢結(jié)果封裝成一個(gè)User類的對(duì)象返回User類就是users表所對(duì)應(yīng)的實(shí)體類--><select id="queryUserMainById" parametertype="int" resulttype="com.lanhuigu.mybatis.entity.User"> select f_id id, f_username username, f_age age from t_user_main where f_id = #{id} </select> </mapper>

MyBatisTest.java測(cè)試代碼:

package com.lanhuigu.mybatis;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.junit.Test;import com.lanhuigu.mybatis.entity.User;public class MyBatisTest {@Testpublic void testMyBatis() throws IOException {SqlSessionFactory sqlSessionFactory = null;// XML構(gòu)建SqlSessionFactory工廠實(shí)例SqlSession session = null;// 從SqlSessionFactory工廠實(shí)例中獲取SqlSession對(duì)象try {//1.mybatis的配置文件路徑,這里放在classpath下,相當(dāng)于src下String resource = "mybatis-config.xml";//2.讀取mybatis配置文件,同時(shí)創(chuàng)建SqlSessionFactory工廠實(shí)例//======2.1使用類加載器加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件)//InputStream is = MyBatisTest.class.getClassLoader().getResourceAsStream(resource);//構(gòu)建SqlSessionFactory工廠//sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//======2.2使用MyBatis提供的Resources類加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件)//Reader reader = Resources.getResourceAsReader(resource); //構(gòu)建SqlSessionFactory工廠//sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);//======2.3 使用MyBatis提供的Resources類加載mybatis的配置文件InputStream is = Resources.getResourceAsStream(resource);//構(gòu)建SqlSessionFactory工廠sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.創(chuàng)建能執(zhí)行映射文件中sql的sqlSessionsession = sqlSessionFactory.openSession();/*** 映射sql的標(biāo)識(shí)字符串:* com.lanhuigu.mybatis.map.UserMainMapper是UserMainMapper.xml文件中mapper標(biāo)簽的namespace屬性的值,* queryUserMainById是UserMainMapper.xml文件select標(biāo)簽的id屬性值,通過select標(biāo)簽的id屬性值,* 通過這兩個(gè)的組合就可以找到要執(zhí)行的SQL*///執(zhí)行查詢返回一個(gè)唯一user對(duì)象的sql,注意:"com.lanhuigu.mybatis.map.UserMainMapper.queryUserMainById"為映射sql的標(biāo)識(shí)字符串User user = session.selectOne("com.lanhuigu.mybatis.map.UserMainMapper.queryUserMainById", 1);System.out.println(user.getUsername());} finally {session.close();}}}

控制臺(tái)輸出:

對(duì)于以上實(shí)例,在測(cè)試代碼中:

User user = session.selectOne("com.lanhuigu.mybatis.map.UserMainMapper.queryUserMainById", 1);System.out.println(user.getUsername());

這段代碼使用起來是不是很不爽,我們說過有種更直接的方式:

在項(xiàng)目結(jié)構(gòu)map下加上一個(gè)映射接口:

package com.lanhuigu.mybatis.map;import com.lanhuigu.mybatis.entity.User;public interface UserMainMapper {public User queryUserMainById(int id);}

同時(shí),將測(cè)試的代碼做如下修改:

package com.lanhuigu.mybatis;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.junit.Test;import com.lanhuigu.mybatis.entity.User;import com.lanhuigu.mybatis.map.UserMainMapper;public class MyBatisTest {@Testpublic void testMyBatis() throws IOException {SqlSessionFactory sqlSessionFactory = null;// XML構(gòu)建SqlSessionFactory工廠實(shí)例SqlSession session = null;// 從SqlSessionFactory工廠實(shí)例中獲取SqlSession對(duì)象try {//1.mybatis的配置文件路徑,這里放在classpath下,相當(dāng)于src下String resource = "mybatis-config.xml";//2.讀取mybatis配置文件,同時(shí)創(chuàng)建SqlSessionFactory工廠實(shí)例//======2.1使用類加載器加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件)//InputStream is = MyBatisTest.class.getClassLoader().getResourceAsStream(resource);//構(gòu)建SqlSessionFactory工廠//sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//======2.2使用MyBatis提供的Resources類加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件)//Reader reader = Resources.getResourceAsReader(resource); //構(gòu)建SqlSessionFactory工廠//sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);//======2.3 使用MyBatis提供的Resources類加載mybatis的配置文件InputStream is = Resources.getResourceAsStream(resource);//構(gòu)建SqlSessionFactory工廠sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.創(chuàng)建能執(zhí)行映射文件中sql的sqlSessionsession = sqlSessionFactory.openSession();/*** 映射sql的標(biāo)識(shí)字符串:* com.lanhuigu.mybatis.map.UserMainMapper是UserMainMapper.xml文件中mapper標(biāo)簽的namespace屬性的值,* queryUserMainById是UserMainMapper.xml文件select標(biāo)簽的id屬性值,通過select標(biāo)簽的id屬性值,* 通過這兩個(gè)的組合就可以找到要執(zhí)行的SQL*///執(zhí)行查詢返回一個(gè)唯一user對(duì)象的sql,注意:"com.lanhuigu.mybatis.map.UserMainMapper.queryUserMainById"為映射sql的標(biāo)識(shí)字符串/*User user = session.selectOne("com.lanhuigu.mybatis.map.UserMainMapper.queryUserMainById", 1);System.out.println(user.getUsername());*/UserMainMapper userMainMapper = session.getMapper(UserMainMapper.class);User user = userMainMapper.queryUserMainById(1);System.out.println(user.getUsername());} finally {session.close();}}}

把之前的查詢部分修改成:

UserMainMapper userMainMapper = session.getMapper(UserMainMapper.class);User user = userMainMapper.queryUserMainById(1);

使用對(duì)于給定語(yǔ)句能夠合理描述參數(shù)和返回值的接口(比如說UserMainMapper.class),

現(xiàn)在不但可以執(zhí)行更清晰和類型安全的代碼,而且還不用擔(dān)心易錯(cuò)的字符串字面值以及強(qiáng)制類型轉(zhuǎn)換。

運(yùn)行測(cè)試代碼,效果一樣。

userMainMapper接口位置:

既然我們加完了接口,mybatis-config.xml對(duì)于映射器部分可以換一種配置,直接映射UserMainMapper接口所在包文件:

也就是將

修改成

完整配置如下,運(yùn)行測(cè)試代碼即可檢驗(yàn),這種做法維護(hù)更輕松,統(tǒng)一對(duì)map進(jìn)行管理:

<!--?xml version="1.0" encoding="UTF-8" ?--><configuration><environments default="development"><environment id="development"><transactionmanager type="JDBC"><datasource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"><property name="url" value="jdbc:mysql://192.168.200.12:3306/test_mybatis"><property name="username" value="root"><property name="password" value="root123"></property></property></property></property></datasource></transactionmanager></environment></environments><mappers><!-- 注冊(cè)UserMainMapper.xml文件,UserMainMapper.xml位于com.lanhuigu.mybatis.map這個(gè)包下,所以resource寫成com/lanhuigu/mybatis/map/UserMainMapper.xml--><!-- <mapper resource="com/lanhuigu/mybatis/map/UserMainMapper.xml"></mapper> --><package name="com.lanhuigu.mybatis.map"></package></mappers></configuration>

以上我們可以看到不管我們?cè)趺赐妫瑂ql是不是還在UserMainMapper.xml中映射?

這種方式實(shí)現(xiàn)是唯一的嗎?難道我必須要用xml?

當(dāng)然不是了,如果以上你的代碼是一路修改下來測(cè)試成功的,那么我們?cè)僮鲎詈笠粋€(gè)修改,

不用UserMainMapper.xml實(shí)現(xiàn)映射,我們采用java注解來實(shí)現(xiàn)映射。

主要修改的地方是UserMainMapper.java這個(gè)接口,新加一個(gè)方法queryUserMainByIdNew,用注解實(shí)現(xiàn)映射

mybatis自解析接口映射。

修改后的UserMainMapper.java接口:

package com.lanhuigu.mybatis.map;import org.apache.ibatis.annotations.Param;import org.apache.ibatis.annotations.Select;import com.lanhuigu.mybatis.entity.User;public interface UserMainMapper {/*** xml*/public User queryUserMainById(int id);/*** java注解*/@Select("select f_id id,f_username username,f_age age from t_user_main where f_id = ${id} ")public User queryUserMainByIdNew(@Param("id") int id);}

修改后的測(cè)試代碼,運(yùn)行感受下:

package com.lanhuigu.mybatis;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.junit.Test;import com.lanhuigu.mybatis.entity.User;import com.lanhuigu.mybatis.map.UserMainMapper;public class MyBatisTest {@Testpublic void testMyBatis() throws IOException {SqlSessionFactory sqlSessionFactory = null;// XML構(gòu)建SqlSessionFactory工廠實(shí)例SqlSession session = null;// 從SqlSessionFactory工廠實(shí)例中獲取SqlSession對(duì)象try {//1.mybatis的配置文件路徑,這里放在classpath下,相當(dāng)于src下String resource = "mybatis-config.xml";//2.讀取mybatis配置文件,同時(shí)創(chuàng)建SqlSessionFactory工廠實(shí)例//======2.1使用類加載器加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件)//InputStream is = MyBatisTest.class.getClassLoader().getResourceAsStream(resource);//構(gòu)建SqlSessionFactory工廠//sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//======2.2使用MyBatis提供的Resources類加載mybatis的配置文件(它也加載關(guān)聯(lián)的映射文件)//Reader reader = Resources.getResourceAsReader(resource); //構(gòu)建SqlSessionFactory工廠//sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);//======2.3 使用MyBatis提供的Resources類加載mybatis的配置文件InputStream is = Resources.getResourceAsStream(resource);//構(gòu)建SqlSessionFactory工廠sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.創(chuàng)建能執(zhí)行映射文件中sql的sqlSessionsession = sqlSessionFactory.openSession();/*** 映射sql的標(biāo)識(shí)字符串:* com.lanhuigu.mybatis.map.UserMainMapper是UserMainMapper.xml文件中mapper標(biāo)簽的namespace屬性的值,* queryUserMainById是UserMainMapper.xml文件select標(biāo)簽的id屬性值,通過select標(biāo)簽的id屬性值,* 通過這兩個(gè)的組合就可以找到要執(zhí)行的SQL*///執(zhí)行查詢返回一個(gè)唯一user對(duì)象的sql,注意:"com.lanhuigu.mybatis.map.UserMainMapper.queryUserMainById"為映射sql的標(biāo)識(shí)字符串/*User user = session.selectOne("com.lanhuigu.mybatis.map.UserMainMapper.queryUserMainById", 1);System.out.println(user.getUsername());*//*UserMainMapper userMainMapper = session.getMapper(UserMainMapper.class);User user = userMainMapper.queryUserMainById(1);System.out.println(user.getUsername());*/UserMainMapper userMainMapper = session.getMapper(UserMainMapper.class);User user = userMainMapper.queryUserMainByIdNew(1);System.out.println(user.getUsername());} finally {session.close();}}}

以上所述是小編給大家介紹的MyBatis入門初體驗(yàn)之使用大全(2),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)武林網(wǎng)網(wǎng)站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 井陉县| 榕江县| 肥东县| 南汇区| 大埔县| 房山区| 隆德县| 永兴县| 新河县| 兴宁市| 合水县| 栾川县| 禄丰县| 津南区| 蕲春县| 阆中市| 石景山区| 瑞昌市| 钟祥市| 祁东县| 宜章县| 阜阳市| 定远县| 金门县| 葫芦岛市| 普兰店市| 托里县| 凤山县| 霍林郭勒市| 洪雅县| 赞皇县| 将乐县| 会宁县| 阳春市| 深泽县| 台北县| 棋牌| 图木舒克市| 文登市| 德化县| 太保市|