mybaits入门
ibatis提供持久层框架包括Sql Maps(封装JDBC)和Data Access Object(dao数据访问对象)
特性/概念
1、MyBatis支持定制化SQL(SQL语句自己写,自己维护)、存储过程以及高级映射(自定义一对多)的优秀的持久层框架
2、避免几乎所有JDBC代码和手动设置参数以及获取结果集。
3、可以使用简单的XML*或者注解用于配置和原始映射(SQL语句可以写在xml中或者通过注解写在接口中,面向接口编程),将接口和Java的POJO(普通JAVA对象)映射乘数据库中的记录
4、是一个半自动的ORM(Object(实体对象) Relation(关系型数据库) Mapping(映射))对象关系映射框架
和其他对比
jdbc
1、SQL夹杂在Java代码中偶合度高,导致硬编码硬伤
2、维护不易且时机开发需求中SQL有变化,频繁修改情况多见
3、代码冗长,开发效率低
Hibernat/JPA
1、操作简便,开发效率高
2、程序中的长难复杂SQL需要绕过框架
3、内部自动生产的sql,不容易做特殊优化
4、基于全反射的全自动框架,大量字段的POJO进行部分映射比较困难
5、反射操作太多,数据库性能下降
Mybatis
1、轻量级,性能出色
2、SQL和JAVA编码分开,功能边界清晰。JAVA代码专注业务,SQL语句专注数据
3、开发效率少寻Hibernate,但是完全能接受。
创建工程
Maven工程
Mybatis核心配置文件
习惯上命名mybatis-config.xml,整合Spring之后,整个配置文件可以省略
核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息
1)enviorments:配置多个连接数据库环境
-
default:默认使用的环境的ID
2)enviroment:配置某个具体的环境
-
id:表示连接数据库有的唯一标识,不能重复
3)transactionManager:设置事务管理方式
-
type:"JDBC/MANAGED"
-
JDBC:表示当前环境中,执行sql时,使用的是JDBC中原生的事务管理方式,事务的提交或回滚需要手动
-
MANAGED:表示被管理,例如被Spring
4)dataSource:配置数据源
-
type:"POOLED\UPOOLED\JNDI"
-
POOLED:表示使用数据库连接池缓存数据库连接
-
UNPOOLED:表示不适用数据库连接池
-
JNDI:表示使用上下文数据源
核心配置文件存放的位置:src/main/resources
配置连接数据库的环境
<environments default="development">
<environment id="development">
//这里我们使用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>
引入映射文件
<mappers>
<mapper resource="mappers/UserMapper.xml"
</mappers>
创建表
创建实体类POJO
保证字段名和属性名一致
com.atguigu.mybatis.pojo.User
public class User {
private Integer id;
private String name;
private String password;
private Integer age;
private char sex;
private String eamil;
.....
}
创建mapper接口
MyBatis中的Mapper接口相当于以前的Dao,区别在于mapper仅仅是接口,不需要提供实现类
com.atguigu.mybatis.mapper.UserMapper(Interface)
public interface UserMapper {
/**
* 插入用户
* @return
*/
public int insertUser();
}
创建映射文件
相关概念:ORM对象关系映射
-
对象:JAVA实体类对象
-
关系:关系型数据库
-
映射:二者之间的关系
JAVA概念 | 数据库概念 |
---|---|
类 | 表 |
属性 | 字段/列 |
对象 | 记录/行 |
1、映射文件命名规则
-
表对应的实体类的类名+Mapper.xml
-
存放位置为src/main/resource/mappers
表t_user,映射实体类User,映射文件UserMapper.xml
2、面向接口编程
表——实体类——mapper接口——映射文件
-
映射文件的namespace和mapper全类名一致
-
映射文件中sql语句的id和mapper接口的方法名一致
<?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.atguigu.mybatis.mapper.UserMapper">
<insert id="insertUser" >
insert into t_user values(null,"asd","123","12","m","123@123.com")
</insert>
</mapper>
3、测试功能
注意提交事务
public class MyBatisTest {
@Test
public static void main(String[] args) throws IOException {
//加载核心配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//获取sqlSessionFactory
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取mapper接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//测试功能
int i = mapper.insertUser();
//提交事务
sqlSession.commit();
//输出受影响的行数
System.out.println(i);
}
}
4、功能增强
(1)是否自动提交事务:
//获取SqlSession默认不提交事务,参数列表true自动提交
SqlSession sqlSession = sqlSessionFactory.openSession(true);
(2)查看日志
a>pom加入log4j依赖
<!--日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
b>建立log4j配置文件
日志的级别:
-
FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)
-
resource/固定名称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="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>