Mybatis学习第一天——Mybatis的安装配置以及基本CURD操作
1.Mybatis下載
Mybatis是開源的持久層框架,能夠度jdbc進(jìn)行簡單的封裝,但其并不是完全的ORM(Object Relational Mapping,對象關(guān)系映射),無法脫離數(shù)據(jù)庫進(jìn)行適配。目前Mybatis能夠在githup上直接下載:https://github.com/mybatis/mybatis-3/releases,有多個版本可以選擇。
2.Mybatis文件介紹
lib:mybatis依賴包;mybatis-3.4.6.jar:核心包;
3.mybatis配置
創(chuàng)建一個項(xiàng)目,網(wǎng)站/后臺隨意,將核心包和lib中的依賴包全都添加到項(xiàng)目中的lib下,沒有l(wèi)ib自己創(chuàng)建,創(chuàng)建路徑build path。
導(dǎo)入mybatis包后,別忘了導(dǎo)入數(shù)據(jù)庫連接包。
4.創(chuàng)建配置文件
創(chuàng)建config配置文件夾,首先配置SqlMapConfig.xml。該文件主要用來配置數(shù)據(jù)庫連接環(huán)境,在沒有spring進(jìn)行管理的同時對數(shù)據(jù)源進(jìn)行配置,同時設(shè)置與表的映射對象。
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!-- 和spring整合后 environments配置將廢除 --> 7 <environments default="development"> 8 <environment id="development"> 9 <!-- 使用jdbc事務(wù)管理 --> 10 <transactionManager type="JDBC" /> 11 <!-- 數(shù)據(jù)庫連接池 --> 12 <dataSource type="POOLED"> 13 <property name="driver" value="com.mysql.jdbc.Driver" /> 14 <property name="url" 15 value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" /> 16 <property name="username" value="root" /> 17 <property name="password" value="xxxx" /> 18 </dataSource> 19 </environment> 20 </environments> 21 22 <mappers> 23 <mapper resource="sqlmap/User.xml"/> 24 </mappers> 25 26 </configuration>更多mybatis中SqlMapConfig.xml配置可以參考http://blog.knowsky.com/197049.htm,有詳細(xì)的介紹。(具體關(guān)于dtd是從哪里找的,還在研究。。。)
其中<mapper>是作為映射關(guān)系。具體下面介紹。
創(chuàng)建log4j.properties日志設(shè)置文件:
1 # Global logging configuration 2 log4j.rootLogger=DEBUG, stdout 3 # Console output... 4 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 5 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 6 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n全局的日志設(shè)置,主要用來打印在控制臺中。
5.創(chuàng)建映射關(guān)系類
1 package com.mybatis.pojo; 2 3 import java.io.Serializable; 4 import java.util.Date; 5 6 public class User implements Serializable { 7 private int id; 8 private String username;// 用戶姓名 9 private String sex;// 性別 10 private Date birthday;// 生日 11 private String address;// 地址在src目錄下創(chuàng)建User類,添加幾個簡單的數(shù)據(jù)。注意:Mybatis無法像hibernate那樣根據(jù)類自動創(chuàng)建表,訪問數(shù)據(jù)庫時必須保證數(shù)據(jù)庫存在。
6.配置映射關(guān)系文件
可以下config目錄下創(chuàng)建sqlmap文件夾,在其中創(chuàng)建User.xml SQL映射文件:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <!-- namespace:命名空間,用于隔離sql,還有一個很重要的作用,后面會講 --> 6 <mapper namespace="test"> 7 8 <select id="findUserById" 9 parameterType="Integer" 10 resultType="com.mybatis.pojo.User" 11 > 12 select * from user where id = #{v} 13 </select> 14 15 </mapper>(同樣這里還是不知道dtd哪里找的),mapper標(biāo)簽內(nèi)主要寫sql語句,用過select、update、delete標(biāo)簽進(jìn)行區(qū)別,其中namespace屬性為了區(qū)分相同id的SQL語句。
設(shè)置完之后在SqlMapConfig.xml文件中加載配置文件:
7.運(yùn)行測試程序
測試程序步驟:
1. 創(chuàng)建SqlSessionFactoryBuilder對象
2. 加載SqlMapConfig.xml配置文件
3. 創(chuàng)建SqlSessionFactory對象
4. 創(chuàng)建SqlSession對象
5. 執(zhí)行SqlSession對象執(zhí)行查詢,獲取結(jié)果User
6. 打印結(jié)果
7. 釋放資源
在執(zhí)行sql語句過程中"test.findUserById"就是查找的User.xml文件中test域下的id為findUserById的SQL語句。
?
8.CURD操作
了解mybatis的運(yùn)行流程,接下來分析下增刪改查操作,測試代碼都差不多,主要是執(zhí)行sql語句的區(qū)別:
8.1 查詢
dao層根據(jù)名字模糊查詢,返回需要list。
在User.xml中如下:
1 <!-- id表示dao層中根據(jù)這個調(diào)用 2 parameterType:傳入數(shù)據(jù)的類型 3 resultType:返回結(jié)果類型(這里返回list,mybatis會自動轉(zhuǎn)成User的集合類型) 4 ${value}:對于字符串拼接中的占位符,必須用value 5 #{ss}:普通占位符,ss和任意取 6 --> 7 <select id="findUserByUsername" parameterType="String" resultType="com.mybatis.pojo.User"> 8 select * from user where username like '%${value}%' 9 </select>8.2 添加
1 //執(zhí)行sql語句 2 User user = new User(); 3 user.setUsername("li"); 4 user.setBirthday(new Date()); 5 user.setAddress("北京"); 6 user.setSex("女"); 7 sqlSession.insert("test.insertUser", user); 8 sqlSession.commit();通過調(diào)用insert方法進(jìn)行插入操作,注意需要進(jìn)行提交操作
1 <insert id="insertUser" parameterType="com.mybatis.pojo.User"> 2 3 <!-- selectKey 標(biāo)簽實(shí)現(xiàn)主鍵返回 --> 4 <!-- keyColumn:主鍵對應(yīng)的表中的哪一列 --> 5 <!-- keyProperty:主鍵對應(yīng)的pojo中的哪一個屬性 --> 6 <!-- order:設(shè)置在執(zhí)行insert語句前執(zhí)行查詢id的sql,孩紙?jiān)趫?zhí)行insert語句之后執(zhí)行查詢id的sql --> 7 <!-- resultType:設(shè)置返回的id的類型 --> 8 <selectKey keyColumn="id" keyProperty="id" order="AFTER" 9 resultType="int"> 10 select last_insert_id() 11 </selectKey> 12 <!--傳入的是User類,只要 #{username}中占位符名字與User類中的屬性名一致,那么Mybatis會自動匹配 --> 13 insert into user(username,sex,birthday,address) 14 values(#{username},#{sex},#{birthday},#{address}) 15 </insert>8.3 更新
1 //執(zhí)行sql語句 2 User user = new User(); 3 user.setId(1); 4 user.setUsername("lihhhhh"); 5 user.setBirthday(new Date()); 6 user.setAddress("北京2"); 7 user.setSex("女2"); 8 sqlSession.update("updateUserById",user); 9 sqlSession.commit(); 1 <update id="updateUserById" 2 parameterType="com.mybatis.pojo.User" 3 > 4 update user 5 set username=#{username},sex=#{sex} where id = #{id} 6 </update>8.4 刪除
調(diào)用語句:sqlSession.delete("deleteUserById", 1);
User.xml中:<delete id="deleteUserById" parameterType="Integer">
delete user where id = #{x}
</delete>
9.Mybatis解決jdbc的問題
1、數(shù)據(jù)庫連接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費(fèi)從而影響系統(tǒng)性能,如果使用數(shù)據(jù)庫連接池可解決此問題。
解決:在SqlMapConfig.xml中配置數(shù)據(jù)連接池,使用連接池管理數(shù)據(jù)庫鏈接。
2、Sql語句寫在代碼中造成代碼不易維護(hù),實(shí)際應(yīng)用sql變化的可能較大,sql變動需要改變java代碼。
解決:將Sql語句配置在XXXXmapper.xml文件中與java代碼分離。
3、向sql語句傳參數(shù)麻煩,因?yàn)閟ql語句的where條件不一定,可能多也可能少,占位符需要和參數(shù)一一對應(yīng)。
解決:Mybatis自動將java對象映射至sql語句,通過statement中的parameterType定義輸入?yún)?shù)的類型。
4、對結(jié)果集解析麻煩,sql變化導(dǎo)致解析代碼變化,且解析前需要遍歷,如果能將數(shù)據(jù)庫記錄封裝成pojo對象解析比較方便。
解決:Mybatis自動將sql執(zhí)行結(jié)果映射至java對象,通過statement中的resultType定義輸出結(jié)果的類型。
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/lisd/p/10260290.html
總結(jié)
以上是生活随笔為你收集整理的Mybatis学习第一天——Mybatis的安装配置以及基本CURD操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深海机器人问题
- 下一篇: CSS display: table-c