MyBatis(1)——入门

一、简介

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

二、下载

原是Apache的一个开源项目iBatis, 2010年6月这 个项目由Apache Software Foundation 迁移到了 Google Code,随着开发团队转投Google Code 旗下, iBatis3.x正式更名为MyBatis ,代码于 2013年11月迁移到Github。

1、下载地址:https://github.com/mybatis/mybatis-3

2、版本选择

mybatis-3.4.6.zip 包括用到的jar包、文档doc

source code 则是源代码

三、HelloWorld

整体项目架构:

1、数据库准备

MySQL数据库:新建employee表,并建立对应的JavaBean

CREATE TABLE `employee` (
  `employee_id` int(6) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(20) DEFAULT NULL,
  `last_name` varchar(25) DEFAULT NULL,
  `email` varchar(25) DEFAULT NULL,
  `phone_number` varchar(20) DEFAULT NULL,
  `hire_date` date DEFAULT NULL,
  `job_id` varchar(10) DEFAULT NULL,
  `salary` decimal(8,2) DEFAULT NULL COMMENT '工资',
  `manager_id` int(6) DEFAULT NULL,
  `department_id` int(6) DEFAULT NULL,
  PRIMARY KEY (`employee_id`)
) ENGINE=InnoDB AUTO_INCREMENT=207 DEFAULT CHARSET=utf8;

2、环境搭建

maven新建一个简单工程,引入以下依赖:

<dependencies>
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.4.6</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
	<dependency>
		<groupId>org.mybatis.generator</groupId>
		<artifactId>mybatis-generator-core</artifactId>
		<version>1.3.5</version>
	</dependency>
	<!-- mysql驱动 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.41</version>
	</dependency>
	<!-- 数据库连接池、驱动 -->
	<dependency>
		<groupId>c3p0</groupId>
		<artifactId>c3p0</artifactId>
		<version>0.9.1</version>
	</dependency>

	<!-- 日志 -->
	<!-- https://mvnrepository.com/artifact/log4j/log4j -->
	<dependency>
		<groupId>log4j</groupId>
		<artifactId>log4j</artifactId>
		<version>1.2.17</version>
	</dependency>
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-api</artifactId>
		<version>1.7.5</version>
	</dependency>
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-log4j12</artifactId>
		<version>1.7.5</version>
	</dependency>
	<dependency>
		<groupId>commons-logging</groupId>
		<artifactId>commons-logging</artifactId>
		<version>1.1.1</version>
	</dependency>
	<!-- junit -->
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12</version>
	</dependency>
</dependencies>

3、配置文件

1、数据库配置信息文件

新建dbConfig.properties文件,填入MySQL驱动信息。

mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis_test?characterEncoding=utf8
mysql.username=root
mysql.password=root

2、MyBatis全局配置文件

新建mybatis-config.xml配置文件,导入dbConfig.properties配置文件、配置environments环境、数据源dataSource,引入mapper文件。

<?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>
	<!-- mybatis可以使用properties来引入外部properties配置文件的内容;
		 resource:引入类路径下的资源 url:引入网络路径或者磁盘路径下的资源 -->
	<properties resource="dbConfig.properties"></properties>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${mysql.driver}" />
				<property name="url" value="${mysql.url}" />
				<property name="username" value="${mysql.username}" />
				<property name="password" value="${mysql.password}" />
			</dataSource>
		</environment>
	</environments>
    <!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 -->
	<mappers>
		<mapper resource="mapper/EmployeeMapper.xml" />
	</mappers>
</configuration>

3、SQL的mapper文件

创建上述的mapper文件:mapper/EmployeeMapper.xml。

其中namespace可以自定义,在这里指定为com.starfall.mybaits.dao.EmployeeMapper

<?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.starfall.mybaits.dao.EmployeeMapper">
	<!-- 
	namespace:名称空间;指定为接口的全类名
	id:唯一标识
	resultType:返回值类型
	#{id}:从传递过来的参数中取出id值
	 -->
	<select id="selectEmployee" resultType="com.starfall.mybaits.entity.Employee">
		SELECT
			employee_id AS employeeId,
			first_name AS firstName,
			last_name AS lastName,
			email AS email,
			phone_number AS phoneNumber,
			hire_date AS hireDate,
			job_id AS jobId,
			salary AS salary,
			manager_id AS managerId,
			department_id AS departmentId
		FROM
			employee
		WHERE
			employee_id = #{employeeId}
	</select>
</mapper>

4、日志信息

新建log4j.properties配置文件

log4j.rootLogger=DEBUG,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %p [%c] - %m %n

日志配置文件参考:https://blog.csdn.net/shaohe18362202126/article/details/84667631

4、运行测试

public class HelloWorldTest {
	@Test
	public void testHelloWorld() throws IOException {
		/**
		 * 1、从 XML 中构建 SqlSessionFactory <br>
		 * 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory
		 * 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从
		 * XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
		 */
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		/**
		 * 2、从 SqlSessionFactory 中获取 SqlSession<br>
		 * 既然有了 SqlSessionFactory ,顾名思义,我们就可以从中获得 SqlSession 的实例了。SqlSession
		 * 完全包含了面向数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
		 */
		SqlSession session = sqlSessionFactory.openSession();
		try {
			// selectOne参数:sql的唯一标识,执行sql要用的参数
			Employee employee = session.selectOne("com.starfall.mybaits.dao.EmployeeMapper.selectEmployee", 120);
			System.out.println(employee);
		} finally {
			// 一个sqlSession就是代表和数据库的一次会话,用完关闭
			session.close();
		}
	}
}

四、接口式编程

上述查询的方法需要获取mapper文件的唯一标示:com.starfall.mybaits.dao.EmployeeMapper.selectEmployee

诚然这种方式能够正常工作,并且对于使用旧版本 MyBatis 的用户来说也比较熟悉,不过现在有了一种更直白的方式。使用对于给定语句能够合理描述参数和返回值的接口。

创建一个接口,没有实现类。里面的查询方法和mapper文件中的查询du

public interface EmployeeMapper {

	Employee selectEmployee(Integer employeeId);
}
@Test
public void testInterface() throws IOException {
	String resource = "mybatis-config.xml";
	InputStream inputStream = Resources.getResourceAsStream(resource);
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	SqlSession session = sqlSessionFactory.openSession();
	try {
		EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
		Employee employee = mapper.selectEmployee(121);
		System.out.println(employee);
	} finally {
		session.close();
	}
}

将接口和xml进行绑定:

xml文件的namespace的值为接口的全类名,xml中select的id和接口中方法的名称相同。

org.apache.ibatis.binding.MapperProxy@103f852

com.sun.proxy.$Proxy5

五、小结

1、SqlSession代表和数据库的一次会话;用完必须关闭;

2、SqlSession和connection一样都是非线程安全。每次使用都应该去获取新的对象。

3、mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象:

*六、引入dtd约束

为mybatis的全局配置文件引入dtd的xml约束。

1、找到下载的mybatis的jar包,或者在本地的maven仓库中找到该jar

2、使用压缩软件打开路径:mybatis-3.4.6.jar\org\apache\ibatis\builder\xml

解压mybatis-3-config.dtd、mybatis-3-mapper.dtd两个文件:

解压的文件放到项目的资源目录下:

3、再去到HelloWorld中复制mybatis全局配置文件的dtd链接:"http://mybatis.org/dtd/mybatis-3-config.dtd"

4、配置eclipse的dtd位置和URL

打开eclipse:Window ——> Preferences ——> XML ——> XML Catalog

点击Add,location选择解压的文件所放的项目资源路径。Key type选择URL。key为复制的mybatis的全局配置文件的链接。

注意:key中的链接指定的是config文件和location选中的config文件相对应,名称相同。

5、重新再eclipse中打开全局配置文件,会有xml的提示:

SQL的mapper文件设置和上述步骤一致。

下一章:MyBatis(2)——全局配置文件

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值