阿里内部流传的 Mybatis 笔记终于流传出来了,赶紧收藏
Mybatis大纲
什么是Mybatis框架
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github 。 MyBatis是一个半自动的ORM框架 ORM: Object Relational Mapping (作用解决数据库发展和面向对象发展不一致的问题)。 O:面向对象 R:关系型数据库 M:映射 半自动:myBatis框架是需要我们自己手写sql语句 MyBatis框架不依赖于服务器
Mybatis依赖包
mysql驱动包+mybatis的核心包+mybatis的依赖其中核心包为mybatis.jar
依次从上到下包的作用ant编译Java类,生成class文件,ant可以把相关层架构成包java文件解析包.spring依赖这个包动态代理包.mybatis不需编写实现类日志包.spring依赖这个包字节码解析助手,处理.class文件日志包mybatis核心包数据库驱动日志包
Mybatis.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="jdbc.properties"></properties>
<!-- 指定mybatis中的日志类型-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!-- 给实体类配置别名-->
<typeAliases>
<!-- 给指定的类起别名-->
<!-- <typeAlias type="com.erwin.entity.Student" alias="student"></typeAlias>-->
<!-- 包下所有类的别名就是当前类名 首字母会调整为小写-->
<package name="com.erwin.entity"/>
</typeAliases>
<!-- 配置数据库环境-->
<environments default="mysql">
<!--Mysql数据库连接-->
<environment id="mysql">
<!--Mybatis事务管理 目前的事务管理和JDBC中的事务保持一致-->
<transactionManager type="JDBC"></transactionManager>
<!-- 底层使用连接池连接-->
<dataSource type="POOLED">
<property name="driver" value="${m_driver}"/>
<property name="url" value="${m_url}"/>
<property name="username" value="${m_user}"/>
<property name="password" value="${m_pwd}"/>
</dataSource>
</environment>
</environments>
<!-- 进行mapper文件的扫描-->
<mappers>
<!-- resourse 表示XML所在的目录-->
<mapper resource="com/erwin/mapper/StudentMapper.xml">
<!-- 扫描包下的所有接口,然后去找和接口相同名字的XML-->
<package name="com.erwin.mapper"/></mapper>
</mappers>
</configuration>
其中jdbc.properties书写如下
m_driver=com.mysql.cj.jdbc.Driver
m_url=jdbc:mysql://localhost:3306/mybatis?verifyServerCertificate=false&useSSL=false&serverTimezone=UTC
m_user=root
m_pwd=
Mybatis配置属性说明
全局配置文件mybatis.xml
<environments default="demo">
default配置当前所使用的环境.值必须是<environment>的id值,可以有多个<environment>标签.
<environment> 声明可能使用的环境,会被< environments>引用
<transactionManager type="JDBC"> 事务管理器类型.
type属性可取值:
JDBC 底层事务与JDBC原有事务管理相同
MANAGED MyBatis不去管理事务,交给其他容器进行管理.
<dataSource type="POOLED">
POOLED : 使用连接池技术. 访问频率比较高时使用.连接池的使用可以降低服务器压力,提高连接对象重用性
UNPOOLED: 不使用连接池技术.每次对数据库访问时打开数据库连接,访问结束后关闭数据库连接.
JNDI : java命名目录接口.数据库的连接可以依赖于其他技术或应用.
<mapper> 常用属性
resource="com/bjsxt/xxx.xml" 加载项目中资源,目录寻找,中间是/
url="" 加载互联网或本机的配置文件.示例如下:
配置Mapper层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="erwin">
<!-- id 方法名称-->
<!-- resultType 返回值类型
如果返回值是一个对象,就写对象所在包的全路径
如果返回值是一个集合,这个时候书写集合的泛型
-->
<!-- 注意student是配置在mybatis.xml中的别名,完整路径为com.erwin.entity.Student-->
<select id="selectAll" resultType="student">
select * from student
</select>
</mapper>
mapper.xml 中标签解释
<mapper >中namespace=""值相当于接口名
id 属性: 相当于方法名
resultType属性:返回值类型,如果返回值是集合,写集合的泛型.
parameterType属性:参数类型.如果没有参数省略该属性.
其中Student类为Pojo,定义如下:
package com.erwin.entity;
import java.io.Serializable;
public class Student implements Serializable {
private int id;
private String name;
private String gender;
public Student(int id, String name, String gender) {
this.id = id;
this.name = name;
this.gender = gender;
}
public Student() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
'}';
}
}
最基本的调用方式
package com.erwin.test;
import com.erwin.entity.Student;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class TestA {
public static void main(String[] args) throws IOException {
//[a] 解析mybatis.xml
InputStream resourceAsStream = Resources.getResourceAsStream("com/erwin/mybatis.xml");
//[b]获得Session工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream,"mysql");
//[c]获得Session对象
SqlSession sqlSession = factory.openSession();
//[d]调用Sql方法
List<Student> students = sqlSession.selectList("erwin.selectAll");
//[e]关闭资源
sqlSession.close();
System.out.println(students.get(0));
}
}
日志文件的配置
#指定全局打印的级别和输出
log4j.rootCategory=error, CONSOLE,LOGFILE
#指定erwin namespace = debug,并打印
log4j.logger.erwin=debug
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:/log/0813.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
评论