使用MyBatis操作資料庫連線
阿新 • • 發佈:2019-01-28
這篇文章是接我上篇文章改寫的,最好結合上一篇文章一起閱讀
在其中將原始碼包也下載了
複製其中的jar(開啟第一層中的,就一個,不是lib裡面的)到專案的lib下面,然後右鍵,add path
3.檔案修改
如下,將其中的driver改成JDBC驅動,url,使用者名稱,密碼,注意將<typeAliases>註釋掉,具體不知道,但是知道這個會影響到後面sqlSession的獲取
其中的selectList就對應<select>的id,即為入口,前面的Message是指進入到mapper中的select的id,然後通過resultMap的值關聯到<resultMap>
然後在控制層中去獲取
在Message.xml中要使用到OGNL表示式,MyBaits中的xml使用的不是EL運算子,而是OGNL
這樣就完成了
一.MyBatis環境搭建
1.第一個問題當然是導包
下載地址:https://github.com/mybatis/mybatis-3/releases在其中將原始碼包也下載了
複製其中的jar(開啟第一層中的,就一個,不是lib裡面的)到專案的lib下面,然後右鍵,add path
2.檔案的載入
其次新建一個包(com.imooc.config),將原始碼包中的Configuration.xml複製進去(mybatis-3-mybatis-3.4.1\src\test\java\org\apache\ibatis\submitted\complex_property),這個是MyBatis的配置檔案,建立資料庫的連線,接著在同樣的路徑中找到User.xml,並複製到另一個包中(可在config下的sql中),這個是與資料庫的對映檔案,改為Message.xml3.檔案修改
如下,將其中的driver改成JDBC驅動,url,使用者名稱,密碼,注意將<typeAliases>註釋掉,具體不知道,但是知道這個會影響到後面sqlSession的獲取
<dataSource type="UNPOOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/imooc"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource>
然後是改寫對映檔案
Message.xml
因為只是查詢,所以其他的程式碼都刪除掉,就留下這些程式碼
解釋一下:
在Java類中呼叫的時候使用如下
messageList=sqlSession.selectList("Message.queryMessageList");
其中的selectList就對應<select>的id,即為入口,前面的Message是指進入到mapper中的select的id,然後通過resultMap的值關聯到<resultMap>
在<resultMap>的column中的ID對應的是<select>中sql語句的ID,而property對應的是type為com.imooc.bean.Message類中的屬性,意思就是將從資料庫中獲取到的記錄賦給Message物件,並返回集合(我猜測其內部的指令肯定和上一篇直接使用JDBC是一樣的)
<mapper namespace="Message"> <resultMap type="com.imooc.bean.Message" id="MessageResult"> <id column="ID" jdbcType="INTEGER" property="id"/> <result column="COMMAND" jdbcType="VARCHAR" property="command"/> <result column="DESCRIPTION" jdbcType="VARCHAR" property="description"/> <result column="CONTENT" jdbcType="VARCHAR" property="content"/> </resultMap> <select id="queryMessageList" resultMap="MessageResult"> select ID, COMMAND, DESCRIPTION, CONTENT from MESSAGE where 1=1 </select>
最後別忘了在配置檔案Configuration.xml中宣告
<mappers>
<mapper resource="com/imooc/config/sql/Message.xml"/>
</mappers>
二.獲取SqlSession會話操作資料庫
public SqlSession getSqlSession() throws Exception{
//通過配置檔案獲取資料庫連線資訊,獲取的是路徑
Reader reader=Resources.getResourceAsReader("com/imooc/config/Configuration.xml");
//通過配置資訊構建一個SqlSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
//通過sqlSessionFactory開啟一個數據庫會話
SqlSession sqlSession=sqlSessionFactory.openSession();
return sqlSession;
}
然後在控制層中去獲取
List<Message> messageList=new ArrayList<>();
DBAccess dbAccess=new DBAccess();
SqlSession sqlSession=null;
sqlSession=dbAccess.getSqlSession();
//通過sqlSession執行SQL語句
messageList=sqlSession.selectList("Message.queryMessageList");
//關閉session
sqlSession.close();
三.條件查詢,實現JDBC原始中的拼接操作
這裡控制層中傳入兩個引數,由於接收的限制,只能接收一個引數,這裡將Message物件傳進去
List<Message> messageList=new ArrayList<>();
DBAccess dbAccess=new DBAccess();
SqlSession sqlSession=null;
sqlSession=dbAccess.getSqlSession();
//因為selectList中的引數除了id外,只能再加一個,這樣只能將兩個引數封裝起來
Message message=new Message();
message.setCommand(command);
message.setDescription(description);
//通過sqlSession執行SQL語句
messageList=sqlSession.selectList("Message.queryMessageList",message);
sqlSession.close();
在Message.xml中要使用到OGNL表示式,MyBaits中的xml使用的不是EL運算子,而是OGNL
其中xml中的引號用"
OGNL的特有操作符and相當於Java中的&&
OGNL支援Java的物件方法
<select id="queryMessageList" parameterType="com.imooc.bean.Message" resultMap="MessageResult">
select ID, COMMAND, DESCRIPTION, CONTENT from MESSAGE where 1=1
<if test="command!=null and !"".equals(command.trim())">
and COMMAND=#{command}
</if>
<if test="description!=null and !"".equals(description.trim())">
and DESCRIPTION like concat('%',#{description},'%')
</if>
</select>
這樣就完成了
最後要提的一點是:進行模糊查詢的語句如下
mysql :LIKE CONCAT('%',#{empname},'%' ) 或者 LIKE CONCAT('%',‘${empname}’,'%' )
oracle:LIKE '%'||#{empname}||'%'