mybatis學習第一天(老年人的開發模式ibatis)
mybatis入門程式(在maven工程下的編寫)
此開發模式是基於原生DAO的開發方式(ibatis遺留的方式)---->不推薦的,只是學習使用,具體操作會員更加現代的方式,這是以前老程式設計師使用的方式
需要程式設計師自己編寫DAO及其DAO實現類
1.新增mybatis的依賴
2.在src/main/resource下新建log4.properties(配置完之後可以在類中使用)
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache.ibatis=DEBUG
3.編寫實體類
4.編寫Dao及其實現類(實現類先不寫內容)
5.編寫mybatis的全域性配置檔案
jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
(編寫了一個jdbc配置檔案,便於在全域性配置檔案中引用,以後資料庫有修改時,直接修改這個檔案就行了,可以解耦合。當然了,也可以不用寫這個檔案,直接在全域性配置檔案裡面寫。)
-----------------------------------------------------------------
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>
<!-- 載入資原始檔[可選] -->
<properties resource="jdbc.properties"></properties> <!-- 載入上面寫的jdbc.properties檔案 -->
<environments default="dev">
<environment id="dev">
<!--利用jdbc管理事務 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 資料來源資訊 -->
<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>
<!-- 指定對映檔案的位置 --> <!--載入對映檔案,因為在java類中載入時之載入了全域性配置檔案,將對映檔案引入其中,可以間接載入到 -->
<mappers>
<mapper resource="User.xml"/>
</mappers>
</configuration>
6.編寫對映檔案User.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="user">
<!--
1.標識對映檔案中的sql,將sql語句封裝到mapped statement物件中,所以稱為statement的id
2.parameterType:指定輸入引數型別
3.#{}:表示一個佔位符
4.#{id}:其中的id表示接收的輸入引數,引數名稱就是id,如果輸入引數是簡單型別,#{}中的引數名可以任意,可以為value或者其他
5.resultType:指定sql輸出結果的所對映的java物件型別,select指定resultType表示將單條記錄對映成的java物件
當進行模糊查詢時:有以下幾種問題
1.resultType:指定就是單條記錄所對映成java物件型別
2.${}:表示拼接sql串,將接收到引數的內容不加任何修飾拼接在sql中
3.使用${}容易引起sql注入
4.${value}:接受輸入引數的內容,如果傳入型別是簡單型別,${}中只能用value
#{}和${}區別
#{}表示佔位符?,#{}接收簡單型別的引數時,裡面的名稱可以任意
${}表示拼接符,${}接收簡單型別的引數時,裡面的名稱必須是value
${}裡面的值會原樣輸出,不加解析(如果該引數值是字串,有不會新增引號)
${}存在sql注入的風險,但是有些場景下必須使用,比如排序後面會動態傳入排序的列名
-->
<select id="findById" parameterType="java.lang.Long" resultType="cn.zzsxt.entity.User">
select * from tb_user where id = #{id}
</select>
</mapper>
7.編寫Dao實現類中的方法
//載入mybatis-config.xml配置
InputStream ips = Resources.getResourceAsStream("mybatis-config.xml");
//建立SqlSessionFactoryBuilder物件
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//獲取SqlSessionFactory物件
SqlSessionFactory sqlSessionFactory = builder.build(ips);
//獲取SqlSession物件
SqlSession sqlSession = sqlSessionFactory.openSession();
user = sqlSession.selectOne("user.findById",id);//執行在對映檔案中配置的statement的控制代碼(namespace+id)
//關閉SqlSession
sqlSession.close();
結合下面這個圖理解實現過程,黃色為我們寫程式需要配置的和實現的。