以上篇文章中的MyBatis_Demo模块为例。
一、核心配置文件名:application.xml
MyBatis核心配置中的标签必须按照指定位置:
properties、settings、typeAliases、typeHandlers、objectFactory、objectWrapperFactory、reflectorFactory、plugins、environments、databaseIdProvider、mappers。
1. <properties>标签
引入properties文件,此时application.xml就可以${属性名}的方式访问属性值
在src/main/resources目录下,创建文件jdbc.properties
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/ssm?characterEncoding=UTF-8
jdbc.username = root
jdbc.password = password
在application.xml文件中就可以引入properties文件,并对application.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文件,此后就可以在当前文件中使用${key}的方式访问value-->
<properties resource="jdbc.properties" />
<environments default="development">
<!--配置连接数据库的开发环境-->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--设置驱动类的全类名-->
<property name="driver" value="${jdbc.driver}"/>
<!--设置连接数据库的连接地址-->
<property name="url" value="${jdbc.url}"/>
<!--设置连接数据库的用户名-->
<property name="username" value="${jdbc.username}"/>
<!--设置连接数据库的密码-->
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
2. <setting>标签
<settings>
<!--将表中字段的下划线自动转换为驼峰-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!--开启延迟加载-->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
3. <typeAliases>标签
typeAlias:设置某个具体的类型的别名
属性:
type:需要设置别名的类型的全类名
alias:设置此类型的别名,若不设置此属性,该类型拥有默认的别名,即类名且不区分大小写,若设置此属性,此时该类型的别名只能使用alias所设置的值
<typeAliases>
<!--<typeAlias type="com.wsl.mybatis.pojo.User" />-->
<typeAlias type="com.wsl.mybatis.pojo.User" alias="abc" />
</typeAliases>
<typeAliases>
<!--以包为单位,设置改包下所有的类型都拥有默认的别名,即类名且不区分大小写-->
<package name="com.atguigu.mybatis.bean"/>
</typeAliases>
4. <environments>标签
environments:设置多个连接数据库的环境
属性:
default:设置默认使用的环境的id
environment:设置具体的连接数据库的环境信息
属性:
id:设置环境的唯一标识,可通过environments标签中的default设置某一个环境的id, 表示默认使用的环境。
<environments default="development">
<!--配置连接数据库的开发环境-->
<environment id="development">
<!--
设置事务管理器,type属性用来设置事务管理方式,
包含JDBA(使用JDBC中原生的事务管理方式)和MANAGED(被管理,例如Spring)
-->
<transactionManager type="JDBC"/>
<!--
数据库连接的设置,dataSource表示数据源:
type设置数据源的类型:
POOLED:表示使用数据库连接池;
UNPOOLED:表示不使用数据库连接池;
JNDI:表示使用上下文中的数据源
-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<!--配置数据库的测试环境-->
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
5.<mappers>标签
<mappers>
<!--<mapper resource="mappers/UserMapper.xml"/>-->
<!--
以包为单位,将包下所有的映射文件引入核心配置文件
注意:此方式必须保证mapper接口和mapper映射文件必须在相同的包下
-->
<package name="com.wsl.mybatis.mapper" />
</mappers>
二、项目补充
1. 工具类Until
在测试程序中,每个测试模块之间存在大量的相同重复代码,每个测试模块都要创建工厂类和会话,这个时候就可以将相同代码提取出来生成一个工具类,每次使用的时候调用这个类,就可以减少代码量提升工作效率。
在src/main/java目录下,创建com.wsl.mybatis.utils.SqlSessionUtil.java文件
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class SqlSessionUtil {
public static SqlSession getSqlSession() {
SqlSession sqlSession = null;
try {
// 获取核心配置文件的输入流
InputStream is = Resources.getResourceAsStream("application.xml");
// 获取SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 获取sqlSessionFactoryBuilder对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
// 获取SqlSession对象
sqlSession = sqlSessionFactory.openSession(true);
} catch (IOException e) {
e.printStackTrace();
}
return sqlSession;
}
}
有这个工具类后,测试代码就可以修改为:
import com.wsl.mybatis.mapper.UserMapper;
import com.wsl.mybatis.pojo.User;
import com.wsl.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MyBatisTest {
// 增加一列
@Test
public void testInsert() throws IOException {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int result = userMapper.insertUser();
System.out.println("结果是:"+result);
sqlSession.close();
}
// 修改
@Test
public void TestUpdate(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser();
sqlSession.close();
}
// 删除
@Test
public void TestDel(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.delUser();
sqlSession.close();
}
// 查询
@Test
public void TestSelect(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById();
System.out.println(user);
sqlSession.close();
}
// 查询
@Test
public void TestGetAllUsers(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.getAllUser();
// 循环输出List里面的内容
users.forEach(System.out::println);
sqlSession.close();
}
}
2. 加入log4j日志文件
日志的级别:
FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)
从左到右打印的内容越来越详细
log4j的配置文件名为log4j.xml,存放的位置是src/main/resources目录
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}%m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>