Mybatis框架的学习

Mybatis框架概述

  1. 简单易学,很小很简单,没有第三方依赖,最简单的安装只需要一个jar文件和XML配置。
  2. 灵活,不会对应用程序和数据库强加影响。
  3. 实现了SQL和代码的分离。【将数据访问层DAO以及JDBC编程实现了封装】。
  4. 支持动态SQL。

Mybatis简单示例:

1.新建一个Maven项目。

新建Maven项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 打开pom.xml进行配置

刚开始的代码是这样子的:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.zking.teach</groupId>
  <artifactId>Day2019_09_17_Mybatis</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</project>

**我们需要添加一些Maven依赖。**这里面有:

  • 一些自定义配置信息,比如JDK版本会自动设置为1.8,而不是开始的J2SE-1.5。
  • JUnit单元测试
  • json库
  • mysql的JDBC数据库驱动>>mysql-connector-java
  • 日志 Simple logging facade for Java和具体日志桥
  • Mybatis框架的主配置信息
  • Maven项目的工程编译插件的配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.zking.teach</groupId>
	<artifactId>Day2019_09_17_Mybatis</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	
	<!-- 自定义配置信息(JDK 1.8) -->
	<properties>
		<charset>UTF-8</charset>
		<jdk.version>1.8</jdk.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<argLine>-Dfile.encoding=UTF-8</argLine>
	</properties>
	
	
	<dependencies>
	
		<!-- 单元测试 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>

		<!-- json库 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.11</version>
		</dependency>

		<!-- mysql的jdbc数据库驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.28</version>
		</dependency>

		<!-- 日志 Simple logging facade for Java -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.25</version>
		</dependency>
		<!-- 具体日志桥 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.25</version>
		</dependency>
		
		<!-- MyBatis框架主配置 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.6</version>
		</dependency>
		
	</dependencies>


	<build>
		<plugins>
			<!-- Maven工程编译插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.0</version>
				<configuration>
					<source>${jdk.version}</source>
					<target>${jdk.version}</target>
					<encoding>${charset}</encoding>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

然后Ctrl+S对pom.xml文件进行保存。之后要记得对项目进行Maven-update一下。在项目上右击>>找到Maven>>在后面找到Update Maven Project >>点击进去如下图>>OK,此时项目就不会报错了。
在这里插入图片描述
在这里插入图片描述

3.配置Mybatis主配置文件

在这里插入图片描述
Mybatis主配置>>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>
	<properties resource="config.properties">
		<property name="type" value="JDBC"/>
	</properties>
	<settings>
		<!-- 打开延迟加载的开关 -->
	    <setting name="lazyLoadingEnabled" value="true"/>
	    <!-- 将积极加载改为消极加载,即延迟加载 -->
	    <setting name="aggressiveLazyLoading" value="false"/>
	    <setting name="mapUnderscoreToCamelCase" value="true"/>
	</settings>
	<typeAliases>
		<typeAlias type="com.teach.entity.RoleInfo" alias="RoleInfo"/>
	</typeAliases>
	<typeHandlers>
		<package name="com.teach.type"/>
	</typeHandlers>
	<environments default="development">
		<environment id="development">
			<transactionManager type="${type}"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driverClassName}"/>
				<property name="url" value="${jdbc.url}"/>
				<property name="username" value="${jdbc.username}"/>
				<property name="password" value="${jdbc.password}"/>
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<package name="com.teach.mapper"/>
		<!-- <mapper resource="com/teach/mapper/RoleInfoMapper.xml" /> -->
	</mappers>
</configuration>

log4j.xml文件配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p: %c > %m%n" />
		</layout>
	</appender>

	<logger name="com.teach">
		<level value="debug"/>
	</logger>
	 
	<root>
		<priority value="debug" />
		<appender-ref ref="console" />
	</root>
	
</log4j:configuration>

config.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/1128java?useUnicode\=true&characterEncoding\=UTF-8&zeroDateTimeBehavior\=convertToNull
jdbc.username=root
jdbc.password=123456

4.创建好实体类,与数据库表中的字段一致

在这里插入图片描述

package com.teach.entity;

public class RoleInfo {

    private Integer roleId;//角色id

    private String roleName;//角色名

    public RoleInfo() {//构造器
		super();
	}

	public RoleInfo(Integer roleId) {
		super();
		this.roleId = roleId;
	}

	public RoleInfo(Integer roleId, String roleName) {
		super();
		this.roleId = roleId;
		this.roleName = roleName;
	}

	public Integer getRoleId() {
        return roleId;
    }

    public void setRoleId(Integer roleId) {
        this.roleId = roleId;
    }

    public String getRoleName() {
        return roleName;
    }

    public void setRoleName(String roleName) {
        this.roleName = roleName == null ? null : roleName.trim();
    }

	@Override
	public String toString() {
		return "RoleInfoVO [roleId=" + roleId + ", roleName=" + roleName + "]";
	}
   
}

数据库中表的名称和字段:
在这里插入图片描述在这里插入图片描述

5.创建好DAO类,接口以及XML配置文件

在这里插入图片描述
RoleInfoDAO类的代码实现:

package com.zking.DAO;

import java.util.List;

import com.zking.entity.RoleInfo;

public interface RoleInfoDAO {
	//添加角色实现接口
	int insert(RoleInfo roleInfo);
	//查询所有的角色
	List<RoleInfo> selectAll();
}

RoleInfoDAO.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.zking.DAO.RoleInfoDAO">
<!-- 根标签mapper的属性namespace需要与所写的接口的方法要一致 -->
	<insert id="insert">     <!-- id要与接口中定义的方法名要一致 -->
		insert into role_info(role_id,role_name)
		values(#{roleId},#{roleName})
	</insert>

	<select id="selectAll"></select>
	<update id="update"></update>
</mapper>

6.建立测试类

在这里插入图片描述
RoleInfoDAOTest.java代码实现:

package com.zking.dao;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.zking.DAO.RoleInfoDAO;
import com.zking.entity.RoleInfo;

public class RoleInfoDAOTest {

	private Logger log = LoggerFactory.getLogger(this.getClass());

	@Test
	public void insert() {
		// 1.加载配置文件
		//创建一个会话工厂sessionFactory,相当于事务的连接对象,最后需要关闭。
		//new一个创建者,利用里面的build方法来指定XML的资源(/mybatis-config.xml),通过输入流的方式来获取到xml的资源,/是指在根目录里
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
				.build(this.getClass().getResourceAsStream("/mybatis-config.xml"));

		//2.会话工厂创建一个session会话对象
		SqlSession session = sessionFactory.openSession();

		try {
			//3.通过session来获取RoleInfoDAO的映射
			RoleInfoDAO dao = session.getMapper(RoleInfoDAO.class);

			RoleInfo roleInfo = new RoleInfo(-3, "test3");
			//4.通过dao来调用接口里面的方法
			dao.insert(roleInfo);
			//5.事务提交
			session.commit();// 必须要提交事务,才能添加到数据库中
			//6.日志提示执行成功信息
			log.info("添加成功!");//日志添加

		} catch (Exception ex) {
			//7.日志执行失败提示信息
			log.warn("执行失败!", ex);
			//事务回滚
			session.rollback();//事务回滚,如果错误就回退
		} finally {
			//事务关闭
			session.close();
		}
	}
}

Junit执行结果
在这里插入图片描述

2019-09-21 16:26:10 DEBUG: org.apache.ibatis.logging.LogFactory > Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
2019-09-21 16:26:10 DEBUG: org.apache.ibatis.datasource.pooled.PooledDataSource > PooledDataSource forcefully closed/removed all connections.
2019-09-21 16:26:10 DEBUG: org.apache.ibatis.datasource.pooled.PooledDataSource > PooledDataSource forcefully closed/removed all connections.
2019-09-21 16:26:10 DEBUG: org.apache.ibatis.datasource.pooled.PooledDataSource > PooledDataSource forcefully closed/removed all connections.
2019-09-21 16:26:10 DEBUG: org.apache.ibatis.datasource.pooled.PooledDataSource > PooledDataSource forcefully closed/removed all connections.
2019-09-21 16:26:11 DEBUG: org.apache.ibatis.transaction.jdbc.JdbcTransaction > Opening JDBC Connection
2019-09-21 16:26:11 DEBUG: org.apache.ibatis.datasource.pooled.PooledDataSource > Created connection 1920387277.
2019-09-21 16:26:11 DEBUG: org.apache.ibatis.transaction.jdbc.JdbcTransaction > Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@7276c8cd]
2019-09-21 16:26:11 DEBUG: com.zking.DAO.RoleInfoDAO.insert > ==>  Preparing: insert into role_info(role_id,role_name) values(?,?) 
2019-09-21 16:26:11 DEBUG: com.zking.DAO.RoleInfoDAO.insert > ==> Parameters: -3(Integer), test3(String)
2019-09-21 16:26:11 DEBUG: com.zking.DAO.RoleInfoDAO.insert > <==    Updates: 1
2019-09-21 16:26:11 DEBUG: org.apache.ibatis.transaction.jdbc.JdbcTransaction > Committing JDBC Connection [com.mysql.jdbc.JDBC4Connection@7276c8cd]
2019-09-21 16:26:11 INFO : com.zking.dao.RoleInfoDAOTest > 添加成功!
2019-09-21 16:26:11 DEBUG: org.apache.ibatis.transaction.jdbc.JdbcTransaction > Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@7276c8cd]
2019-09-21 16:26:11 DEBUG: org.apache.ibatis.transaction.jdbc.JdbcTransaction > Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@7276c8cd]
2019-09-21 16:26:11 DEBUG: org.apache.ibatis.datasource.pooled.PooledDataSource > Returned connection 1920387277 to pool.

数据库表新添加了一条数据:
在这里插入图片描述

Mybatis框架入门阶段学习温馨提示:

  1. 不要觉得学框架的配置很麻烦就不去学了,到后面写的代码会越来越少。
  2. 整合后会发现Mybatis很简单,使用会更简单,增删改查用普遍的代码生成器生成。你需要的接口会自动嵌入进来,只需要执行里面的方法就可以了。比如:只需要这两行代码就行>>RoleInfo roleInfo = new RoleInfo(-3, "test3"); dao.insert(roleInfo);
  3. 提交回滚会有专门的事务管理器处理,都不需要管。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值