1、mybatis引入項目,只需要引入mybatis-x.x.x.jar包即可。
(當然數據庫驅動的引入必不可少)
2、SqlSessionFactory
由SqlSessionFactoryBuilder根據mybatis配置文件創建。
SqlSessionFactory建議使用單例模式。常用的方法是openSession(),用於創建SqlSession。
3、SqlSession
有SqlSessionFactory對象的openSession()方法創建。
SqlSession使用完畢之后,應該及時關閉。提供的常用方法有:
除了一般的調用Mybatis的insert、delete、update、select外,Mybatis官方推薦使用mapper接口的代理對象訪問mybatis,該對象關聯了SqlSession對象,可以直接通過該對象調用相應的接口方法操作數據庫,需要注意的是mapper接口對象的類型必須和之前的XML文件中的mapper的namespace一致,方法名和參數也必須和mapper文件中的語句id、parameterType屬性一致。舉個例子:
項目目錄結構:
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration status="OFF"> <appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </appenders> <loggers> <logger name="com.lfy.mapping" level="debug" additivity="false"> <appender-ref ref="Console"/> </logger> <root level="info"> <appender-ref ref="Console"/> </root> </loggers> </configuration>
conf.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> <settings> <!-- 配置用於控制台輸出sql日志。低版本的mybatis不支持logImpl --> <setting name="logImpl" value="LOG4J2"/> </settings> <environments default="oracle"> <environment id="oracle"> <!-- 指定事務管理類型,type="JDBC"指直接使用JDBC的提交與回滾 --> <transactionManager type="JDBC" /> <!-- 配置數據庫連接信息 --> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" /> <property name="username" value="scott" /> <property name="password" value="scott" /> </dataSource> </environment> </environments> <mappers> <!-- 注冊empMapper.xml文件--> <mapper resource="com/lfy/mapping/empMapper.xml"/> </mappers> </configuration>
empMapper.java
package com.lfy.mapping; import com.lfy.bean.Emp; public interface empMapper { Emp getEmpByNo(Integer empno); }
empMapper.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="com.lfy.mapping.empMapper"> <select id="getEmpByNo" parameterType="int" resultType="com.lfy.bean.Emp"> select * from emp where empno=#{empno} </select> </mapper>
MybatisTest.java
package com.lfy.main; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.lfy.bean.Emp; import com.lfy.mapping.empMapper; /** * 使用log4j-2配置日志 * @author lfy * */ public class MybatisTest { public static void main(String[] args) { String resource = "conf.xml"; //使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件) InputStream is = MybatisTest.class.getClassLoader().getResourceAsStream(resource); //構建sqlSession的工廠 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); //構建sqlSession SqlSession session = sessionFactory.openSession(); empMapper empmapper=session.getMapper(empMapper.class); Emp emp=empmapper.getEmpByNo(7839); System.out.println(emp); } }
運行結果:
我們還可以做一些改動,使用泛型編程:
增加MyBatisUtil.java
package com.lfy.Util; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisUtil { /** * 獲取SqlSessionFactory * @return SqlSessionFactory */ public static SqlSessionFactory getSqlSessionFactory() { String resource = "conf.xml"; InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); return factory; } /** * 獲取SqlSession * @return SqlSession */ public static SqlSession getSqlSession() { return getSqlSessionFactory().openSession(); } /** * 獲取SqlSession * @param isAutoCommit * true 表示創建的SqlSession對象在執行完SQL之后會自動提交事務 * false 表示創建的SqlSession對象在執行完SQL之后不會自動提交事務,這時就需要我們手動調用sqlSession.commit()提交事務 * @return SqlSession */ public static SqlSession getSqlSession(boolean isAutoCommit) { return getSqlSessionFactory().openSession(isAutoCommit); } /** * 獲取對應的mapper接口 * @param clazz * @return */ public static <T> T getMapper(Class<T> clazz){ return getSqlSessionFactory().openSession().getMapper(clazz); } /** * 獲取對應的mapper接口 * @param clazz mapper接口類型 * @param isAutoCommit * true 表示創建的SqlSession對象在執行完SQL之后會自動提交事務 * false 表示創建的SqlSession對象在執行完SQL之后不會自動提交事務,這時就需要我們手動調用sqlSession.commit()提交事務 * @return */ public static <T> T getMapper(Class<T> clazz,boolean isAutoCommit){ return getSqlSessionFactory().openSession(isAutoCommit).getMapper(clazz); } }
MybatisTest.java
package com.lfy.main; import com.lfy.Util.MyBatisUtil; import com.lfy.bean.Emp; import com.lfy.mapping.empMapper; /** * 使用log4j-2配置日志 * @author lfy * */ public class MybatisTest { public static void main(String[] args) { empMapper empmapper=MyBatisUtil.getMapper(empMapper.class); Emp emp=empmapper.getEmpByNo(7839); System.out.println(emp); } }
4、mybatis的配置文件
mybatis初始化的幾個步驟:
頂層configuration擁有的配置屬性:
節點之間是有先后順序的:
properties/settings/typeAliases/typeHandlers/objectFactory/objectWrapperFactory/plugins/environments/databaseIdProvider/mappers
1》properties屬性:可外部配置可動態替換的。
一種形式:<properties resource="...">
其中的屬性可以在整個配置文件中使用來替換需要動態配置的屬性值。
舉個例子:
db.properties
driver=oracle.jdbc.OracleDriver url=jdbc:oracle:thin:@127.0.0.1:1521:orcl username=scott password=1234
在conf.xml中引入我們的db.properties並使用
<?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> <!-- 引用db.properties配置文件。文件放於classpath下 --> <properties resource="db.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!-- 配置數據庫連接信息 --> <dataSource type="POOLED"> <!-- value屬性值引用db.properties配置文件中配置的值 --> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <mappers> <!-- 注冊com.lfy.mapping.EmpMapper映射接口--> <mapper class="com.lfy.mapping.EmpMapper"/> </mappers> </configuration>
2》settings設置:影響Mybatis運行時行為。