目录
前言
1、项目目录结构总览
2、准备工作
2.1 新建测试项目,下载jar包
2.2 创建数据库表(本文使用的mysq数据库)
3、环境搭建
3.1 根据目录结构创建对应文件,导包
3.2 配置资源文件
3.3 department包中代码编写(用于sqlSession调用sql)
3.4 user包中代码编写(用于Mapper接口调用sql)
4、功能测试
4.1 通过sqlSession调用sql
4.2 通过Mapper接口调用sql
前言
mybatis 众所周知,很优秀的一款持久层框架,具体的概念就不说了,本文就简单的描述下mybatis开发环境的搭建吧。由于mybatis可以通过sqlSession调用sql(延续ibatis)也可以通过Mapper接口调用sql,所以下面从两部分测试下。
1、项目目录结构总览
2、准备工作
2.1 新建测试项目,下载jar包
项目需要2类包,一是mysql驱动包,一个是mybatis的jar和日志包,日志包在mybatis下的lib目录里。
mysql驱动包下载地址:https://dev.mysql.com/downloads/connector/j/
mybatis的jar包和日志包下载地址:https://github.com/mybatis/mybatis-3/releases
2.2 创建数据库表(本文使用的mysq数据库)
本文需要创建fw_department和fw_user表,创建表的脚本如下(数据自己加):
CREATE TABLE `fw_department` (
`depid` varchar(32) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '部门ID',
`parentdepid` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '父部门ID',
`depno` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '部门编号',
`depname` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '部门名称',
PRIMARY KEY (`depid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `fw_user` (
`userid` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '人员ID',
`userno` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '人员编号',
`username` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '人员姓名',
PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
3、环境搭建
3.1 根据目录结构创建对应文件,导包
按照目录结构创建文件,将下载的jar包导入到项目中WEB-INF\lib目录下,并选中所有jar包并点击右键--》Build Path--》Add to Build Path。
3.2 配置资源文件
资源文件包括三部分,分别为jdbc.properties、mybatis-config.xml和log4j.properties
3.2.1 配置jdbc.properties文件内容(用于mybatis全局配置文件),内容如下(根据自己的数据库名称、用户名和密码配置):
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&useSSL=true
jdbc.username=root
jdbc.password=123456
3.2.2 配置mybatis-config.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>
<!-- configuration 中的标签顺序为:properties>settings>typeAliases>typeHandlers>
objectFactory>plugins>environments>databaseIdProvider>mappers 其中有的标签可以不设置,
但是设置的标签顺序应遵循以上顺序 -->
<!-- 加载jdbc.properties文件 -->
<properties resource="resources/jdbc.properties">
<!-- 此处可以对jdbc.properties中的参数重新设置
<property name="username" value="root" />
-->
</properties>
<settings>
<!-- setting中可配置的参数很多,此处值展示部分参数 -->
<!-- 是否启用缓存 -->
<setting name="cacheEnabled" value="false" />
<!-- 是否启用懒加载 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 使用log4j日志 -->
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<!-- 别名有2种设置方式,一种是通过typeAlias一个一个设置, 一种是通过package设置 -->
<typeAlias alias="userDTO" type="com.user.UserDTO" />
<typeAlias alias="departmentDTO" type="com.department.DepartmentDTO" />
<!-- package设置的默认以对象首字母小写注册的,例如user下对象为UserDTO,
则配置<package name="com.user"/>注册的别名为userDTO
-->
</typeAliases>
<environments default="development">
<environment id="development">
<!-- 事务管理器的类型有2中,分别为JDBC和MANAGED
JDBC指直接使用JDBC的提交和回滚功能;MANAGED指不做提交和回滚,一般让容器来管理事务 -->
<transactionManager type="JDBC" />
<!-- 数据源的类型配置有三种分别为POOLED UNPOOLED JNDI
POOLEN:指使用JDBC数据库连接池,这种方式比较常用。
UNPOOLED:指每次请求时会创建一个数据库连接,用完后销毁数据库连接。
JNDI:这种是通过使用外部容器(如EJB容器)来配置数据源,
-->
<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>
<!-- mybatis 映射文件配置有4种,分别为使用mapper路径、使用url引入xml、使用类路径和使用包名 -->
<!-- 使用mapper路径 -->
<mapper resource="com/department/dao/DepartmentMapper.xml" />
<!-- 使用url引入(不常用)
<mapper url="file:///var/mappers/BlogMapper.xml"/>
-->
<!-- 使用类名(此处配置的是接口位置,如果按此种方式配置,则xml和接口必须放在同一目录下)
-->
<mapper class="com.user.dao.UserMapper"/>
<!-- 使用包名
<package name="com.user.dao"/> -->
</mappers>
</configuration>
3.2.3 配置log4j.properties,此文件可根据自己需求配置,以下是简单配置:
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
3.3 department包中代码编写(用于sqlSession调用sql)
3.3.1 完善部门DTO对象
内容是基本属性、get方法、set方法和重写的toString()方法(用于后面测试)。
3.3.2 完善DepartmentMapper.xml
内容是简单的查询sql,需要注意的是namespace可以随意设置,只要唯一就行,没有通过mapper接口调用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="department">
<select id="findDepartmentByID" parameterType="string" resultType="departmentDTO">
select depid, parentdepid, depno, depname
from fw_department
where depid = #{depID}
</select>
</mapper>
3.4 user包中代码编写(用于Mapper接口调用sql)
3.4.1 创建用户DTO对象(略)
3.4.2 创建UserMapper接口和UserMapper.xml
注意:
1、接口中的方法名和UserMapper.xml中select配置的ID必须一致;
2、接口必须和UserMapper.xml在同一目录下(如果mapper文件是通过class配置的,则此条必须注意,否则可以忽略);
3、UserMapper.xml中namespace设置的为接口的全路径。
UserMapper.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.user.dao.UserMapper">
<select id="findUserByID" parameterType="string" resultType="userDTO">
select userid, userno, username
from fw_user
where userid = #{userID}
</select>
</mapper>
4、功能测试
至此必要的代码已经写完了,测试代码如下:
public static void main(String[] args) throws Exception {
String resource = "resources/mybatis-config.xml";
InputStream stream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//使用sqlSession执行sql
testSqlSession(sqlSession);
//使用mapper接口执行sql
testMapper(sqlSession);
sqlSession.close();
}
4.1 通过sqlSession调用sql
public static void testSqlSession(SqlSession sqlSession) {
DepartmentDTO depDTO = sqlSession.selectOne("department.findDepartmentByID", "001001");
System.out.println(depDTO.toString());
}
4.2 通过Mapper接口调用sql
public static void testMapper(SqlSession sqlSession) {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
UserDTO userDTO = userMapper.findUserByID("111");
System.out.println(userDTO.toString());
}
部分测试结果如下:
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 1271041075.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@4bc28c33]
DEBUG [main] - ==> Preparing: select depid, parentdepid, depno, depname from fw_department where depid = ?
DEBUG [main] - ==> Parameters: 001001(String)
DEBUG [main] - <== Total: 1
[depID=001001,parentDepID=0,depNO=101,depName=财务部]
DEBUG [main] - ==> Preparing: select userid, userno, username from fw_user where userid = ?
DEBUG [main] - ==> Parameters: 111(String)
DEBUG [main] - <== Total: 1
[userID=111,userNO=19092601,userName=张三]