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运行时行为。