Mybatis概述
Mybatis是一个半自动化的框架,需要自己写sql语句,对比JDBC其有耦合性更低的SQL语句与Java代码,各司其职不相互冗杂,对比Hibernate与JPA其又有更灵活的SQL编写能力。
环境搭建
引入相关依赖并打jar包
xml
<dependencies>
<!-- Mybatis核心 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MySQL驱动 -->
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>
</dependencies>
在resource下新建mybatis-config.xml文件,并粘贴以下配置:
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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/MyBatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
在mapper文件夹下创建UserMapper接口,每张表对应一个Mapper接口
在resource下创建xml配置文件
在mapper标签下进行sql语句的编写
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.qinghe.mybatis.mapper.UserMapper">
</mapper>
例如一个insert语句:
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">
<!--注意这个地方的namespace要与自己的mapper接口保持一致-->
<mapper namespace="com.qinghe.mybatis.mapper.UserMapper">
<!-- 注意此处的id作用是唯一标识sql语句,id名必须与mapper接口中的方法名一致-->
<insert id="insertUser">
insert into t_user values(null, 'admin', '123456', 23, 'm', '123456@qq.com')
</insert>
</mapper>
一个插入语句的示例
创建一个mapper层的接口
java
public interface UserMapper {
/**
* 添加用户信息
* @return
*/
int insertUser();
}
在test中的测试如下:
java
public class MyBatisTest {
@Test
public void testMyBatis() throws IOException {
//加载配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder,工厂模式
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//获取sqlSessionFactory,传入配置文件的流信息
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取sqlSession,sqlSession是数据库与Java进行数据交换的中介,就像是HttpSession时浏览器与Java的中介一样
//openSession中的参数true为自动提交的意思
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//获取mapper接口对象,getMapper(CLass<T>)方法使用代理模式,在底层创建了一个UserMapper对象并赋值给mapper
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用方法
int result = mapper.insertUser();
//提交事务,语句必须执行过事务提交之后才会在数据库显示
//要么在sqlSessionFactory创建对象时开启自动提交,要么就手动提交
// sqlSession.commit();
System.out.println("result:" + result);
}
}
添加日志功能
在resource文件夹下创建日志的配置文件:log4j.xml并添加如下配置:
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>
Mybatis-config.xml配置文件详解
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>
<!-- 配置jdbc.properties文件,使数据库的连接属性们从jdbc.properties读取-->
<properties resource="jdbc.properties" />
<!-- typeAliases是设置别名的意思,其将全类名设置别名为最后的类名-->
<typeAliases>
<!-- type属性是要设置别名的类,alias属性是设置的类名
alias属性可以不进行设置,若不进行设置则其默认的别名就是类名,且不区分大小写,若设置了alias就区分大小写了,严格按照设置的alias属性进行匹配
-->
<typeAlias type="com.qinghe.mybatis.pojo.User" alias="User"></typeAlias>
<!-- 也可以以包为单位,将包中的所有类都设置为默认的类名的别名(不区分大小写)-->
<package name="com.qinghe.mybatis.pojo"></package>
</typeAliases>
<!--设置连接数据库的环境-->
<environments default="development">
<environment id="development">
<!--
transactionManager标签
JDBC表示使用原生的JDBC事务管理方式,例如commit和rollback
MANAGED表示被管理的事务管理方式,例如被Spring管理等
-->
<transactionManager type="JDBC"/>
<!--
设置数据源
POOLED表示使用数据库连接池缓存进行连接
UNPOLLED表示不使用数据库连接池
JNDI表示使用上下文中的数据源
-->
<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"/>-->
<!-- 使用package标签可以做到引入一个包下的所有映射文件的效果-->
<!--
***************************
注意mapper接口所在的包的包名必须也映射配置文件所在的包名一致
mapper接口的名字也必须与xml文件的名字保持一致
*****************************
-->
<package name="com.qinghe.mybatis.mapper"></package>
</mappers>
</configuration>