MyBatis的学习笔记(一)入门代码

MyBatis的简介

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

MyBatis的基本构成

四大组成:

  • SqlSessionFactoryBuilder: (构造器),根据xml配置信息或代码来生成SqlSessionFactory对象
  • SqlSessionFactory: 通过openSession()生成SqlSession;
  • SqlSession: 执行SQL并返回结果
    • 它可以直接通过select,update,insert,delete方法去操作数据库
    • 得到xml映射器
  • SQLMapping: 由一个java接口和xml(或者注解)构成;

创建web动态项目

导入Mybatis的Jar包

在这里插入图片描述
官网下载jar包,其中lib中的jar包都需要导入,外加mybaits-3.5.2.jar主jar包,其中还需要mysql-connector-java.jar为jdbc驱动包。在此pdf文档中有xml主配置样式信息。
https://github.com/mybatis/mybatis-3/releases

创建实体类

实体类要求属性名和数据库表的字段名一致
在这里插入图片描述

映射器

映射器是由Java接口和XML文件(或注解)共同组成的。(对应的下述的usermapping.xml文件)作用如下:

  • 定义参数类型
  • 描述sql语句
  • 定义查询结果和POJO的关系
  • 描述缓存

创建接口类,以一个添加的方法为eg:

package com.mybatis.mapping;

import com.mybatis.entity.User;

public interface IUserMapping {
	public int add(User user);
}

创建XML配置文件

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>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<!-- 配置数据库连接信息 -->
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/schoolmanager" />
				<property name="username" value="root" />
				<property name="password" value="123" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
	<!-- 修改为创建的usermapping.xml的url -->
		<mapper resource="com/mybatis/mapping/usermapping.xml" />
	</mappers>
</configuration>
usermapper.xml,映射文件其中定义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="com.mybatis.mapping.IUserMapping">
	<!--#{}相当于占位符,里面填写的是实体类的属性名,实体类的属性名和数据库的字段名保持一致 add为接口中的方法名  -->
	<!-- 以对象的方式向数据库添加,添加的默认返回类型为int,无需填写返回类型,parameterType为参数的数据类型,为对象时填写类路径 -->
	<!-- 数据库中的id为主键自增,用添加数据时用null -->
	<insert id="add" parameterType="com.mybatis.entity.User">
		insert into t_user values(null,#{username},#{password})
	</insert>
</mapper>
log4j.properties日志配置文件

其中log4j.rootLogger=debug, stdout,可修改显示信息的级别:debug,info,warn,error,可自行修改,修改后只显示当前及以上的提示信息。

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.rootLogger=debug, stdout

以上完成测试的主要配置

各配置文件存放路径,整体框架如下:
在这里插入图片描述

开始测试

  • 创建测试类,测试类中创建测试add的方法
  • 第一步创建构造器
  • 用mybatis提供的Resources中的方法去读取主配置文件
  • 通过构造器和主配置文件,获得工厂对象
  • 用工厂对象方法获取SqlSession对象
  • 获得mapper对象
  • 给user对象添加数据,用mapper对象去调用接口的add方法
  • 添加数据时需要将事务进行提交(select不用提交事务,增删改如果未提交事务,则自动回滚
  • 关闭SqlSession

测试代码如下:

public class MybatisTest {

	@Test
	public void addTest() throws IOException {
		SqlSession sqlSession =null;
		try {
			//创建构造器
			SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
			//用mybatis提供的Resources中的方法去读取主配置文件
			InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
			//通过构造器和主配置文件,获得工厂对象
			SqlSessionFactory factory = builder.build(inputStream);
			//用工厂对象方法获取SqlSession对象
			sqlSession = factory.openSession();
			// 获得mapper对象
			IUserMapping userMapper = sqlSession.getMapper(IUserMapping.class);
			// 给user对象添加数据
			User user = new User();
			user.setUsername("zzzzzz");
			user.setPassword(123);
			userMapper.add(user);
			// 添加数据时需要将事务进行提交
			sqlSession.commit();
		} catch (Exception e) {
			e.printStackTrace();
			sqlSession.rollback();
		}finally {
			//用完关闭
			if(sqlSession!=null) {
				sqlSession.close();
			}
		}
		
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值