以上篇文章中的MyBatis_Demo模块为例。
一、核心配置文件名:application.xml
MyBatis核心配置中的标签必须按照指定位置:
properties、settings、typeAliases、typeHandlers、objectFactory、objectWrapperFactory、reflectorFactory、plugins、environments、databaseIdProvider、mappers。
1.
引入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文件可以做进一步修改
- "1.0" encoding="UTF-8" ?>
- configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
-
- <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.
- <settings>
-
- <setting name="mapUnderscoreToCamelCase" value="true"/>
-
- <setting name="lazyLoadingEnabled" value="true"/>
- settings>
3.
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:设置多个连接数据库的环境
属性:
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>
-
-
- <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
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>