文章目录
注:【网页版】右上方的悬浮框( 有目录索引 )
上一篇章:Myeclipse 配置 Mybatis 框架 jar 包操作
一、优化代码
1-1】旧代码
import static org.junit.Assert.*;
import java.io.IOException;
import java.io.InputStream;
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.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
public class UserMapperTest {
private Logger logger = Logger.getLogger(UserMapperTest.class);
@Before
public void setUp() throws Exception {
}
@Test
public void test() {
String resource = "mybatis-config.xml";
int count = 0;
SqlSession sqlSession = null;
try {
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
sqlSession = factory.openSession();
count = sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");
logger.debug("UserMapperTest count---> " + count);
} catch (IOException e) {
e.printStackTrace();
}finally{
sqlSession.close();
}
}
}
1-2】创建工具类:MyBatisUtil
/* 创建工具类:MyBatisUtil.class */
/* 用于 创建、关闭 sqlSession 对象 */
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
private static SqlSessionFactory factory;
// 在静态代码块下, Factory 只会被创建一次
static{
try {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession createSqlSession(){
// 参数:false 为关闭自动提交事务
return factory.openSession(false);
}
public static void closeSqlSession(SqlSession sqlSession){
if(null != sqlSession)
sqlSession.close();
}
}
1-3】测试类(两种方式调用查询方法)
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
import cn.smbms.pojo.User;
import cn.smbms.utils.MyBatisUtil;
public class UserMapperTest {
private Logger logger = Logger.getLogger(UserMapperTest.class);
@Before
public void setUp() throws Exception {
}
@Test
public void testCount() {
SqlSession sqlSession = null;
int count = 0;
try {
sqlSession = MyBatisUtil.createSqlSession();
//第一种方式:调用selectOne方法执行查询操作
//count = sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");
//第二种方式:调用getMapper(Mapper.class)执行dao接口方法来实现对数据库的查询操作
count = sqlSession.getMapper(UserMapper.class).count();
} catch (Exception e) {
e.printStackTrace();
}finally{
MyBatisUtil.closeSqlSession(sqlSession);
}
logger.debug("UserDaoTest count---> " + count);
}
}
二、系统核心配置文件(mybatis-config.xml)
<!--
注意:元素节点的顺序
技巧:切换至 Design 下 鼠标右键 configuration 选择 Add Child
-- >
<configuration> 配置
<properties> 可以配置在 Java 属性配置文件中
<settings> 修改 MyBatis 在运行时的行为方式
<typeAliases> 为 Java 类型命名一个别名(简称)
<typeHandlers> 类型处理器
<objectFacotry> 对象工厂
<plugins> 插件
<environments> 环境
<environment> 环境变量
<transactionManager> 事务管理器
<dataSource> 数据源
<mappers> 映射器
2-1】properties 标签:两种方式
通过外部指定的方式 database.properties,实现动态配置 | 直接配置为 XML,实现动态配置 |
---|---|
<!--
方式一:
引入 database.properties 文件
<properties resource="database.properties"/>
-->
<!--
如何使用此行 <properties resources="database.properties">
resource 优先级更高
(resource 中同名属性会覆盖 properties 中的值)
方式二:
-->
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
</properties>
......
<environments default="development">
<environment id="development">
<!--配置事务管理,采用JDBC的事务管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
2-2】settings 标签
<!--
目的:有所了解
用来修改 Mybatis 运行时的行为方式
主要是 MyBatis 的一些全局配置属性的设置
chcheEnabled:对在些配置文件下的所有 catche 进行全局性 开/关 设置(true|false,默认 true)
autoMappingBehavior:MyBatis 对于 resultMap 自动映射匹配级别(NONE|PARITAL|FULL,默认PARTIAL)
-->
<settings>
<setting name="logImpl" value="LOG4J" />
<!-- 是否启用延迟加载:(false 表示所有相关联的都会被初始化加载) -->
<setting name="lazyLoadingEnabled" value="false" />
</settings>
2-3】typeAliases 标签
<!--
类型别名
仅仅只关联 XML 配置,简写冗餘的 Java 类名
-->
<typeAliases>
<!-- <typeAlias alias="User" type="cn.smbms.pojo.User"/> -->
<!--
上行注释代码 可将【resultType】中的值可以换成 “User”
<select id="getUserList" resultType="cn.smbms.pojo.User">
select * from smbms_user
</select>
可换为
<select id="getUserList" resultType="User">
但类太多配置依旧麻烦,所以使用下面这条语句,效果同上
-->
<package name="cn.smbms.pojo"/>
</typeAliases>
2-4】environments 标签
<!--
表示配置 MyBatis 的多套运行环境,将 SQL 映射到多个不同的数据库上
子元素节点:environment,但是必须指定若一个默认运行环境(通过 default 指定)
-->
<environments default="development"> <!-- default:默认的运行环境 ID -->
<environment id="development"> <!-- id:运行环境 ID -->
<!-- 事务管理器配置 type="[JDBC|MANAGED(托管)]" -->
<transactionManager type="JDBC"/>
<!--
dataSource 元素使用基本的 DJBC 数据源接口来配置 JDBC 连接对象的资源
有三种内建的数据源类型
<dataSource type="[UNPOOLED|POOLED|JNDI]">
POOLED:MyBatis 实现的简单的数据源连接池的类型,即连接可以被复用
-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<environment id="test">
......
</environment>
</environments>
2-5】mappers 标签
<!--
映射器,定义 SQL 映射语句
必须在配置中引用 mapper 映射文件
-->
<mappers>
<!-- 方式一:使用类资源路径获取资源 -->
<mapper resource="cn/smbms/dao/user/UserMapper.xml"/>
<!-- 方式二:使用 URL 获取资源(即可以把 sql 映射文件,放至其它路径) -->
<mapper url="file:///D:/UserMapper.xml" />
<!-- 注解方式下,使用 -->
<mapper class="cn.kgc.mapper.EmpMapperAnnotaticon" />
</mappers>