Mybatis最终搭建

框架搭建的流程
1. 导入jar
2. 准备属性文件和配置文件
3. 编写数据库的表和类
4. 为类编写一个XxxMapper接口
5. 编写接口对应的映射文件XxxMapper.xml
6. 根据接口的方法, 在映射文件中编写SQL
7. 编写测试类(使用接口代理方式来获取接口的实现类对象)
接口 对象 = sqlSession.getMapper(接口.class);
对象.方法() 内部会通过Mybatis框架自动完成SQL的CURD及结果封装的所有操作

使用流程
1. 根据表创建实体类
2. 创建接口及映射文件(4个绑定) SQL
3. 映射文件需要在mybatis-config.xml中配置<mapper resource="">

# Mybatis Pool Config
pool.driverClass=com.mysql.cj.jdbc.Driver
pool.url=jdbc:mysql://localhost:3306/xiaocheng?useSSL=false&characterEncoding=UTF8&serverTimeZone=UTC
pool.user=root
pool.password=root

 

 

log4j.rootLogger=debug,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %l %m%n

<?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>

<!-- 1. 专用于加载外部的属性文件 -->
<properties resource="app.properties"></properties>

<!-- 2. Mybatis操作的数据库环境 -->
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"/> <!--事务管理器: 采用JDBC默认事务 -->
<dataSource type="POOLED"> <!-- Mybatis内置了一个数据库的连接池 -->
<property name="driver" value="${pool.driverClass}"/>
<property name="url" value="${pool.url}"/>
<property name="username" value="${pool.user}"/>
<property name="password" value="${pool.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="mapper.EmployeeMapper"/>
</mappers>
</configuration>

public class Employee implements Serializable {/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id; // 编号
private String name; // 姓名
private String tno; // 工号
private String gender; // 性别
private String title; // 职称
private Integer managerId; // 直属领导编号
private Integer deptId; // 直属部门编号

无参

get,set,toString}

public interface EmployeeMapper {
/**
* 功能 : 通过id来查询员工对象
* @param id 员工编号
* @return 单个员工对象
*/
public Employee findById(int id);
}

<?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="mapper.EmployeeMapper">
<resultMap type="entity.Employee" id="baseMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="tno" property="tno"/>
<result column="gender" property="gender"/>
<result column="title" property="title"/>
<result column="managerId" property="managerId"/>
<result column="layout" property="layout"/>
<result column="deptId" property="deptId"/>
</resultMap>
<!-- 1. public Employee findById(int id); -->
<select id="findById" parameterType="int" resultType="entity.Employee">
SELECT * FROM t_emp WHERE id=#{value}
</select>
</mapper>

package util;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
* 封装了Mybatis工厂的加载过程
* 功能 : 可以提供一个SqlSession 【数据库连接对象】
*/
public class DBUtil {

private static SqlSessionFactory factory;

static {
//1.创建一个工厂的建造者【使用了建造者设计模式】
SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
//2. 通过建造者来创建一个Mybatis的工厂【mybatis-config.xml 就是创建的图纸】
try(InputStream ins = Resources.getResourceAsStream("mybatis-config.xml");) {
factory = factoryBuilder.build(ins);
} catch (Exception e) {
}
}

/**
* 这种方式的SqlSession默认为手动提交【事务场景使用】
* @return
*/
public static SqlSession openSqlSession() {
return openSqlSession(false); // 本质 : conn.setAutoCommit(false)
}

/**
* 这种方式的SqlSession可以设置为手动提交,还可以设置为自动提交
* @param flag true【自动提交的】 false【手动提交】
* @return
*/
public static SqlSession openSqlSession(boolean flag) {
return factory.openSession(flag);
}
}

public class EmployeeTest {
@Test
public void testFindById() {
SqlSession sqlSession = DBUtil.openSqlSession(true);
EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
Employee emp = mapper.findById(11);
System.out.println(emp);
}
}

 

posted @ 2021-05-12 20:11  很水很水的小迪迦  阅读(66)  评论(0编辑  收藏  举报