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();
}
}
}