MyBatis 入门--实训2019/10/19

本文总揽
1、Mybatis的介绍
2、Mybatis的入门
a) 使用jdbc操作数据库存在的问题
b) Mybatis的架构
c) Mybatis的入门程序
3、Dao的开发方法
a) 原始dao的开发方法
b) 动态代理方式
4、SqlMapConfig.xml文件说明

MyBatis 和 Hibernate 区别? 重点

1 MyBatis介绍

背景:
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由Apache软件基金会 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

Mybatis通过xml或注解的方式将要执行的各种statement(
statement(写死的一般测试用)、preparedStatement(常用 ? 不写死 预定义 )、CallableStatement(调用存储过程 ))配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

2 使用jdbc编程问题

1、 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
2、 Sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
3、 使用preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护。
4、 对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo对象解析比较方便。

3 Mybatis架构

在这里插入图片描述

1、 mybatis配置
SqlMapConfig.xml(sql集合配置),此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
2、 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
3、 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
4、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

5、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

<select id="findUserById" parameterType="java.lang.Integer" resultType="cn.atcast.pojo.User">
		select * from user where id=#{
   id}
</select>

6、 Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
7、 Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

4 Mybatis入门程序

4.1 mybatis下载

mybaits的代码由github.com管理,地址:https://github.com/mybatis/mybatis-3/releases

mybatis-3.2.7.jar----mybatis的核心包
lib----mybatis的依赖包
mybatis-3.2.7.pdf----mybatis使用手册

练习程序

4.3.1 第一步:创建java工程
使用eclipse创建java工程,jdk使用1.7.0_72
4.3.2 第二步:加入jar包
加入mybatis核心包、依赖包、数据驱动包。

4.3.3 第三步:log4j.properties
src/log4j.properties

Global logging configuration

log4j.rootLogger=info, 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

4.3.4 第四步:SqlMapConfig.xml
src/db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
src/ SqlMapConfig.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>
<!-- 数据库驱动,地址 账号,密码如下  之后把这些信息交给数据库连接池C3PO-->
	<properties resource="db.properties"></properties>
	
	<!-- 和spring整合后 environments配置将废除 会不会没关系 -->
	<environments default="aaaa">
	<!-- 这个名字environments写什么 就用下面 对应的那个数据库 -->
		<environment id="aaaa">
		<!-- 使用jdbc事务管理-->
		<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>
</configuration>

4.3.5 第五步:po类
Po类作为mybatis进行sql映射使用,po类通常与数据库表对应。
cn.atcast.pojo/User.java
package cn.atcast.pojo;
import java.util.Date;

public class User {
   
	private int id;
	private String username;// 用户姓名
	private String sex;// 性别
	private Date birthday;// 生日
	private String address;// 地址
	
	...get/set方法省略
	@Override
	public String toString() {
   
		return "User [id=" + id + ", username=" + username + ", sex=" + sex
	+ ", birthday=" + birthday + ", address=" + address + "]";
	}		
}

4.3.6 第六步:sql映射文件 不再是在对象类的包里的
src/Use.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">
<!-- namespace:命名空间,做sql隔离 防止id相同,无法区分操作的表-->

<mapper namespace="test">
<select id="findUserById" parameterType="java.lang.Integer" resultType="cn.atcast.pojo.User">
 		select * from user 
 		where id=#{
   id}
 	</select>
 	
 	
 	<!-- 模糊查询 -->
 	<select id="findUserByUserName" parameterType="java.lang.String" resultType="cn.atcast.pojo.User">
 		select * from user 
		where username like '%${value}%'
	</select>
</mapper>

namespace :命名空间,用于隔离sql语句。
4.3.7 第七步:加载映射文件到主配置文件
mybatis框架需要加载映射文件,将User.xml添加在SqlMapConfig.xml,如下:
src/SqlMapConfig.xml

<mappers>
		<mapper resource="User.xml"/>
</mappers>

4.4 接着来 根据id查询用户信息

4.4.1 映射文件:

	在src/User.xml中添加:
<!-- 
	id:sql语句唯一标识
	parameterType:指定传入参数类型
	resultType:返回结果集类型
	#{}占位符:起到占位作用,如果传入的是基本类型(string,long,double,int,boolean,float等),那么#{}中的变量名称可以随意写.
	 -->
	<select id="findUserById" parameterType="java.lang.Integer" resultType="cn.atcast.pojo.User">
		select * from user where id=#{
   id}
	</select>
parameterType:定义输入到sql中的映射类型,#{
   id}表示使用preparedstatement设置占位符号并将输入变量id传到sql。
resultType:定义结果映射类型。

4.4.2 测试程序:

	在cn.atcast.test/UserTest.java
@Test
	public void testFindUserById() throws Exception{
   
		String resource = "SqlMapConfig.xml";
		//通过流将核心配置文件读取进来
		InputStream inputStream = Resources.getResourceAsStream(resource);
		//通过核心配置文件输入流来创建会话工厂
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
		//通过工厂创建会话
		SqlSession openSession = factory.openSession();
		//第一个参数:所调用的sql语句= namespace+.+sql的ID,尽量写上命名空间
		User user = openSession.selectOne("test.findUserById", 1);
	
		System.out.println(user);
		openSession
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值