一、了解内容
-
配置Mybatis两种方式:
-
第一种:Mybatis通过读取mybatis-config.xml文件配置mybatis,通过动态读取配置文件,调用SqlSessionFactoryBuilder的bulid方法获取配置文件字节流获得SqlSessionFactory,创建SqlSession实现类DefultSqlSession的对象,动态代理去执行sql方法
-
第二种:使用Java API配置Mybatis,不去配置任何信息直接把信息写在代码中,然后在按着之前的顺序创建出我们需要的SqlSessionFactory,再进一步得到sqlSession,最后再进行各种数据库操作
例如:使用Java API创建SqlSessionFactory对象,之前是读取配置文件之后再创建,现在是自己把信息写到代码中,然后再创建该对象 public static SqlSessionFactory getSqlSessionFactory() { SqlSessionFactory sqlSessionFactory = null; try { DataSourcedata Source = DataSourceFactory.getDataSource(); TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); Configuration configuration = new Configuration(environment); configuration.getTypeAliasRegistry().registerAlias("student",Student.class); configuration.getTypeHandlerRegistry().register(PhoneNumber.class, PhoneTypeHandler.class); configuration.addMapper(StudentMapper.class); sqlSessionFactory = new SqlSessionFactoryBuilder(). build(configuration); } catch (Exception e) { throw new RuntimeException(e); } return sqlSessionFactory; }
- 缺点:将Mapper.xml的sql语句的配置信息写死了,降低了代码的灵活性
-
-
自定义MyBatis日志
-
MyBatis使用其内部LogFactory作为真正的日志类库使用的门面。其内部的LaggerFactory会将日志记录任务委托给如下的所示某一个日志实现,日志记录优先级由上到下顺序递减:
-
SLF4J
-
Apache Commons Logging
-
Log4j2
-
Log4j
-
JDK logging
注意:查看org.apache.ibatis.logging.LogFactory源码可知
-
-
如果MyBatis未发现上述日志记录实现,则MyBatis的日志记录功能无效,如果你的运行环境中,在classpath中有多个可用的日志类库,并且你希望MyBaits使用某个特定的日志实现,你可以在代码中通过调用以下其中一个方法:
org.apache.ibatis.logging.LogFactory.useSlf4jLogging(); org.apache.ibatis.logging.LogFactory.useLog4JLogging(); org.apache.ibatis.logging.LogFactory.useLog4J2Logging(); org.apache.ibatis.logging.LogFactory.useJdkLogging(); org.apache.ibatis.logging.LogFactory.useCommonsLogging(); org.apache.ibatis.logging.LogFactory.useStdOutLogging();
-
注:如果你想自定义MyBatis日志记录,你应该在调用任何其它方法之前调用以上的其中一个方法
二、映射配置文件Mapper.xml
-
Sql语句调用方式有两种:需要配置映射文件StudentMapper.xml和XxxMapper.java映射接口
- 第一种:通过按照sql语句需求根据SqlSession中的对应方法,传入方法的参数(全包名限定+映射xml的 sql标签id,参数),执行sql语句
- 使用字符串形式调用sql语句,即使接口中没有对应方法名,也不影响执行SQL语句
- 第二种:通过动态代理,有SqlSession的DefaultSQLSession实现类通过层层调用,反射newInstance创建出映射接口对象,调用接口对应xml(CURD标签的id和方法名相同)文件中,操作数据库
- 第一种:通过按照sql语句需求根据SqlSession中的对应方法,传入方法的参数(全包名限定+映射xml的 sql标签id,参数),执行sql语句
-
第一种方式:映射接口全包名,调用SQLSession中sql方法
-
映射文件StudentMapper.xml中有id为"findStudentById"的SQL语句,代码如下:
<?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.briup.mappers.StudentMapper"> <select id="findStudentById" parameterType=