SSM(一)MyBatis环境搭建

一、目标

1. 理解mybatis的概念及优点特性

2. 搭建mybatis开发环境(重点)

3.了解mybatis与jdbc的区别和联系

4. 了解mybatis的优缺点及应用场合

二、MyBatis简介

1. MyBatis前身是iBatis,本是Apache的一个开源的项目

2. 官方网站:http://mybatis.org

    国内访问不到,需要到GitHub上下载release版本。github.com/mybatis

3. ORM框架

4. 实体类和SQL语句之间建立映射关系

5. 特点:

            a) 基于SQL语法,简单易学

            b) 能了解底层封装过程

            c) SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度

            d) 方便程序代码调试

三、项目总体功能模块

四、数据库表结构

五、搭建MyBatis开发环境之使用MyBatis的开发步骤

1. 下载MyBatis-3.2.2.jar包并导入工程

2. 编写mybatis核心配置文件(configuration.xml)

    配置文件名称可以更改。

    核心配置文件,mybatis主要是dao层,连接数据库,对数据库的表增删改查,核心配置文件很重要的一件事就是连接数据库。还可以进行一些设置,属性配置,影响mybatis的行为设置。

3. 创建实体类-POJO

    因为是ORM对象关系映射,所以要创建一些POJO。

4. DAO层-SQL映射文件(mapper.xml)

    SQL映射文件都写在mapper.xml中

5. 创建测试类(模拟service层调用dao层)

            1)读取全局配置文件mybatis-config.xml

            2)创建SqlSessionFactory对象,读取配置文件

            3)创建SQLSession对象

            4)调用mapper文件进行数据操作

六、数据库中的字段名都采用驼峰命名法

原因:在mybatis开发的时候,数据库表的字段名和POJO的属性名最好命名方式一致,有效进行自动映射。

七、mybatis框架搭建

1. 首先在github(https://github.com/mybatis/mybatis-3)上下载所需要的mybatis的release版本。其中有一个mybatis的jar包。在lib文件夹下,有编译所依赖的jar包:

asm操作java字节码的类库

cglib动态继承java类或实现接口

commons-logging通用日志处理

javaassist分析编辑创建java字节码类库

log4j日志系统

slf4j日志系统的封装,对外提供统一API接口

sel4j-log4j对log4j的相应驱动

2. 将mybatis,log4j,mysql-connector-java的jar包都引入到新建的web project中。并且add to build path。

3. 引入mybatis的源码。选中referenced libraries文件夹下面的mybatis的jar文件,右键 Properties,java source attachment选项卡,选择location path。如果是zip文件选择external file,如果是folder,选择external folder。

八、创建mybatis的核心配置文件

configuration.xml是mybatis的核心配置文件,配置数据库连接及设置。可以放在src目录下,但是为了方便框架集成及管理,新建可编译的source folder为resources。

起一个有标志性的配置文件名字,新建mybatis-config.xml,配置数据库连接及mybatis行为属性。

读取数据库配置文件,这个写到一个属性文件里面,database.properties,写到resources目录下。

因为使用了log4j,所以在resources下,需要log4j.properties属性文件。

在mybatis-config.xml文件中对以上两个属性文件进行引入。

编写mybatis核心配置文件:

1. 首先根据mybatis的官方手册,引入mybatis的头信息。

2. configuration元素是根节点

3. 第一步需要通过configuration子节点properties元素,有一个resource属性,把要跟数据库进行连接的配置文件引入进来,指定属性文件,把属性文件引入进来。

4. 在mybatis中可以配置多套运行环境,通过environments,environments下面可以有多个environment。environments有一个属性是default,指定默认运行环境,即是environment的id。注意,可以配置多套运行环境environment,但是每套运行环境environment的id属性都必须唯一。

5. environment需要配置事务管理,数据源。transactionManager事务使用JDBC。dataSource数据源使用mybatis自带的POOLED,也可以使用Tomcat中的JNDI。此项目我们使用POOLED。在dataSource数据源元素下,取出database.properties文件中key值对应的value值。<property name="driver" value="${driver}"/>等。

6. 配置完environments后,可以配置settings,设置mybatis的运行行为。比如设置mybatis的log日志。设置mybatis的日志实现为log4j。<setting name="logImpl" value="LOG4J"/>

7. 配置完成后,发现configuration报错,是因为节点顺序不对。mybatis的核心配置文件节点是由顺序的。可以点击design,右键configuration,add child,settings等,会出现在正确的位置上,再进行编辑。

database.properties

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:33306/SMBMS?useUnicode=true&characterEncoding=utf8
username = root
password =root

log4j.properties

 ### set log levels ###
log4j.rootLogger = debug ,  stdout ,  D ,  E

### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n

### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = /Users/xie/Documents/log/SSM/logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 保存异常信息到单独文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = /Users/xie/Documents/log/SSM/logs/error.log ## 异常日志文件名
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

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>
	<!-- 第一步,引入database.properties数据库连接的配置文件 -->
	<properties resource="database.properties"/>
	<!-- 设置mybatis的运行行为,比如log日志 -->
	<settings>
		<setting name="logImpl" value="LOG4J"/>
	</settings>
	<!-- 配置运行环境,可以有多个,default属性指的是哪一个环境,对应environment的id -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="${driver}"/>
				<property name="url" value="${url}"/>
				<property name="username" value="${username}"/>
				<property name="password" value="${password}"/>
			</dataSource>
		</environment>
	</environments>
</configuration>

九、POJO

创建web project SMBMS,创建包cn.smbms.pojo,创建类User。mybatis是POJO和SQL语句的映射,所以要保证POJO类中的属性名与数据库表的字段名一致。

package cn.smbms.pojo;

import java.util.Date;

public class User {
	private int id; // id
	private String userCode; // 用户编码
	private String userName; // 用户名称
	private String userPassword; // 用户密码
	private int gender; // 性别
	private Date birthday; // 出生日期
	private String phone; // 电话
	private String address; // 地址
	private int userRole; // 用户角色
	private int createdBy; // 创建者
	private Date creationDate; // 创建日期
	private int modifyBy; // 修改者
	private Date modifyDate; // 修改日期

	public User() {
		super();
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUserCode() {
		return userCode;
	}

	public void setUserCode(String userCode) {
		this.userCode = userCode;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getUserPassword() {
		return userPassword;
	}

	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}

	public int getGender() {
		return gender;
	}

	public void setGender(int gender) {
		this.gender = gender;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public int getUserRole() {
		return userRole;
	}

	public void setUserRole(int userRole) {
		this.userRole = userRole;
	}

	public int getCreatedBy() {
		return createdBy;
	}

	public void setCreatedBy(int createdBy) {
		this.createdBy = createdBy;
	}

	public Date getCreationDate() {
		return creationDate;
	}

	public void setCreationDate(Date creationDate) {
		this.creationDate = creationDate;
	}

	public int getModifyBy() {
		return modifyBy;
	}

	public void setModifyBy(int modifyBy) {
		this.modifyBy = modifyBy;
	}

	public Date getModifyDate() {
		return modifyDate;
	}

	public void setModifyDate(Date modifyDate) {
		this.modifyDate = modifyDate;
	}

}

十、mapper映射文件的创建

新建包cn.smbms.dao.user,创建UserMapper.xm映射文件,引入头部信息:

<?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">

在这个配置文件中,主要是定义一些SQL语句,根节点是mapper,mapper中只有一个属性是namespace,主要是为了区别其他的mapper,达到全局唯一,其实就是UserMapper的全路径名称。

为了在mapper的xml文件中有提示信息,需要手工引入mybatis-3-mapper.dtd文件和mybatis-3-config.dtd。

将下载下来的mybatis的jar文件,以压缩包的形式打开,在mybatis-3.2.2/org/apache/ibatis/builder/xml路径下,有这两个dtd文件。将这两个dtd文件拷贝出来放在本地/Users/xie/Documents/SSM路径下。

在myeclipse中选择preferences,选择XML catalog,在右侧选择user specified entries。选择add,在弹出的对话框中,选择file system,在key中填入PUBLIC后面的内容-//mybatis.org//DTD Config 3.0//EN。mapper类似。

至此,在xml文件中就有自动联想功能。有提示信息便于开发工作。

查询用select,id属性表示该命名空间下的唯一标识符。resultType返回结果类型。

<!-- 查询用户表的记录数 -->
	<select id="count" resultType="int">
		select count(1) as count from smbms_user
	</select>

src下的cn.smbms.dao.user

<?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="cn.smbms.dao.user.UserMapper">
	<!-- 查询用户表的记录数 -->
	<select id="count" resultType="int">
		select count(1) as count from smbms_user
	</select>
</mapper>

十一、测试类

新建source folder test,建立测试类cn.smbms.user.UserMapperTest。

在测试类的测试方法中,第一步,首先把mybatis-config的测试文件读入进来。

String resource = "mybatis-config.xml";

第二步,需要保存记录数,用count接收

int count = 0;

第三步,还需要一个sql会话,提前声明出来,下面会用到。

SqlSession sqlSession = null;

第四步,获取mybaits-config.xml的输入流

InputStream is = Resources.getResourceAsStream(resource);

第五步,创建SqlSessionFactory,通过会话工厂得到相应的sql会话

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

第六步,创建sqlSession

sqlSession = factory.openSession();

第七部,将mapper配置文件引入到mybatis-config文件中,不然后面找不到

<mappers>

    <mapper resource="cn/smbms/dao/user/userMapper.xml"/>

</mappers>

第八步,有了sqlSession就可以通过sqlSession调用mapper文件来对数据进行操作。参数为namespace.count

sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");

第九步,打印日志,使用log4j

private Logger logger = Logger.getLogger(UserMapperTest.class);

第十步,打印message

logger.debug("UserMapperTest count--->" + count);

第十一步,打开会话后,一定要有关闭会话,写到finally里面

sqlSession.close();

package cn.smbms.dao.user;

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.Test;

public class UserMapperTest {

	//9.使用log4j打印日志
	private Logger logger = Logger.getLogger(UserMapperTest.class);
	
	@Test
	public void test() {
		//1. 声明配置文件
		String resource = "mybatis-config.xml";
		//2.使用一个变量接收返回的值
		int count = 0;
		//3.声明sqlSession,后续会用
		SqlSession sqlSession = null;
		try {
			//4.通过输入流读取配置文件
			InputStream is = Resources.getResourceAsStream(resource);
			//5.创建SqlSessionFactory,通过会话工厂得到相应的SQL会话
			SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
			//6.创建sqlSession
			sqlSession = factory.openSession();
			//7.将mapper配置文件引入到
			//8.有了sqlSession,就可以通过mapper文件对数据进行操作,参数为namespace.id
			count = sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");
			//10.打印message
			logger.debug("UserMapperTest ---> " + count);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			sqlSession.close();
		}
	}

}

十二、mybatis框架优缺点

优点:

  • 与JDBC相比,减少了50%以上的代码量
  • 最简单的持久化框架,小巧并简单易学
  • SQL代码从程序代码中彻底分离,可重用
  • 提供xml标签,支持编写动态SQL
  • 提供映射标签,支持对象与数据库的ORM字段关系映射

缺点:

  • SQL语句编写工作量大,对开发人员有一定的要求
  • 数据库移植性查

MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,适用于性能要求较高或者需求多变的互联网项目

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值